Receigen文档和其他来源建议尽快验证您的应用程序的收据,甚至在方法main
的早期。
当我在方法中调用 Receigen 生成的代码main
时,当应用程序没有 Receipt 时,我会遇到执行中断。
int main(int argc, char *argv[])
{
@autoreleasepool {
MyPrefix_CheckReceipt( [[MyReceiptRefreshDelegate alloc] init] );
return UIApplicationMain(argc, argv, nil, NSStringFromClass([XMAppDelegate class]));
}
}
调用return UIApplicationMain
在 Xcode 7.3.1 中显示此错误消息:
线程 1:EXC_BAD_ACCESS(代码=1,地址=0xe)
将此调用MyPrefix_CheckReceipt
从main
方法移到我的应用程序委托didFinishLaunchingWithOptions
方法的顶部是一种解决方法。EXC_BAD_ACCESS
当收据不存在时不会发生错误。
当用户通过 Mac 或 PC 上的 iTunes 应用程序从备份中恢复他们的应用程序时,可能会在现场没有收据。第一次在真正的硬件 iOS 设备上通过 Xcode 执行或从设备中删除应用程序后,开发中总是会出现没有收据的情况。
第二次运行没有出现这样的错误。我确认收据已从假的“沙盒”App Store 成功检索,并且在第二次运行时出现。
所以问题是:为什么 Receigen 代码在没有找到 Receipt 但只有在从该main
方法进行验证调用时才会崩溃并崩溃?