simulatorとdeviceのライブラリを統合する
iOS SDKによる開発では,自前で作ったスタティックライブラリ,AdMakerのような配布されているライブラリは,シミュレータ用とデバイス用の二つになってしまいます.
これはあまり美しくありません.
しかも,最近では,iPhoneのアップデートでARM6とARM7の2種類のCPUが市場に出回ることになり,ARM6とARM7にそれぞれライブラリを用意するといった面倒くさいこともありえる状況です.
一方で,AdMobで配布されているようなライブラリは,シミュレータ用とデバイス用のスタティックライブラリはひとつのファイルにまとめられています.これはどういうことでしょう・・・・・.
実は,lipoという便利なライブラリ結合ツールが用意されていたのです.
このコマンドラインのライブラリは,容易にライブラリを結合することが出来ます.
例えば,AdMakerを例にとると,ライブラリファイルは,以下の二つです.
libAdMaker_sim.a
libAdMaker_dev.a
この二つは,以下のコマンドでひとつにまとめることができます.
> lipo -create ./libAdMaker_sim.a ./libAdMaker_dev.a -output ./libAdMaker.a
これでlibAdMaker.aひとつにまとまります.
ライブラリファイルの中身を調べたい場合もこのlipoコマンドで調べられます.
> lipo -info ./libAdMaker.a
Architectures in the fat file: libAdMaker.a are: armv6 armv7 i386
ちゃんとシミュレータとデバイスのライブラリが統合されているようです.
ついでにAdMobも調べて見ましょう.
> lipo -info ./libGoogleAdMobAds.a
Architectures in the fat file: libGoogleAdMobAds.a are: i386 armv6 armv7
AdMobも同様なようです.
これでライブラリファイルのマルチバイナリ対応ができました.
便利ですね.