[iOS] Static Library (3) 複数のアーキテクチャへの対応は?

2010年11月16日火曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[前回] Cocoaの日々: [iOS] Static Library (2) ライブラリとヘッダファイルの位置決め

前回までの方法だと実機向けにビルドしようとするとエラーとなる。

これはシミュレータをターゲットとしてコンパイルしたライブラリを使用しているため。エラー内容を詳しく見るとその旨が出ている。
ld: warning: in /Users/hashi/Development/Libraries/lib/libStaticLibrarySample.a,
 file was built for unsupported file format which is not the architecture being linked (armv6)

ld: warning: in /Users/hashi/Development/Libraries/lib/libStaticLibrarySample.a,
 file was built for unsupported file format which is not the architecture being linked (armv7)
armv6/7 向けに作られていないよ、と。


構成別+デバイス別ビルド


Xcode では標準で構成とデバイスに合わせて計4種類のビルドが行える。

用途:Debug/Release
デバイス:Simulator/Device

実際前回までのライブラリを上記4種類すべてについてビルドを行うと build ディレクトリ配下は次のようになる。
"構成"-"デバイス" という名称でディレクトリが作成され、その中にライブラリファイル(*.a)が作成されているのがわかる。

ということは、これらを全部を所定のフォルダへコピーしておいて、使う側はビルドの設定に応じて適切なライブラリファイルをリンクできればいい、ということになる。さらにそれら異なるアーキテクチャ用のライブラリファイルを1つにまとめてしまう方法もある。単純に*.aファイルをひとつにまとめる Univeral Library や UIKit などでも使われている Framework がこれにあたる。

ライブラリの作成方法

・アーキテクチャ毎のライブラリファイルを用意して使う方法
・Universal Static Library
・Framework

この中で Frameworkはバージョン管理ができるなど高機能なのだが iOS の場合は公式にサポートされていない。少なくとも Xcodeのテンプレートには出てこない(Mac OS X ではテンプレートあり)。この為公式ドキュメントが無いのだが、ありがたいことに既に独自の調査でパッケージ化に成功している人もいて実績もそれなりにあるようだ。


とりあえず Universal Static Library と Framework の両方を試しに作ってみることにする(続く)。



参考情報


Universal Static Libraries @ Cocoanetics
「ユニバーサルアプリ」ならぬ「ユニバーサル静的ライブラリ」の作成方法。このブログだとターゲット別ビルドができるようだが、自分の所ではうまくいかなかった。

Build fat static library (device + simulator) using Xcode and SDK 4+ - Stack Overflow
xcodebuild コマンドを使い、スクリプトで一括ビルドする方法

でらうま倶楽部 : iPhone TouchJSON1.0.8登場。ついでにスタティックライブラリを極める。
複数アーキテクチャ対応など

Responses

Leave a Response

人気の投稿(過去 30日間)