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 を介して初めて実行するとき、またはデバイスからアプリを削除した後に、開発中にレシートがないことが常に発生します。
2 回目の実行では、このようなエラーは発生しません。レシートが偽の「サンドボックス」App Store から正常に取得され、2 回目の実行で表示されることを確認しました。
main
質問は次のとおりです。メソッドから検証呼び出しが行われた場合にのみ、Receigen コードがクラッシュしてレシートが見つからないのはなぜですか?