Xcode6の時代に入り、Objective-Cでプロジェクトを新規するとき、PCHファイルは自動的に生成しないようになりました。従来の習慣はプロジェクトの共通の機能と定義などは普段PCHファイルに書き込みます。今もその便利さを利用したい。
直接にPCHファイルを新規するだけは足りません。プロジェクトの設定にも書き込むが必要です。以下の通り、方法は簡単です。
- そのプロジェクトに、PCHファイルを新規して添付します。
- ターゲットの設定に、言語のカテゴリを見つけよう。
Target
->Build Settings
->Apple LLVM 6.0 - Language
。 - そこで、
Precompile Prefix Header
をYES
に変えよう。 - またその下の
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
の中に入れます。