1

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

appStoreReceiptURL 文档说我们需要使用 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]];
                }

关于如何正确安全地运行此方法的任何想法?

4

2 回答 2

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

于 2013-12-09T10:13:41.943 回答
0

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

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

于 2013-12-09T17:10:07.283 回答