Ionic + iOS でカメラが起動できない
Ionicを使ってアプリを開発しているとき、Androidだとうまくいったカメラの起動が、iOSで試すとクラッシュする現象に見舞われました。いろいろ調べてみると、アプリの設定項目にカメラの利用目的が定義されていないのが原因のようでした。たぶんCordovaの設定項目だと思うのでCordovaでも同じなのではないかと思います。
iOSでは NSCameraUsageDescription キーに利用目的を記述しておかなければなりません。利用時にはここで定義した利用目的を表示し、ユーザーにアクセス許可を求めます。そしてユーザーが許可した場合のみ、カメラが起動することになります。
NSCameraUsageDescription が定義されていないと、実行時にエラーとなります。
ここではカメラについての説明ですが、ほかにもさまざまな端末の機能やデータへのアクセスについても同様なようです。
Ionic(Cordova) での利用目的の記述方法
config.xml
ファイルに Cordva に関する設定項目が定義されています。この中の platform タグ以下に次のように追記します。
<platform name="ios">
<edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription">
<string>※ここに利用目的を記述します。確認画面に表示されます。</string>
</edit-config>
...(略)...
</platform>
ファイル更新後、prepare
コマンドを実行することで、config.xml
ファイルの内容で iOS 固有のマニフェストファイル(*-Info.plist)に反映されます。
$ ionic cordova prepare ios
/platforms/ios/プロジェクト名/プロジェクト名-Info.plist
ファイルに次の内容が追加されているはずです。
<key>NSCameraUsageDescription</key>
<string>※config.xmlで定義した文言</string>
なお、直接 *-Info.plist
ファイルを編集すると、ビルドし時に、config.xml
ファイルと *-Info.plist
ファイルの間で整合性が取れていないのでエラーとなってしまいます。
prepare
コマンドでもうまくいかない場合は、一度プラットフォームを削除して、追加しなおすとうまくいきます。
$ ionic cordova platform rm ios
$ ionic cordova platform add ios
これで一度 /platform/ios/
フォルダ以下が削除され、もろもろのファイルが再度生成されます。*-Info.plist
ファイルも新しく生成されるのでうまくいくはずです。
以上。
コメントを書く