私のiOSアプリはALAssetsLibrary
でユーザーの写真にアクセスします。アプリのプライバシー設定を変更すると(設定→プライバシー→写真)、アプリがシステム(SIGKILL
)によって強制終了されます。これはバグですか?
それはバグか、少なくとも文書化が不十分で予期しない動作であると思います。ただし、クラッシュすることはなく、再起動が強制されるだけです。 SIGKILLメッセージが表示されますが、クラッシュログは表示されません。
あなたが登録済みの場合Apple=開発者であるあなたは、この問題についての議論のために彼らのフォーラムをチェックすることができます
この動作を防ぐ方法はわかりませんが、アップルにバグレポートを提出してください。バグの重大度を測定する方法として、バグの重複を使用していると噂されています。多分あなたはそれが再起動したときにそれを復元するためにあなたのアプリの状態を保存することができます。
これは、UIImagePickerControllerを使用する場合にも発生します。シーケンスは次のようになります。
UIImagePickerControllerを表示します。初めて、小さなアラートがユーザーにフォトライブラリの使用許可を求めます。ユーザーがいいえと言うとしましょう。
この時点でユーザーがピッカーコントローラーで行えることはすべてキャンセルです。そのため、それが起こっていると仮定しましょう。
後で、UIImagePickerControllerを表示します。フォトライブラリにはアクセスできないが、ユーザーは[設定]でアクセスを有効にできることを示すカスタマイズできないメッセージが含まれています。
ユーザーは[設定]に切り替えて、このアプリの写真ライブラリへのアクセスを有効にします。
アプリがバックグラウンドでクラッシュします。ユーザーがピッカーをキャンセルしたか、表示したままにしたかは関係ありません。
私はこれについてバグを報告しましたが、状況に応じて同じことを行うことをお勧めします。 AppleはiOS 6で新しいプライバシーシステムを導入しましたが、明らかにその問題点は解決されていません。
このPDF内で「kill」という単語を検索してください: http://adcdownload.Apple.com/wwdc_2012/wwdc_2012_session_pdfs/session_710__privacy_support_in_ios_and_os_x.pdf
iOSは、特定の権限が変更されるとアプリを強制終了します。
この情報を追跡するのは困難です。 'ガイド'(たとえば、設定プログラミングガイド)のいずれにもありません。
シミュレーターを使用してアプリをテストすると、アプリの権限を変更するとブレークポイントが表示されます。コンソールに「c」を入力すると、アプリを引き続き実行して元の状態に戻すことができます。ただし、実際のデバイスでは、ストーリーではありません。アプリを再起動するだけです。
SIGKILLエラーが中断エラーとして機能する場合があります。これは、アプリを再起動する必要があることをiOSに通知し、同時にアプリのタスクを管理しているため、中断メッセージの送信方法がアプリによって処理されません。
私の場合.....アプリでの写真とカメラへのアクセスを許可していません。これらの機能へのアクセスを許可するときはいつでも、アプリを最小化してこれらの設定を有効にします。これらを有効にすると、iOSが割り込みを受けてアプリがこれを受け取りますが、処理できず、アプリが終了またはクローズします。
はじめて答えを書いてください。私はそれが正しくなることを願っています:)
AssetForURL:resultBlock:failureBlock:を使用してアセットライブラリにアクセスしていますか?
その場合は、ALAssetLibraryの障害ブロックを処理していない可能性があります。
あなたは次のようなことをすることができます
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Access to Photo Library is Denied "
message:@"Please allow <YOUR APP NAME> to access your Photo library from Privacy Settings"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
そのため、アプリがフォトライブラリにアクセスできない場合は、ユーザーにアクセスを要求します。