'appStoreReceiptURL'不可用:iOS上不可用

时间:2013-10-09 14:43:28

标签: ios in-app-purchase

我收到一个奇怪的编译器错误:

appStoreReceiptURL docs我们需要使用NSFoundationVersionNumber_iOS_6_1来确保我们是否可以运行该方法,但我的应用程序的目标是ios 5.0 sdk,因此该宏甚至不存在且无法编译。

所以我尝试了以下内容,但是我遇到了不同的编译器错误: 'appStoreReceiptURL'不可用:iOS上不可用

                if (([[[UIDevice currentDevice] systemVersion] compare:@"6.1" options:NSNumericSearch] != NSOrderedDescending)) {
                    receipt = t.transactionReceipt;
                } else {
                    // Load resources for iOS 7 or later
                    receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
                }

有关如何正确运行此方法的任何想法安全

2 个答案:

答案 0 :(得分:0)

文档建议如下:

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1)
    {
        // Load resources for iOS 6.1 or earlier
    } 
else
   {
        // Load resources for iOS 7 or later
        NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
        NSLog(@"receiptUrl %@",[receiptUrl path]);
        if ([[NSFileManager defaultManager] fileExistsAtPath:[receiptUrl path]])
        {
            NSLog(@"exists");

        } else {
            NSLog(@"does not exist");
        }

    }

指定:

  

注意:弱链接的一般最佳实践使用   respondsToSelector:方法不能在这里使用。在iOS 7之前,   方法是作为私有SPI实现的,但该实现称为   doesNotRecognizeSelector:方法。

在此网站上:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html

答案 1 :(得分:0)

最终,至少只要我使用xcode 4.6.x,最有效的方法是尝试/捕获appStoreReceiptURL调用,并检查是否存在非法参数异常。如果是这样,则回退到从SKPaymentTransaction.transactionReceipt属性获取旧时尚方式。

当我切换到Xcode 5.x时,我会将代码更改为Apple建议的代码。