iOSでカメラと写真にアクセスする
iPhone 実機でカメラにアクセスする
iOS アプリを iPhone 実機に入れて、カメラにアクセスしようとすると、以下のエラーが発生した。
[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.
iOS 10 以降、カメラにアクセスする場合、Info.plist
に NSCameraUsageDescription キーを追加する必要がある。フォトライブラリの場合、キーは NSPhotoLibraryUsageDescription です。
Info.plist
を XML 形式で開いた場合、以下のコードを <dict>
内に追加する。
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) needs camera access.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) needs photo library access.</string>
Info.plist
をプロパティリストとして開いた場合、以下のキーを追加する。
Key | Value |
---|---|
Privacy - Camera Usage Description | $(PRODUCT_NAME) needs camera access. |
Privacy - Photo Library Usage Description | $(PRODUCT_NAME) needs photo library access. |
iOS シミュレータに画像を追加する
iOS シミュレータに画像をドラッグ&ドロップするだけです。
しかし Downloads フォルダ内の画像を使うと、次のエラーが発生した。
Failed to import ‘xxx’, error [PHPhotosErrorDomain] -1: The operation couldn’t be completed. (PHPhotosErrorDomain error -1.)
一旦 Documents フォルダ内の画像を使って、シミュレータにドラッグ&ドロップすれば、アクセス許可を求めるダイアログが出る。「OK」を押すと、画像が追加される。
xcrun simctl
コマンドで画像を追加することもできる。
- 現在起動しているシミュレータに追加する
$ xcrun simctl addmedia booted x.png
- 他のシミュレータに追加する場合は、booted をそのシミュレータの UUID に置き換える。
ちなみに、写真は ~/Library/Developer/CoreSimulator/Devices/<UUID>/data/Media/DCIM/100APPLE/
フォルダに格納されている。
次のコマンドで起動しているシミュレータの UUID を取得できる。
$ xcrun simctl list devices available | grep -i booted