[Ionic, Cordova] iOSでカメラ起動時できないエラーの対処法

[Ionic, Cordova] iOSでカメラ起動時できないエラーの対処法

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 ファイルも新しく生成されるのでうまくいくはずです。

以上。

Ionicカテゴリの最新記事