アドレス帳を使用するアプリがあります。iOS 6で実行している場合、ユーザーがアドレス帳へのアクセスを必要とする操作を行うと、このコードが実行されます。
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined)
{
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error)
{
if (granted)
{
showContactChooser();
}
});
CFRelease(addressBookRef);
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
showContactChooser();
}
else
{
showAccessDeniedAlert();
}
これは完全に機能します。連絡先情報を読み取ることができ、ユーザーがアクセスを拒否すると、アプリはそれに応じて反応します。
ただし、ユーザーが次の場合:
アプリmain()
は、例外情報や意味のあるスタックトレースなしで、すぐに内部でクラッシュします。「すべての例外」と[NSException raise]
ブレークポイントをオンにしてみましたが、それ以上の情報は得られませんでした。
起動時にアプリが上記のコードを実行しなくても、クラッシュを再現できます。
ここで何が起こっているのですか?サブスクライブする必要があるコールバックはありますか?
私は自分のアプリでこれを見ました。そして私は他の人もこれを報告しているのを見ました。これは意図的な動作であると確信しています。OSは、プライバシー権限の変更に反応するバックグラウンドアプリをすべて強制終了します。Appleはこれに大ハンマーのアプローチを取っているようだ。クラッシュではありません(デバッガーで実行するとクラッシュするように見える場合があります)。アプリは他のさまざまな理由で終了します。これを理由のリストに追加します。これにより、アプリを完全に再起動したときにアプリの状態を復元するための適切な作業を行う理由が増えます。
この動作は、連絡先、写真、マイク、カレンダー、カメラなど、さまざまなプライバシー設定のすべてに適用されることに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加