Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

xcodebuildでdevice向けのビルドするときのdestinationの指定方法

以前xcodebuildのパラメータの指定方法についてこちらに書きました。

Travis CIでObjective-C/Swiftのテストを実行する - Pragmatic ball boy

テストするときはシミュレータを指定するのでこれで問題ないのですが、 実機向けのstaticライブラリを用意したりするときには、destinationの指定方法が以下のように変わります。

ここで問題なのが、nameとidのところなんですが、ビルドマシンに実機を常に指しておけば指定できますが、たいていはそういう使い方しないと思います。

XcodeからビルドするときはiOS Deviceを指定すれば実機なくてもビルドだけはできるのでそれと同じことはxcodebuildでもできるはず。

xcodebuildのドキュメントを見るとgeneric/をつければ良いと書いてあります。

To build against a platform generically instead of a specific device, the destination specifier may be prefixed with the optional string "generic/", indicating that the platform should be targeted generically.

よって、以下のようにgeneric/platform=iOSと指定することでiOS Deviceを指定するのと同じようにビルドすることができます。

$ xcodebuild -scheme MyScheme -destination 'generic/platform=iOS' build

ちなみに実機とsimulator両方で使えるfat binaryを作りたい場合は、destination複数指定できるので以下のように、2つdestinationを使います。

$ xcodebuild -scheme MyScheme -destination 'generic/platform=iOS' -destination 'platform=iOS Simulator,name=iPhone 6,0S=8.0' build

fat binaryに含まれているアーキテクチャを確認するには以下のコマンドを使えばよいです。

$ xcrun lipo -info *.a