Xcodeで開発をしていて、あるタイミングからInterface Builderから.xibファイルに対して行った変更がビルドに反映されなくなってしまいました。
- Clean
- Clean Build Folder (Option押しながらClean)
- シミュレーター上のアプリを削除
- Xcodeの再起動
- OSの再起動
なども効果無し。挙げ句、Xcode上から当該.xibファイルを削除(他フォルダに移動)してもビルドしてくれやがります。Xcode上でもFinder上にも存在しないゴーストがどこかに残ってる!
結果として解決したのは、海外の掲示板stack overflowのこのエントリの一番下(記事執筆時)のコメント。よりによってusefulカウンタが0(笑)。そろそろσ(^^)もIDとって評価記入するようにしないとなぁ。
で、具体的にはXcodeのもってるキャッシュを削除。その場所は、
/Users/(ユーザ名)/Library/Developer/Xcode/DerivedData/
ここに今までビルドしたプロジェクト毎のフォルダがあるので、それを丸ごと削除。Lionだとユーザのホーム下のLibraryは不可視になってるので、ターミナルを使うが良いでしょう。
どうもここのキャッシュはXcode上で元ファイルが消されても消されずに使われてしまうっぽいです。では元々何故起きたかについてですが、多分、.xibをローカライズして、実体ファイルがen.lprojとja.lprojに移動/コピーされた時の参照が正しく書き換わらなかったっぽい気がしています。なんかやり方が悪かったんですかね?これによってXcode上では実体ファイルである各言語別のファイルを更新し続けたものの、ビルドには親フォルダにある(あった)ファイルのキャッシュが使われ続けてしまった、ということではないかと思っています。
同日追記:
@s1tnkさんより、Xcode4から同じことをする方法を教わりました。こっちの方が簡単そげ。この作業自体はエラーのハイライティングが壊れた時とかにもする一般的なものみたいです。特定プロジェクトがなんとなく調子悪いぜって時のお試し作業の1つとして覚えておくと良さそうです。
- Organizerを開く
- 目的のプロジェクトを選択する
- Delived Dataという見出しの右にある「Delete…」をクリック