umi Retro Snap | 無料のフィルム風カメラアプリです!ぜひ使ってください!
https://apps.apple.com/us/app/umi-retro-snap-film-look-cam/id6743605662
100以上のフィルター、基本フィルム効果、 ハーフ撮影、二重露光なども無料で使えます!
iOS の写真・カメラ権限まわり
- PhotoKit の権限モデル(iOS 14+)
- アクセスレベルは
.addOnly
(追加のみ)と.readWrite
(閲覧+追加)の2種。 - 認可ステータスは
notDetermined / restricted / denied / authorized / limited
。limited
は.readWrite
のときだけ出現し、.addOnly
にはありません。Apple Developer
- アクセスレベルは
- “Limited” 自動プロンプトの抑止と管理
- “このアプリにもっと写真を追加しますか?”の自動プロンプトは Info.plist の
PHPhotoLibraryPreventAutomaticLimitedAccessAlert
(Boolean) で抑止可能。 - 抑止した場合、ユーザーに選択を増やしてもらうときは
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from:)
を自前タイミングで表示します(システムUI・文言はカスタム不可/OS言語に従う)。Apple Developer
- “このアプリにもっと写真を追加しますか?”の自動プロンプトは Info.plist の
- 設定アプリでの写真権限変更と“アプリ終了”
- ユーザーが 設定 > プライバシー > 写真 で権限を変更すると、アプリが即時に SIGKILL(9) で終了(再起動相当)する事象は開発者界隈で広く報告されています(公式明記は見当たりませんが、再現報告が多数)。このため コールドスタート想定の状態保存が必須です。
- 初回プロンプトと再提示
- 初回の権限プロンプト文言は
NSPhotoLibraryUsageDescription
/NSPhotoLibraryAddUsageDescription
(用途に応じて)でローカライズされます。 - いったん “拒否(denied)” された後は、通常の API 呼び出しでは再度のプロンプトは出ません。ユーザーを 設定アプリへ誘導して変更してもらう必要があります(
UIApplication.open
など)
- 初回の権限プロンプト文言は
.addOnly
とできること / できないこと.addOnly
は 既存資産の読み取り不可・アルバム作成不可。新規保存(追加)のみ可能。limited
は発生しない(=.authorized
かそれ以外)。仕様は API 定義上の前提です。
- カメラ(AVFoundation)の許可
- カメラ使用時は 事前に許可確認/取得が必須。未許可のままアクセスするとシステムがアプリを終了し得る、という趣旨が公式ドキュメントにあります。設定変更が即“必ず終了”するとまでは明記されていませんが、許可がない操作はクラッシュ/終了の原因になります。
実装・運用での実務的な指針(ドキュメント準拠)
- 状態保存を前提に:設定変更で プロセスが落ちても復元できるよう、直前の画面・選択中フィルタなどは 永続ストレージ(
UserDefaults
や軽量 DB)へ即時保存。写真権限変更時に落ちる可能性は織り込みます。 - Limited は自前でハンドリング:自動プロンプトは plist で抑止し、画面上の「写真を追加」ボタンなどから
presentLimitedLibraryPicker
を呼ぶ流れが UX 的に安定します(文言カスタムは不可)。 - 拒否後は設定誘導:
denied
になったら再プロンプト不可。権限説明画面+設定アプリへのディープリンク導線を用意。 - アクセスレベル設計:
- 閲覧・アルバム運用が必要なら
.readWrite
一択(limited
を受け容れるかはプロダクト判断)。 - 保存だけで良いミニマム体験なら
.addOnly
(ただしギャラリー・アルバム連携は諦める)。
- 閲覧・アルバム運用が必要なら
これで権限チェック時の処理は完璧ですね?使い方によって適切な設定ができればユーザーにも優しいですね^^
コメント