iOS 应用收据验证 - 调试时模拟器和设备上的收据丢失
iOS App Receipt Validation - Receipt is missing in simulator and on device while debugging
为什么我的应用程序在开发过程中会缺少收据?
我正在 运行从 Xcode 7.3.1 安装我的 iOS (7, 8, 9) 应用程序。该应用程序的收据似乎丢失了。这个应用程序目前正在 App Store 中发布,所以我有我的开发者证书和一个“沙盒”用户登录。
模拟器
当运行宁以下代码时:
NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);
Simulator 9.3 中 iPhone 6s Plus 的结果:
file:///Users/Bourque/Library/Developer/CoreSimulator/Devices/7F32850A-CC1A-45A3-8ED6-95C75CD9DD44/data/Containers/Data/Application/46BDF021-D2A3-418E-91E1-61A15215942B/StoreKit/receipt
然而,当我导航到以第二个 UUID 命名的文件夹时,我找不到 StoreKit
文件夹。
真实设备
为了在真实的 iOS iPod touch 上进行测试,我将该代码扩展为……
…查看应在何处找到收据。
NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);
…尝试加载这样的文件。
NSString* urlContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"urlContents: %@", urlContents);
…验证文件是否存在
NSError *err;
if ( [url checkResourceIsReachableAndReturnError:&err] == NO ) {
NSLog(@"BAD No receipt found for url: %@" , url );
} else {
NSLog(@"GOOD Receipt found for url: %@" , url );
}
当 运行.
时的结果
url: file:///private/var/mobile/Containers/Data/Application/21430192-6E3A-4929-B847-23FD525D804E/StoreKit/sandboxReceipt
urlContents: (null)
BAD No receipt found for url: file:///private/var/mobile/Containers/Data/Application/21430192-6E3A-4929-B847-23FD525D804E/StoreKit/sandboxReceipt
file:///private/var/mobile/Containers/Data/Application/B1497F0D-95A7-4AD8-A9D5-7AF95663A04F/StoreKit/sandboxReceipt
由于您是通过 Xcode 而不是从商店安装的应用程序,因此它不包含任何收据。但是,您可以启动 SKReceiptRefreshRequest
以获得可用于测试的沙盒收据。
另请注意,在启动请求后提示登录时,您需要退出 App Store 并使用测试用户帐户(在 iTunes Connect 中创建)。
为什么我的应用程序在开发过程中会缺少收据?
我正在 运行从 Xcode 7.3.1 安装我的 iOS (7, 8, 9) 应用程序。该应用程序的收据似乎丢失了。这个应用程序目前正在 App Store 中发布,所以我有我的开发者证书和一个“沙盒”用户登录。
模拟器
当运行宁以下代码时:
NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);
Simulator 9.3 中 iPhone 6s Plus 的结果:
file:///Users/Bourque/Library/Developer/CoreSimulator/Devices/7F32850A-CC1A-45A3-8ED6-95C75CD9DD44/data/Containers/Data/Application/46BDF021-D2A3-418E-91E1-61A15215942B/StoreKit/receipt
然而,当我导航到以第二个 UUID 命名的文件夹时,我找不到 StoreKit
文件夹。
真实设备
为了在真实的 iOS iPod touch 上进行测试,我将该代码扩展为……
…查看应在何处找到收据。
NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);
…尝试加载这样的文件。
NSString* urlContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"urlContents: %@", urlContents);
…验证文件是否存在
NSError *err;
if ( [url checkResourceIsReachableAndReturnError:&err] == NO ) {
NSLog(@"BAD No receipt found for url: %@" , url );
} else {
NSLog(@"GOOD Receipt found for url: %@" , url );
}
当 运行.
时的结果url: file:///private/var/mobile/Containers/Data/Application/21430192-6E3A-4929-B847-23FD525D804E/StoreKit/sandboxReceipt
urlContents: (null)
BAD No receipt found for url: file:///private/var/mobile/Containers/Data/Application/21430192-6E3A-4929-B847-23FD525D804E/StoreKit/sandboxReceipt
file:///private/var/mobile/Containers/Data/Application/B1497F0D-95A7-4AD8-A9D5-7AF95663A04F/StoreKit/sandboxReceipt
由于您是通过 Xcode 而不是从商店安装的应用程序,因此它不包含任何收据。但是,您可以启动 SKReceiptRefreshRequest
以获得可用于测试的沙盒收据。
另请注意,在启动请求后提示登录时,您需要退出 App Store 并使用测试用户帐户(在 iTunes Connect 中创建)。