2010-08-26T02:14:08+09:00

Xcode での「Info.plist のビルド設定の展開」と同じことをシェルで行う

Xcode ではビルドする時、Info.plist の値でビルド設定の変数を展開してくれるよね。例えば、CFBundleExecutable の値は ${EXECUTABLE_NAME} と設定して ${EXECUTABLE} はビルド時に実際の値に置き換えられます。

Info.plist をちゃんと Info.plist と扱っている分にはいいのだけど、なんかの都合でリソースフォルダにコピーしたいとする。普通にコピーすると、ビルド設定の変数は展開されないよね。変数を展開してコピーしたいとする。

幸いなことに、ビルド設定の変数の参照はシェルでの変数の参照と同じ形式だぜ。ビルドフェーズの「スクリプトを実行」で起動されるシェルにはビルド設定が環境変数として設定されるぜ。という訳でシェルを駆使すれば何とかなるはず、一日悩んで eval コマンドを使えばできることに気づきました。

fname=Info.plist
plist=`cat "${SRCROOT}/${fname}"`
eval echo \"$plist\" > "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${fname}"

このようなテクニックを使えば、シェルをテンプレートプロセッサとして使えますね。もっといいテクニックがあったら教えてください。