config-fileとedit-configの動作の違いについて
Monacaチームの 小田川です。
Monacaでアプリ開発をする際に、AndroidのAndroidManifest.xml
やiOSのInfo.plist
の設定を行いたい場合があります。通常、このようなネイティブ側の設定を行う場合は、Cordovaプラグインを使用して設定を行いますが、AndroidManifest.xmlやInfo.plistの設定については、Monacaプロジェクトのルートにあるconfig.xml
からconfig-fileやedit-configを利用することで対応することができます。
config.xmlやedit-configは、Cordovaが提供している機能になり、Cordovaプラグインのplugin.xmlでも利用されている設定になります。
今回は、config-fileとedit-configの動作の違いについて見ていきたいと思います。
config-file
config-fileは、設定対象のXMLドキュメントツリーに新しい子要素を追加します。AndroidManifest.xmlやInfo.plistもXML形式で構成されています。config-fileは、既存の設定を変更したり、削除することはできません。
下記の例では、AndroidManifest.xmlにuses-permission
要素を追加しています。
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</config-file>
</platform>
下記の例では、Info.plistにCFBundleLocalizations
要素を追加しています。
<platform name="ios">
<config-file platform="ios" parent="CFBundleLocalizations" target="*-Info.plist">
<array>
<string>en</string>
<string>ja</string>
</array>
</config-file>
</platform>
edit-config
edit-configもXMLドキュメントツリーの設定を行いますが、edit-configでは、XMLドキュメントツリーに新しい子要素を追加するのではなく、XML要素の属性を変更します。edit-configでは、属性を変更するモードとして、merge
とoverwrite
が用意されています。
mergeを指定した場合は、対象のXML要素に指定された属性を追加します。指定された属性がすでに存在する場合は、既存の設定を置き換えます。overwriteを指定した場合は、対象のXML要素に設定されている属性が、指定された属性に置き換えられます。
edit-configには、1つの子要素含め、その子要素に追加する属性を設定します。下記の例では、AndroidManifest.xmlのuses-sdk要素にminSdkVersionとmaxSdkVersionを追加しています。
<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
<uses-sdk android:minSdkVersion="16" android:maxSdkVersion="23" />
</edit-config>
下記の例では、Info.plistのNSCameraUsageDescription要素に設定した値(string)を追加し、NSPhotoLibraryUsageDescription要素では、設定した値(string)で置き換えています。
<platform name="ios">
<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="overwrite">
<string>need to photo library access to get pictures from there</string>
</edit-config>
</platform>
edit-configの注意点
edit-configでは、ビルド時に同じ属性を変更することはできません。edit-configは、config.xml以外にCordovaプラグインのplugin.xmlでも使用されるため、複数のCordovaプラグインを使用している場合、設定に競合が発生する可能性があります。
edit-configの設定に競合が発生した場合は、競合が発生しているCordovaプラグインを特定し、競合が発生しているCordovaプラグインから対象のedit-config設定を削除し、config.xmlから対象のedit-config設定を行う等の対応が必要になります。
Monacaで対象のedit-config設定を削除したCordovaプラグインを使用する場合は、
- Cordovaプラグインを提供しているGitHubからZipファイルをダウンロードします。
- 解凍したZipファイルにあるplugin.xmlから対象のedit-config設定を削除します。
- 「2」の状態で、再度Zipファイルを作成します。
を行うことで、MonacaクラウドIDEから「3」の対応済みのCordovaプラグインをインポートして利用することができます。
おわりに
config-fileとedit-configは、Monacaプロジェクトのconfig.xmlから利用することができます。config-fileとedit-configを使用することで、Cordovaプラグインを作成しなくてもAndroidManifest.xmlやInfo.plistの設定が可能になりますので、対象のアプリでAndroidManifest.xmlやInfo.plistの設定が必要になった場合は、一度、config.xmlからconfig-fileやedit-configを利用してみてください。