前回 Static Library を作成し、それを使ったサンプルを実行するところまで行った。組み込みは直接ライブラリのプロジェクトからドラッグ&ドロップしていたが、今後ライブラリの管理を考えるともう少しましな方式に変えたい。自作のライブラリはどこか決め打ちで一箇所にまとめておいてそれを利用するようにした方がいいだろう。
オリジナルのライブラリの置き場を決める
unix 系だとライブラリは /usr/lib(もしくは /usr/local/libなど)、ヘッダは /usr/include などに置かれる。ここは通常システムで使うものを置くのでオリジナルのライブラリを置くには適していない。また Git や Subversion などで管理することを合わせて考えるとホームの下に作った方が良さそうだ。
今回は下記のようなディレクトリを用意してそこへ置くことにする。
ホームディレクトリ | |-- Development/ | | | |-- Projects/ アプリのプロジェクト | | | |-- Libraries/ | | |-- lib/ ライブラリファイル | | |-- include/ ヘッダファイルターミナルを開いて作っておく。
mkdir -p ~/Development/Libraries mkdir ~/Development/Libraries/lib mkdir ~/Development/Libraries/include
ビルド時にライブラリとヘッダをコピーする
置き場所が決まったので次はライブラリとヘッダをここへコピーする。ビルドした最後にライブラリとヘッダのファイルをこれらのディレクトリへコピーする設定を Xcodeで行う。コピーはビルドフェーズの追加で簡単に行える。
まずターゲットを開き右クリックで「追加」⇒「新規ビルドフェーズ」⇒「新規コピーファイル」を選択する。
すると「ファイルをコピー」が最後に追加される。
情報を開きパスを設定する。デスティネーションは「絶対パス」を選ぶ。
"Products"グループ内にあるライブラリファイル libStaticLibrarySample.a をここへドラッグ&ドロップする。
同様にしてヘッダファイル用のビルドフェーズを追加する。
さて実行してみよう。ビルドの最後に Copy が確認できる(右上の「問題のみ」を「すべてのメッセージ」にすると表示される)。
ディレクトリを見に行くと...
あった。
ライブラリの使用
さてこのライブラリを使用するようにサンプルアプリを設定する。
まずライブラリファイルをプロジェクトへ追加する。Frameworks で右クリックして「追加」⇒「既存のファイル...」を選択する。
~/Development/Libraries/lib/libStaticLibrarySample.a を選択する。
一番上のチェックボックスは外しておく(コピーにしない)。
次にプロジェクト設定を開き「ヘッダ検索パス」に ~/Development/Libraries/include を設定する。
(プロジェクト設定は、メニュー「プロジェクト」から下の方の「プロジェクト設定の編集」を選ぶ)
これでビルドが通る。
ソースコード
GitHub からどうぞ。
StaticLibrarySample at static-lib-2 from xcatsan's iOS-Sample-Code - GitHub
UsingStaticLibrarySample at static-lib-2 from xcatsan's iOS-Sample-Code - GitHub
なお ~/Development/Libraries/lib, include が実在しないとビルド時にエラーとなる。
問題
最後に問題点を。今回はライブラリをビルドする時にシミュレータをターゲットとしていた。この為、そのライブラリを利用して実機向けのビルドを行うとエラーになる。
これはライブラリ(*.a)はターゲットとなるデバイス向けにコンパイルされているため。ライブラリはターゲットとなるデバイス毎に用意する必要がある。
この辺りは次回へ持越し。
Responses
Leave a Response