24/7 twenty-four seven

iOS/OS X application programing topics.

Xcode 4.3ではファイルをドラッグ&ドロップで追加するとき、ターゲットに追加するかどうかのチェックが外れることが多いので注意!

バージョン 4.2.x までの Xcode では、プロジェクトにファイルをドラッグ&ドロップして追加するとき、コピーするかどうかや、ターゲットに追加するかどうかのチェックボックスは前回の選択状態を引き継ぐという挙動でした。
しかし、バージョン 4.3 になってからはターゲットに追加するかどうかのチェックボックスについてのみ、追加しようとしているファイルの拡張子によって、選択状態が変化するようになりました。

ざっと調べた限りでは、追加しようとするファイルが .m ファイルだけの場合はチェックが選択済みになり、.h が含まれる場合は選択が解除されているようです。


具体的には下記のように JSONKit.h と JSONKit.m を追加しようとすると、.h ファイルが含まれているために選択状態は解除された状態でダイアログが表示されます。



もし、選択状態が解除されていることに気づかずに、そのままプロジェクトに追加してしまうと、プロジェクトには追加されるもののコンパイル対象には含まれないという状態になってしまいます。


この状態は非常に危険で、ヘッダファイルは参照できるためにコンパイル時に警告は出ないし、Objective−Cの場合はたいていリンクもできてしまいます。特に例のJSONKitのような標準クラスをカテゴリで拡張するようなライブラリだとまずビルド時に問題は起こりません。


もちろんコンパイルされないのでオブジェクトができませんから実行時にエラーになりますが、この「プロジェクトに追加されているけれどターゲットに含まれていない」という状態は分かりにくいので問題の解決が遅れることも多々あります。


というわけで、けっこう何も考えずにリターンを押しがちなところだと思いますが、少し注意する必要があるという話でした。


※Xcode 4.3.1 は今ダウンロード中なのでアップデートが済んだら検証します。
Xcode 4.3.1 でも同じ挙動でしたorz... ファイル追加するたびに神経使うのもアレなので、要望としてバグレポートですね。






twitter:177334116054863873:tree