先日xctoolについて書きました。

(少し追記)Xcodeのプロジェクトをコマンドラインからビルド・テストする - ぴよログ(少し追記)Xcodeのプロジェクトをコマンドラインからビルド・テストする - ぴよログ

ところが、xcodebuildそのもの自体もいい感じになってきていてxctoolとの違いはなくなって来ているようです。Xcodeのコマンドラインビルドのジャンルは最近追い始めたので情報が整理しきれていないので間違っていたらすいません。

xctoolを使うメリットはというと、このあたりはあるのかな。

  • 出力フォーマットを変えられる
  • テストの並列実行が可能

そういうわけでxcodebuildについて個人的にまとめておこうと思います。

ビルド

1$ xcodebuild -project MyProject.xcodeproj -scheme MyScheme
2# または
3$ xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme

基本は-projectでプロジェクト、または-workspaceでワークスペースを指定します。またビルドスキームも指定します。とりあえずこれでビルドが動きます。

そのほか、コンフィギュレーションやSDKの指定なども可。

1$ xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme \
2-configuration Release \ # Debugなど
3-sdk iphoneos \ # iphonesimulator7.0など

テスト

基本はあまり変わりませんが、-destination(配置先)でシミュレータを指定しておくと間違いないっぽいです。

1$ xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme \
2-destination 'platform=iOS Simulator,name=iPhone Retina (4-inch),OS=7.1' \ # 必要に応じて変更
3test

アーカイブ

これも基本は一緒。-sdkは自動的にiphoneosとなりますが、明示的にiphonesimulatorを指定すると失敗します。

また-archivePathオプションで出力ファイルのパスを指定できます。一見出力ディレクトリぽいのですが、ちょっと挙動がおかしい感じです。-archivePath ~/Desktopという指定で~/Desktop.xcarchiveができました。謎。.指定によりカレントディレクトリの上のディレクトリにxcarchiveができました。

1$ xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme \
2-sdk iphoneos \
3-configuration Release \
4archive -archivePath archive

アーカイブからipaの作成

こちらでも触れたとおりipaもコマンドから作ることができます。

ipa書き出しをxcodebuildとxcrunで自動化する - ぴよログipa書き出しをxcodebuildとxcrunで自動化する - ぴよログ

先ほど紹介した方法でarchiveを作り、カレントディレクトリのarchive.xcarchiveにアーカイブがあるとします。

1$ xcrun -sdk iphoneos \
2PackageApplication archive.xcarchive/Products/Applications/MyApp.app \
3-o MyApp.ipa \
4-embed "${PROVISIONING_PATH}"

PROVISIONING_PATHについてはリンクを参考にしてください。