iOS11から UIImagePickerController
でフォトライブラリへアクセスする際にinfo.plistで Privacy - Photo Library Usage Description
を設定してもアクセス権限の確認が自動で行われなくなり、アラートが自動で表示されなくなりました。
iOSの変更によるものなのでフォトライブラリに関してはアクセス許可の設定をしなくてもリジェクト対象ではない気もしますが、ガイドラインには
ユーザーは、現在の場所、予定表、連絡先情報、通知、写真などの個人情報にアクセスするためのアプリのアクセス許可を付与する必要があります。
と記載されており、写真
という表記があるため、もしかしたらリジェクト対象になる可能性があります。
もしリジェクトされてしまった場合は下記のようにこちら側でアクセス権限の確認アラートを表示しましょう。
##info.plist
Privacy - Photo Library Usage Description
を追加
##UIImagePickerControllerの呼び出し
import Photos
if PHPhotoLibrary.authorizationStatus() != .authorized {
PHPhotoLibrary.requestAuthorization { status in
if status == .authorized {
// フォトライブラリを表示する
} else if status == .denied {
// フォトライブラリへのアクセスが許可されていないため、アラートを表示する
let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert)
let settingsAction = UIAlertAction(title: "設定", style: .default, handler: { (_) -> Void in
guard let settingsURL = URL(string: UIApplication.openSettingsURLString ) else {
return
}
UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
})
let closeAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: .cancel, handler: nil)
alert.addAction(settingsAction)
alert.addAction(closeAction)
self.present(alert, animated: true, completion: nil)
}
}
} else {
// フォトライブラリを表示する
}
PHPhotoLibrary.requestAuthorization
を呼び出すことで今まで勝手に出てきた確認のアラートが表示されるようになります。