iOS6では、設定.appにプライバシーという項目が追加され、”写真”(フォトライブラリへの保存や読み込み)や”連絡先”などにアクセスする時に、
許可のダイアログが表示され、”いいえ”を選択した際はそれらへのアクセスが出来ないようになっています。
- 【iPhone】iOS6の写真系トラブル「写真へのアクセスを求めています」を「許可しない」としてしまった場合の対処 – OK!stiloドットコム
- iPhone5やiOS6で、カメラ系アプリが画像を保存しなくなった場合の対処方法 | fladdict
ユーザーが”写真”へのアクセスを許可したかどうかを判定するには、AssetsLibrary.frameworkの+ (ALAuthorizationStatus)authorizationStatusを使って判定することができます。
AssetsLibrary.frameworkを追加して、[ALAssetsLibrary authorizationStatus]を行うと現在の状態が取得できます。
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
ALAuthorizationStatusは4つの状態があり、ALAuthorizationStatusDeniedが許可ダイアログでいいえを押している場合に返ってきます。
/*
typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
ALAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application
ALAuthorizationStatusRestricted, // This application is not authorized to access photo data.
// The user cannot change this application’s status, possibly due to active restrictions
// such as parental controls being in place.
ALAuthorizationStatusDenied, // User has explicitly denied this application access to photos data.
ALAuthorizationStatusAuthorized // User has authorized this application to access photos data.
} __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0);
*/
NSString *labelText = nil;
if (status == ALAuthorizationStatusNotDetermined){
labelText = @"まだ許可ダイアログ出たことない";
} else if (status == ALAuthorizationStatusRestricted){
labelText = @"機能制限(ペアレンタルコントロール)で許可されてない";
} else if (status == ALAuthorizationStatusDenied){
labelText = @"許可ダイアログで\"いいえ\"が押されています\n"
"設定アプリ -> プライバシー > 写真 -> 該当アプリを\"オン\"する必要があります";
} else if (status == ALAuthorizationStatusAuthorized){
labelText = @"写真へのアクセスが許可されています";
}
という感じです。
扱い方は基本的にGPSの+ (CLAuthorizationStatus)authorizationStatusやEventKitの+ (EKAuthorizationStatus)authorizationStatusForEntityType:(EKEntityType)entityTypeなどと同様です。
[ALAssetsLibrary authorizationStatus]を表示する簡単なサンプルを作ってみました
プライバシーの許可は実機じゃないと上手く動いてない気がするので、実機で試す必要がありそうです。
アクセスが許可されていない場合、UIImagePickerControllerでは次のような表示が出ますが、
あまり親切ではないので、アクセスがオフとなってるユーザーには何らかの注意を表示したほうがいいかもしれないですね。
ちなみにUIImagePickerControllerでフォトライブラリが使用可能なのかをisSourceTypeAvailable:で判定できますが、
これはプライバシーの許可に関係なくフォトライブラリが使えるかの判定なので、許可で”いいえ”の場合でもYESを返します。
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];
参考
追記
許可ダイアログに表示する説明文はinfo.plistにNSPhotoLibraryUsageDescriptionをキーに値を設定することで変更できます。
他の許可ダイアログも同様の方法で説明文を書くことができます。
詳細は下記のサイトに