基本事項
iOSアプリの写真(カメラロールなど)へのアクセス許諾についての基本は以下をご覧ください
簡単にまとめると以下のようになります。
iOS13以前
写真へのアクセス権限は一種類(閲覧・追加両方)しかなく、その許諾ダイアログは二択のダイアログである。
許諾の状態をチェックする時はPHAuthorizationStatus
を使う。
ユーザーに許諾を得る時はrequestAuthorization(_:)
を使う。
許諾ダイアログの文言はNSPhotoLibraryUsageDescription
が適用される。
iOS14
iOS14では写真へのアクセス権限として「追加のみ」の権限と「閲覧・追加両方」の権限がある。
許諾の状態をチェックする時はauthorizationStatus(for: .addOnly)
を使う。
ユーザーに許諾を得る時はrequestAuthorization(for: .addOnly)
を使う。
許諾ダイアログの文言はNSPhotoLibraryAddUsageDescription
が適用される。
許諾の状態をチェックする時はauthorizationStatus(for: .readWrite)
を使う。
ユーザーに許諾を得る時はrequestAuthorization(for: .readWrite)
を使う。
許諾ダイアログの文言は、iOS13以下と同じでNSPhotoLibraryUsageDescription
が適用される。
iOS14で「追加のみ」「閲覧・追加両方」を1アプリ内に混在させられるが、するとどうなるか
例えば、1アプリ内に画像保存機能(追加のみ)と画像アップロード機能(閲覧・追加両方)が両方ある場合など。
許諾文言の整理
許諾文言はinfo.plistにNSPhotoLibraryUsageDescription
とNSPhotoLibraryAddUsageDescription
の二つの固定文言を書いていくことになる。
info.plistの内容をiOSのバージョンが13以下か14以降かによって動的に変えることはできない(はず)なので、全状況をカバーできる文言を入れていくしかない。※もし変える方法を知ってる場合は教えてください・・・
以下のように表で整理するとわかるが、NSPhotoLibraryUsageDescriptionは画像アップロード機能と画像保存機能両方の時に表示されうるので、両方の機能についての説明を入れていかなければならないと考えられる。
一方、NSPhotoLibraryAddUsageDescription
はiOS14で画像保存機能を使う時に表示される可能性があるだけであるから、画像保存機能についての説明さえ入っていればいいと考えられる。
画像アップロード機能(閲覧・追加両方) | 画像保存機能(追加のみ) | |
---|---|---|
iOS13以前 | NSPhotoLibraryUsageDescription | NSPhotoLibraryUsageDescription |
iOS14 | NSPhotoLibraryUsageDescription | NSPhotoLibraryAddUsageDescription |
iPhoneの「設定」アプリ > 「写真」はどのような設定となるか
ケース1 最初に画像保存機能を使用 -> その後画像アップロード機能を使用
画像保存機能を使う時、requestAuthorization(for: .addOnly)
でユーザーに許諾を得る。許諾が得られた場合、iPhoneの「設定」アプリ > 該当アプリ > Photos
を見てみると、以下のように追加のみか不許可かの二択になる。
その後、画像アップロード機能を使う時、requestAuthorization(for: .readWrite)
でユーザーに許諾を得ることになる。iPhoneの「設定」アプリ > 該当アプリ > Photos
を見てみると、以下のように「追加のみ」「特定の写真のみ」「全部の写真」「不許可」の四択となる。
ケース2 最初に画像アップロード機能を使用 -> その後画像保存機能を使用
最初requestAuthorization(for: .readWrite)
でユーザーに許諾を得ることになる。許諾を得られると、設定アプリでは「特定の写真のみ」「全部の写真」「不許可」の三択となる。
その後、画像保存機能を使う時は、すでに閲覧・追加両方の権限が得られていることから、改めてユーザーに許諾を得る必要はないから、そのまま画像保存機能が使えることになる。
最終的に、順番によって「設定」の「写真」の選択肢が3つと4つで異なってくることになり、少し気持ち悪いが・・・