なぜ
cordovaベースでアプリを開発しているのですが、iOS用設定をするためにXcodeで直接パラメータを変更し、 -info.plistを更新している。
だけど、cordovaでビルドの準備をするための cordova prepareコマンドを使うと -info.plistが更新されてしまい困っていた。
方法
cordovaにはhookという仕組みがあり、様々なフックポイントに任意の処理を実行することができる。
その仕組みを使って、cordova prepareの前に -info.plistのバックアップをとり、cordova prepare後にそのバックアップを戻すという処理を入れ込んで上書きされないようにします。
scripts/backup-info-plist.sh
#!/bin/bash
# 更新前の-info.plistのバックアップを取る
cp platforms/ios/project_dir/*-Info.plist platforms/ios/project_dir/*-Info.plist.bk
scripts/restore-info-plist.sh
#!/bin/bash
# 更新後の-info.plistをバックアップに戻す
mv platforms/ios/project_dir/*-Info.plist.bk platforms/ios/project_dir/*-Info.plist
上記のスクリプトをbefore_prepareとafter_prepareのhookポイントで実行するようにconfig.xmlに以下を記載します。
config.xml
.
.
<hook type="before_prepare" src="scripts/backup-info-plist.sh" />
<hook type="after_prepare" src="scripts/restore-info-plist.sh" />
.
.
するとcordova prepareで更新する前の-info.plistを一旦バックアップし、prepare後にそのバックアップを元に戻すことで更新をさせないようにしました。
あとがき
とりあえずはこの対応をすることでチームでXcodeの設定上をgitで共有した状態で開発を進められそうですが、cordovaを使ったチームを開発のベストプラクティスあれば知りたいっすー。(.gitignoreやXcodeの設定方法など〜)