我收到一个奇怪的编译器错误:
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]];
}
有关如何正确运行此方法的任何想法安全
答案 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:方法。
答案 1 :(得分:0)
最终,至少只要我使用xcode 4.6.x,最有效的方法是尝试/捕获appStoreReceiptURL调用,并检查是否存在非法参数异常。如果是这样,则回退到从SKPaymentTransaction.transactionReceipt属性获取旧时尚方式。
当我切换到Xcode 5.x时,我会将代码更改为Apple建议的代码。