iOSのアクセス許可ダイアログボックスの多言語化について

Monacaチームの小田川です。

iOS 10以降から、プライバシーに関連するデータにアクセスする場合は、 info.plistに使用説明を設定する必要があります。info.plistに使用説明が設定されると、対象のアクセス許可ダイアログボックスの一部として表示されるようになります。この使用説明が設定されていない場合、ダイアログボックスが表示される前にアプリが強制終了します。

今回は、Monacaで提供しているHellowWorldテンプレートを使用して、cordova-plugin-cameraのアクセス許可ダイアログボックスの多言語化を行ってみたいと思います。

info.plistに使用説明を設定する

cordova-plugin-cameraでは、以下の使用説明の設定を行う必要があります。

  • NSCameraUsageDescription
  • NSPhotoLibraryUsageDescription
  • NSLocationWhenInUseUsageDescription (CameraUsesGeolocation設定がtrueに設定されている場合)
  • NSPhotoLibraryAddUsageDescription

これらの使用説明の設定は、下記のようにconfig.xmlからedit-configを使用して行います。

<!-- 使用説明の設定例: -->
<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
  <string>need camera access to take pictures</string>
</edit-config>
<edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge">
  <string>need photo library access to get pictures from there</string>
</edit-config>
<edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
  <string>need location access to find things nearby</string>
</edit-config>
<edit-config target="NSPhotoLibraryAddUsageDescription" file="*-Info.plist" mode="merge">
  <string>need photo library access to save pictures there</string>
</edit-config>

アプリで対応する言語が英語のみの場合は、上記の設定で問題ありませんが、アプリが多言語をサポートする場合は、使用説明も多言語化する必要があります。

使用説明を多言語化する

使用説明を多言語化する場合は、InfoPlist.stringsというファイルを使用します。InfoPlist.stringsを使用することで、info.plistに設定される文字列を多言語化する事ができます。

InfoPlist.stringsを使用して多言語化する場合、対応する国別にフォルダーを用意し、対象のフォルダー内にInfoPlist.stringsを配置します。日本語に対応する場合は、ja.lprojフォルダーを用意してInfoPlist.stringsを配置します。英語に対応する場合は、en.lprojフォルダーを用意してInfoPlist.stringsを配置します。

ja.lproj/InfoPlist.stringsの記述例:
NSCameraUsageDescription = "写真を撮るにはカメラへのアクセスが必要です。";
NSPhotoLibraryUsageDescription = "写真を取得するにはフォトライブラリへのアクセスが必要です。";
NSLocationWhenInUseUsageDescription = "近くのものを見つけるにはロケーションへのアクセスが必要です。";
NSPhotoLibraryAddUsageDescription = "写真を保存するにはフォトライブラリへのアクセスが必要です。";
en.lproj/InfoPlist.stringsの記述例:
NSCameraUsageDescription = "need camera access to take pictures.";
NSPhotoLibraryUsageDescription = "need to photo library access to get pictures from there.";
NSLocationWhenInUseUsageDescription = "need location access to find things nearby.";
NSPhotoLibraryAddUsageDescription = "need to photo library access to save pictures there.";

Monacaプロジェクトの設定例

Monacaプロジェクトで使用説明の多言語化を行なう場合は、Monacaプロジェクト内にInfoPlist.stringsを用意して、ビルド時に設定を反映させる形になります。

設定例として、Monacaプロジェクトのresフォルダー内にja.lprojフォルダーとen.lprojフォルダーを作成し、作成したフォルダー内に対象のInfoPlist.stringsを配置します。配置したInfoPlist.stringsをビルド時に反映させる場合は、config.xmlからresource-fileを使用することでビルド時に設定を反映することができます。

<!-- resource-fileの設定例: -->
<platform name="ios">
  <resource-file src="/res/ja.lproj/InfoPlist.strings" target="ja.lproj/InfoPlist.strings"/>
  <resource-file src="/res/en.lproj/InfoPlist.strings" target="en.lproj/InfoPlist.strings"/>
</platform>

HellowWorldテンプレートで作成したMonacaプロジェクトに使用説明の多言語化設定を行い、ビルド時に正しく設定が反映されていると、アプリ内のGet a Pictureを初めてタップした際に、下記のように表示されるようになります。

使用説明(日本語) 使用説明(英語)

おわりに

アプリが多言語をサポートしている場合、使用説明も多言語化されていないとリジェクトの対象になる場合があります。アプリが多言語をサポートしている場合は、使用説明の多言語化も忘れずに設定してください。