問題点
iOS開発をしていて、Bundle Resourcesに登録されているファイルを更新したり、追加して、実機やシミュレーターで実行してみても、リソースが上手く更新されないことがままあります。
例えば、画像を差し替えたのに古い状態の物が使われたり、追加したのにも関わらず、更新されずに参照時に落ちてしまうなどということが良く起こって、非常に煩わしい。
Clean Build Folder
で生成物を全て消して、再ビルドをかけるとちゃんと反映されるんだけど、毎回再ビルドかけるのは大変なので、なにか良い対処法はないかなあと思っていた。
対処法
Stackoverflowに良さそうな情報が書いてありました。
ios - Resource files not updating with Xcode 5 - Stack Overflow
どうやら、ビルド時にフックして、Resource以下をtouchしてやれば良いらしい。
$ touch -cm ${SRCROOT}/../../YourResourceFolder
Run Scriptを追加する
Stackoverflowに書いてある方法と若干手順が違っているので注意
1. Target > Build Phase
左上の+ボタンを押す
2. New Run Build Script Phaseを押し、Run Scriptを追加
3. Run Script Phaseを以下のように設定する
環境変数$SRCROOT
はxcodeprojが置いてあるパスで、そこからの相対位置を指定することになる。
今回はcocos2d-xのプロジェクトに設定したため、以下のような階層構造となった。
Stackoverflowに書かれていたように設定すると、Resources
以下に再帰的にディレクトリがあったときに上手く反映してくれなかったので、代わりにzshを使って*
で指定している。
まとめ
これでビルドする度に自動的にリソースが更新されるようになってイライラしなくなった。もっと早く知りたい知見だった。