iOS
Swift

iOS11以降のフォトライブラリへのアクセス許可について

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を呼び出すことで今まで勝手に出てきた確認のアラートが表示されるようになります。