Closed8

【Swift】PHPhotoLibrary 0->1

yoshitakayoshitaka

iOS13まではアルバムのアクセス権がOK or NO だったのが、iOS14から選択した写真のみってのが追加されたので、これがOK扱いになり、適当な写真を選ぶとアプリが落ちてしまう

yoshitakayoshitaka

PHPhotoLibrary

An object that manages access and changes to the user’s photo library.

class PHPhotoLibrary : NSObject

オブジェクトは、ローカルデバイスに保存されているアセットやiCloud Photosに保存されているアセットを含む、Photosアプリが管理するアセットとコレクションのセット全体を表します。 このオブジェクトは、次のタスクに使用します。

アプリがフォトコンテンツにアクセスするためのユーザーの権限を取得または確認する

アセットとコレクションに変更を加える。 たとえば、アセットのメタデータやコンテンツの編集、新しいアセットの挿入、コレクションのメンバーの再配置などです。

ライブラリが変更されたときにシステムが送信する更新メッセージの登録

yoshitakayoshitaka

Verifying Authorization 承認の確認

class func authorizationStatus(for: PHAccessLevel) -> PHAuthorizationStatus

指定されたアクセスレベルでユーザーのフォトライブラリにアクセスするためのアプリの承認を返します。

class func requestAuthorization(for: PHAccessLevel, handler: (PHAuthorizationStatus) -> Void)

フォトライブラリにアクセスするためのアクセス許可をアプリに付与するようにユーザーに促します。

enum PHAccessLevel

case addOnly
// アプリがユーザーのフォトライブラリにのみ追加できることを示す値。

case readWrite
// アプリがユーザーのフォトライブラリからの読み取りと書き込みができることを示す値。

ユーザーのフォトライブラリへのアプリのアクセスレベル。

enum PHAuthorizationStatus

case notDetermined
// ユーザーがアプリの承認ステータスを設定していません。

case restricted
// アプリはフォトライブラリへのアクセスを許可されておらず、ユーザーはそのような許可を与えることはできません。

case denied
// ユーザーは、このアプリによるフォトライブラリへのアクセスを明示的に拒否しました。

case authorized
// ユーザーは、このアプリにフォトライブラリへのアクセスを明示的に許可しました。

case limited
// ユーザーは、フォトライブラリへのアクセスを制限するためにこのアプリを承認しました。

ユーザーのフォトライブラリにアクセスするためのアプリの承認に関する情報。

yoshitakayoshitaka
class func authorizationStatus(for accessLevel: PHAccessLevel) -> PHAuthorizationStatus

指定されたアクセスレベルでユーザーのフォトライブラリにアクセスするためのアプリの承認を返します。
可用性

パラメーター
アクセスレベル
アプリの認証ステータスを決定するためのアクセスレベル。

戻り値
アプリの承認ステータス。

討論
ユーザーのフォトライブラリへのアクセスの詳細については、フォトアプリでの強化されたプライバシーエクスペリエンスの提供を参照してください。

yoshitakayoshitaka
class func requestAuthorization(for accessLevel: PHAccessLevel, 
                        handler: @escaping (PHAuthorizationStatus) -> Void)

フォトライブラリにアクセスするためのアクセス許可をアプリに付与するようにユーザーに促します。

パラメーター
アクセスレベル
要求するアクセスレベル。

ハンドラ
アプリのステータスを判断したときにシステムが呼び出すコールバック。

討論
並行性に関する注意

このページに示すように、完了ハンドラーを使用して同期コードからこのメソッドを呼び出すことも、次の宣言を持つ非同期メソッドとして呼び出すこともできます。

class func requestAuthorization(for accessLevel: PHAccessLevel) async -> PHAuthorizationStatus

Swiftの同時実行性と非同期コードについては、Objective-CAPIの非同期呼び出しを参照してください。

ユーザーのフォトライブラリへのアクセスの詳細については、フォトアプリでの強化されたプライバシーエクスペリエンスの提供を参照してください。


2回目の呼び出しができると思ったら、一度決めていると呼び出されないっぽいかな??

yoshitakayoshitaka

Accessing the Shared Library

class func shared() -> PHPhotoLibrary

戻り値
シングルトンフォトライブラリオブジェクト。

討論
共有フォトライブラリオブジェクトは、どのスレッドからでも使用できます。

yoshitakayoshitaka

限定ライブラリピッカーの提示 Presenting the Limited Library Picker

func presentLimitedLibraryPicker(from controller: UIViewController)

限られたライブラリの選択を更新するようにユーザーに促します。

パラメーター
コントローラ
限定されたライブラリピッカーを表示するビューコントローラー。

討論
ユーザーがrequestAuthorization(for:handler :)を使用して制限付きライブラリアクセスを有効にした場合は、このメソッドを使用して制限付きライブラリピッカーを表示し、選択を更新できるようにします。 ユーザーがアプリの制限付きライブラリアクセスモードを有効にしていない場合、このメソッドを呼び出しても何も起こりません。 自動制限ライブラリアラートプロンプトを無効にする場合は、この方法を使用します。 デフォルトでは、システムは、アプリのライフサイクルごとに1回、制限されたライブラリの選択を更新するようにユーザーに自動的に促します。 プロンプトを非表示にするには、PHPhotoLibraryPreventAutomaticLimitedAccessAlertをアプリのInfo.plistファイルに追加します。

ユーザーが制限されたライブラリ選択に適用する変更は、PHPhotoLibraryChangeObserverの更新をトリガーします。

このスクラップは2021/07/16にクローズされました