PHAuthorizationStatus の .limited とは?
Xcode12 の対応に伴って、新しく出た warnings を修正しようとしていると、PHAuthorizationStatus
周りで何やら Switch must be exhaustive
という warning が発生していました。
全てのケース網羅してるはずだけどな〜と思い、PHAuthorizationStatus
のソースを確認して見ると、何やら .limited
というもの iOS14 から追加されていました。
@available(iOS 8, iOS 8, *) public enum PHAuthorizationStatus : Int { @available(iOS 8, *) case notDetermined = 0 // User has not yet made a choice with regards to this application @available(iOS 8, *) case restricted = 1 // 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. @available(iOS 8, *) case denied = 2 // User has explicitly denied this application access to photos data. @available(iOS 8, *) case authorized = 3 // User has authorized this application to access photos data. @available(iOS 14, *) case limited = 4 // User has authorized this application for limited photo library access. Add PHPhotoLibraryPreventAutomaticLimitedAccessAlert = YES to the application's Info.plist to prevent the automatic alert to update the users limited library selection. Use -[PHPhotoLibrary(PhotosUISupport) presentLimitedLibraryPickerFromViewController:] from PhotosUI/PHPhotoLibrary+PhotosUISupport.h to manually present the limited library picker. }
.limited とは?
iOS14 から Limited Photos Library
というものが追加されたらしく、ユーザがフォトライブラリーの許可ダイアログで、Select Photos...
を選択した時の、PHAuthorizationStatus
が .limited
になるようです。また、既存の PHPhotoLibrary.requestAuthorization
リクエストを使用している場合は、ユーザが Select Photos...
を選択した場合、PHAuthorizationStatus
は .authorized
になります。.limited
として値を受け取りたい場合は、PHPhotoLibrary.requestAuthorization(for: PHAccessLevel)
で PHAccessLevel
を指定する必要があります。
余談
Select Photos...
を選択した場合は、アプリでアクセス可能にする写真を選択するため PHPickerViewController
が別プロセスで起動されます。これらのプロセスは、アクセス毎に選択する写真を変更するかどうかダイアログが表示されます。毎回アラートを表示させたくない場合は、info.plist
の PHPhotoLibraryPreventAutomaticLimitedAccessAlert
で制御する必要があります。
参考
- https://www.wwdcnotes.com/notes/wwdc20/10641/
- https://developer.apple.com/forums/thread/653145
- https://developer.apple.com/documentation/photokit/phauthorizationstatus/limited
- https://qiita.com/akatsuki174/items/cc59203c2f3b1fe83573#%E5%86%99%E7%9C%9F%E5%85%B1%E6%9C%89%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E4%BE%8B