私の iOS アプリは、ユーザーの写真にALAssetsLibrary
. アプリのプライバシー設定を変更すると ([設定] → [プライバシー] → [写真])、アプリがシステムによって強制終了されます ( SIGKILL
)。これはバグですか?
6 に答える
これはバグか、少なくとも文書化が不十分で予期しない動作だと思います。ただし、強制的に再起動するだけでクラッシュしません。SIGKILL メッセージは表示されますが、クラッシュ ログは表示されません。
登録済みの Apple 開発者である場合は、フォーラムでこの問題に関するディスカッションを確認できます。
この動作を防ぐ方法はわかりませんが、Apple にバグ レポートを提出してください。バグの重大度を測定する方法として、バグの複製を使用していると噂されています。再起動時にアプリの状態を復元するために、アプリの状態を保存できる場合があります。
これは、UIImagePickerController を使用する場合にも発生します。シーケンスは次のようになります。
UIImagePickerController を表示します。最初は、小さなアラートがユーザーにフォト ライブラリの使用許可を求めます。ユーザーがノーと言ったとしましょう。
この時点でユーザーがピッカー コントローラーでできることはキャンセルだけなので、それが起こると仮定しましょう。
後で、UIImagePickerController を表示します。フォト ライブラリにはアクセスできないが、ユーザーは [設定] でアクセスを有効にできるという、カスタマイズできないメッセージが含まれるようになりました。
ユーザーは [設定] に切り替えて、このアプリのフォト ライブラリへのアクセスを有効にします。
アプリがバックグラウンドでクラッシュします。ユーザーがピッカーをキャンセルしたか、表示したままにしているかは問題ではありません。
これについてバグを報告しました。状況に応じて、同じことを行うことをお勧めします。Apple は iOS 6 で新しいプライバシー システムを導入しましたが、問題が解決されていないことは明らかです。
シミュレーターを使用してアプリをテストするとき。アプリの権限を変更すると、ブレークポイントが得られます。コンソールに「c」と入力すると、アプリを引き続き実行して元の状態に戻すことができます。しかし、実際のデバイスでは、話ではありません。アプリを再起動するだけです。
SIGKILL エラーが中断エラーとして機能する場合があります。これは、アプリを再起動する必要があることを iOS に通知し、同時にアプリのタスクを管理しています。その場合、中断メッセージの送信方法はアプリによって処理されません。
私の場合.....アプリでの写真とカメラへのアクセスを許可していません。これらの機能へのアクセスを許可するときはいつでも、アプリを最小化してこれらの設定を有効にします。これらを有効にすると、iOS が中断され、アプリがこれを受け取りますが、処理できず、アプリが終了または閉じられます。
OK my 1st time to write an answer. I hope I get it right :)
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];
}
そのため、アプリがフォトライブラリにアクセスできない場合、ユーザーにそれを行うように依頼します。