Xcode6でPCHファイルを追加する方法

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Xcode6の時代に入り、Objective-Cでプロジェクトを新規するとき、PCHファイルは自動的に生成しないようになりました。従来の習慣はプロジェクトの共通の機能と定義などは普段PCHファイルに書き込みます。今もその便利さを利用したい。

直接にPCHファイルを新規するだけは足りません。プロジェクトの設定にも書き込むが必要です。以下の通り、方法は簡単です。

  1. そのプロジェクトに、PCHファイルを新規して添付します。
  2. ターゲットの設定に、言語のカテゴリを見つけよう。Target -> Build Settings -> Apple LLVM 6.0 - Language
  3. そこで、Precompile Prefix HeaderYES に変えよう。
  4. またその下の Prefix Header$(SRCROOT)/FILENAME.pchのようにしましょう。

設定は終了で、プロジェクトを保存して、クリーンします。今なら、PCHファイルは稼働できますようになります。

さて、PCHファイルを使ってみて。

例えば、私の愛用の日誌関数の再定義コード。

#ifdef DEBUG
#define _Log(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define _Log(...)
#endif

// ALog always displays output regardless of the DEBUG alarm
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

その後はそれを使うことです。


20150328の追加です。

iOSでzipファイルを用いる場合、ZipArchiveなどを引用し、プロジェクトにc言語のコードを含むことがあります。その時にそのままのPCHファイルは、NSObjCRuntimeなどのクラスでよく分からないエーラーが出てきます。それは多分、cファイルの前にFoundation/Foundation.hなどを導入したせいかもしれません。その解決策として、Foundation/Foundation.hなどを含むクラスをPCHファイルにインポートするには、直接にインポートすることではなく、必ず#ifdef __OBJC__#endifの中に入れます。