Xcode 4.3でスタティックリンクライブラリィを扱う (その1)

一度試して挫折するも、ちょっとしたことで上手くいったのでこれも備忘録としてメモ。

iOSはMacのようにローダブルバンドル※1は扱えないので、外部のライブラリィはソースコードとして取り込むか、静的(スタティック)なライブラリィとして組み込むしか無い。
フレームワーク」と呼ばれるパッケージを作ることもできるが、スタティックライブラリ以上に面倒そうなので、今回はスタティックなライブラリィをXcode4.3上で扱う手順をまとめる。(これは私の環境 Mac OS X Lion 10.7.3, Xcode 4.3.2上での記録であり、他の環境では試していない)

1.他から参照可能なスタティックライブラリィを作成する

Xcodeでプロジェクトを作成する


XcodeのNew Projectで開始するウィザードでプロジェクトを作成するが、その際に「Cooa Touch Static Library」を指定する必要がある。

ヘッダファイルを公開する


外部から参照するヘッダファイル(xxxx.h)はデフォルトではprojectスコープになっているので、File Inspectorで確認して外部から参照するヘッダは全てpublicスコープにする。

インストールディレクトリ(Installation Directory)を設定する

Xcode4のビルドパスは/Library/Developer/Xcode/DerivedData/であり※3、その下にプロダクト毎にハッシングされたディレクトリが作成されて必要なファイルがコピーされるのだが、ライブラリィプロジェクトのターゲットに対するインストールディレクトリ(Installation Directory)のデフォルトはなぜか/usr/local/libとなっており、これでは使えないので、環境変数$(BUILT_PRODUCTS_DIR)に変更する。

この設定によりビルドされたファイルは$(BUILT_PRODUCTS_DIR)下に出力される。

公開ヘッダ用のディレクトリ(Public Headers Folder Path)を設定する

外部に公開されるヘッダ用のディレクトリもインストールディレクトリ同様に、デフォルトは"usr/local/include"になっており、そのままでは使えないので、こちらは環境変数$(TARGET_NAME)に変更する。

この設定により、publicスコープに設定されているヘッダファイルが$(BUILT_PRODUCTS_DIR)/$(TARGET_NAME)下にコピーされて他のプロジェクトから参照できるようになる。


ライブラリ側はここまで。これで$(BUILT_PRODUCTS_DIR)/プラットホーム/produtの下にxxxx.aというスタティックリンク用のライブラリファイルが出来て、公開(public)に設定したヘッダファイルがコピーされていればOKだ。

作ったスタティックライブラリをリンクするアプリケーションプロジェクトの設定方法は明日にでも書こう。

※1:WindowsのDLLに相当する
※2:Xcode Build Setting Reference: Build Setting Reference
※3:Xcodeのプリファレンス->Locationで確認、変更できる