たとえばこんな感じですね。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPj6IrAZqqgFN6IR4qXpYjPth5B4cqRApMMDdfKuea7Fscp7YKTHie9blNfBAuvQVXZJTLjsgJmHmpFXSj8bEcFq4Ahmm93GtrUC-eysMr6PFmpL69y8JOTKqncQ9rQlBDDr1XIS8A10I/s400/beforeusinglipo.png)
この状態でビルドを行うと、シミュレーター向けビルドを行えばデバイス用のバイナリが、デバイス向けビルドを行えばシミュレーター用のバイナリが、それぞれ対応していないアーキテクチャであると警告を出してしまいます。警告ですからコンパイルは通るのですが、私は几帳面で気になってしまうので、これを解消したいと考えます。
■lipoの出番
そこで lipo を使います。 lipo は Xcode に付属されているコマンドラインツールですので、 iOS SDK をインストールしている人でしたら誰でも使えます。詳しい使い方は man を見ていただければわかりますが、普通使うのは以下のパターンだけです:
lipo -create ライブラリ1.a ライブラリ2.a -output 出力するライブラリ.aたったのこれだけで二つのライブラリを組み合わせて Universal Binary を生成してくれます。さっきの画像の例ですと、
lipo -create libAbesi_dev.a libAbesi_sim.a -output libAbesi.aこれでOKです。
■本当に Universal なの?
それでは本当に Universal Build になったのか見てみましょう。 static library の中身を見るには、 nm コマンドを使います。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT6coQyG8yQp691TDqu3qboIn2X6stDBOqr0mrurXpXa4CYG_2_2yCnqENwO4L022UBUziL0N89n_8ExV5ew2rIqotcWuBjDyroMr2LCPZDjJOkTxl6yPOlOlxHIAFy4daJquj3xldo04/s280/testingbynm.png)
どうやらうまくいったみたいですね。一つのライブラリファイルの中に、3種類のアーキテクチャに対応したオブジェクトが格納されています。