xcodebuild コマンドで iOS アプリの自動ビルド

こんにちは、Monaca チームで iOS 周りの開発をしています、中川 (nhiroki) です。

今回は Monaca の裏側をちょこっとお見せするということで、iOS 版リモートビルドで使用している xcodebuild コマンドを紹介します。

(本記事は Xcode を使った iOS アプリケーションの開発経験がある方向けの内容となっています。予めご了承ください)

一般的に iOS アプリケーションを作る時には Xcode と呼ばれる Mac OSX 開発環境を利用します。Xcode 上で Objective-C 言語を使ってプログラミングを行い、ビルドボタンを押すことでアプリケーションがビルドされます。

このように Xcode で開発からビルドまですべての操作が行えるため、逆に Xcode 上でないとアプリケーションのビルドや動作確認はできないと思われがちですが、実はコマンドラインからそれらを行うことが可能です。このときに使用するのが xcodebuild コマンドです。

xcodebuild コマンドの使い方

xcodebuild コマンドは Xcode をインストールしていれば使うことができます。コマンドライン上でビルドしたいプロジェクトのディレクトリ (*.xcodeproj のあるところ) に移動し、下記のコマンドを実行するとビルドが行われます。



<pre wp-pre-tag-0=""></pre>
nbsp;cd path/to/xcode_project
<pre wp-pre-tag-0=""></pre>
nbsp;xcodebuild -configuration Debug -sdk iphonesimulator5.0 -target <TARGET_NAME>

-configuration はビルド設定 (Debug, Release など) の指定、-sdk はビルドに使用する iOS SDK の選択、TARGET_NAME はプロジェクト内のターゲット名です。これらフラグを指定しないとデフォルトの設定でビルドが行われます。

sdk の種類は -showsdks を指定すると確認することができます。



<pre wp-pre-tag-1=""></pre>
nbsp;xcodebuild -showsdks
Mac OS X SDKs:
Mac OS X 10.6                 	-sdk macosx10.6
Mac OS X 10.7                 	-sdk macosx10.7
iOS SDKs:
iOS 5.0                       	-sdk iphoneos5.0
iOS Simulator SDKs:
Simulator - iOS 4.3           	-sdk iphonesimulator4.3
Simulator - iOS 5.0           	-sdk iphonesimulator5.0

また、-list を指定するとプロジェクトで定義されている configuration や target を確認することができます。


Information about project "HelloWorld":
    Targets:
        HelloWorld
        HelloWorld-Universal
    Build Configurations:
        Debug
        Release
    If no build configuration is specified and -scheme is not passed then "Release" is used.
    Schemes:
        HelloWorld
        HelloWorld-Universal

この他にも様々なビルドオプションが存在します。詳しくは xcodebuild のマニュアル (man xcodebuild) を御覧ください。

シミュレータでの起動

ビルドしたアプリケーションをシミュレータで起動する操作もコマンドラインから行うことができます。

まずビルドしたアプリケーションをシミュレータに転送します。



<pre wp-pre-tag-3=""></pre>
nbsp;cd ~/Library/Application\ Support/iPhone\ Simulator/5.0/Applications/
<pre wp-pre-tag-3=""></pre>
nbsp;mkdir HelloWorld

<pre wp-pre-tag-3=""></pre>
nbsp;cd HelloWorld
<pre wp-pre-tag-3=""></pre>
nbsp;cp -r ~/Library/Developer/Xcode/DerivedData/HelloWorld-
xeiocnriocniwiwmxwmepoapowxe/Build/Products/Debug-iphonesimulator/HelloWorld.app .

生成するディレクトリ名は適当で大丈夫なようです。またビルドしたアプリケーション (*.app) へのパスは、プロジェクトや Xcode のバージョンによって異なります。ビルドログを確認することでこのパスを取得することができるのですが、これについてはまた別の機会にご紹介します。

次にエミュレータを起動します。


/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator

エミュレータの画面から転送したアプリケーションを起動することができます。

# 起動するシミュレータの iOS バージョンやディスプレイ種類 (Retina, non-Retina) の指定方法は現在調査中です。

まとめ

本記事では iOS アプリケーションのビルドやシミュレータの起動をコマンドラインから実行する方法について紹介しました。

これらを使うことでアプリケーションの自動ビルド機能を構築することができます。今流行りの Jenkins などと組み合わせることで、iPhone アプリケーションの自動 CI 環境なども構築できそうですね。Monaca ではリモートビルドにて本機能を利用しています。

言わずもがなですが、Monaca なら Xcode やコマンドラインを使わずに簡単にビルドや実機での動作確認をすることができます。さらに近々、より簡単にアプリの動作確認ができる機能が実装される予定ですのでご期待ください。