#実装コード
iOS 14からPHPhotoLibrary.authorizationStatus()
の引数に.readWrite
か.addonly
の指定が必要になりました。
そこで、フォトライブラリの開き方を備忘録としてまとめました。
実装したalbumAction
メソッドを使用するとフォトライブラリが開けます。
info.plist
にPrivacy – Photo Library Usage Description
の追加も忘れないように!
import Photos
private func albumAction() {
// 端末にアルバムがあるかを確認
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {
if #available(iOS 14, *) {
// iOS14以降の設定
let authorizationStatus = PHPhotoLibrary.authorizationStatus(for: .readWrite)
self.albumCommonAction(authorizationStatus)
} else {
// iOS14より前の設定
let authorizationStatus = PHPhotoLibrary.authorizationStatus()
self.albumCommonAction(authorizationStatus)
}
}
}
private func albumCommonAction(_ authorizationStatus: PHAuthorizationStatus) {
// フォトライブラリを使う準備
let photoLibraryPicker = UIImagePickerController()
photoLibraryPicker.sourceType = .photoLibrary
photoLibraryPicker.delegate = self
switch authorizationStatus {
case .notDetermined:
// 初回起動時アルバムアクセス権限確認
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .authorized:
// アクセスを許可するとカメラロールが出てくる
DispatchQueue.main.async {
self.present(photoLibraryPicker, animated: true)
}
default:
break
}
}
case .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)
case .authorized, .restricted, .limited:
// アクセス権限があるとき
self.present(photoLibraryPicker, animated: true)
@unknown default:
break
}
}
#Limited Photos Libraryの利用
iOS 14からはLimited Photos Libraryが使えるようになり、ユーザが選択した写真のみしかアプリからアクセスできない状態を作ることができます。
(「写真を選択...」の項目がiOS14から追加)
ただ、ここでアクセスを許可した写真を一覧で開けるようなものがOS標準でなさそう...
現時点では、自前で実装するかライブラリを使うかして実装しないといけない
MosaiqueAssetsPicker