こんにちは ataka です。
XCode 5 から「Bot」と呼ばれる CI ツールが入りました。OS X Maveriks (10.9) と OS X Server 3.0 が必要です。といっても、Maveriks は無料でアップデートできますし、OS X Server は (通常 2,000 円 ですが) iOS Developer なら iOS Dev Center から無料でダウンロードできますので、iOS 開発者なら出費なく Bot の準備ができます。
とはいえ、設定が一か所に集中していない。細かなハマり所が多い。ということで、Bot を動かすのには随分と苦労させられました。特に既存のプロジェクトで Bot を作ろうとすると大変です。そこで、今回は新規プロジェクト「Foo」をローカルに作って Bot を動かしてみます。
Bot とは
スクリーン・ショットです。Bot を実行すると、コンパイルを実行し、テストを行ない、分析をして、ダウンロード用のプロダクト (ipa ファイル) やアーカイブを作ってくれます。
Bot の実行結果は XCode でも閲覧できますが、ウェブ・ブラウザーからも見ることができます。スクリーン・ショットは Bot の実行結果を Safari で閲覧したものになります。
まずは、このスクリーン・ショットを到達点にします。
Server の設定
OS X Server をダウンロードし、インストールします。起動してみましょう。初めて使う場合は Mac を選択する画面が現れます。ここでは自分の Mac を選択します。
起動すると、左カラムに「XCode」という項目があるので、選択します。
XCode の選択画面が現れます。複数の XCode を使い分けている人向けの設定と思いますが、普通に自分の使っている XCode を選びます。
この画面では、以下の項目が設定できます:
ここで必要なのは XCode と開発チームの設定です。アクセス権やデバイスの設定は、後回しにしても良いでしょう。リポジトリの設定は (今回は) XCode 側から行なうので必要ありません。XCode の設定はほとんど一択なので迷いませんね。開発チームには、開発に使っている Apple ID を入力します。
設定を終えたら、ブラウザーで確認してみましょう。「アクセス」の「状況」に書いてあるホスト名でアクセスできます。私の場合、「mba-ataka.local」ですから、Safari で mba-ataka.local/xcode を開きます。
空の Bot 画面が表示されるでしょう。
XCode の設定
XCode を起動して XCode > Preferences > Accounts を開きます。左下の「+」ボタンを押して、「Add Server...」を選択します。Bot で使う X Server を選びます。ご丁寧にサーバーが選択画面に現れています。これを選んで先に進むと、次の様なエラーが出ました。
The Xcode Service is not enabled on the server 'mba-ataka.local'. Contact the administrator for assistance.
仕方がないので、「Or enter a server address:」に「localhost」と入力して「Next」ボタンを押します。
お次はユーザー名とパスワードの入力です。
ユーザー名にフルネーム「安宅 (会社)」を入力すると、ユーザー名とパスワードが違うと怒られました。日本語が通らないのかしらん? では /Users の下にある名前ならどうかしらん。「ataka_work」を入力します。パスワードは「安宅 (会社)」のものを使います。
フゥ、なんとか通りました。
Foo プロジェクトの作成
XCode で新しいプロジェクト「Foo」を作ります。Product Name は「Foo」にしました。~/project/Foo にプロジェクトを置きます。
プロジェクトの置き場を決める時に、「Source Control」にチェックを入れます。また、Create git repository on 「My Mac」を「localhost」に変更します (もし時間があったら、X Server > XCode > リポジトリ を見てみましょう。「ホストされたリポジトリ」に「Foo」「http://mba-ataka.local/git/Foo.git」が追加されているのが見れるはずです)。
Bot を作る前にもう一つ、Scheme の設定変更が残っています。
XCode のメニューから Product > Scheme > Manage Schemes... を選びます。
右端の「Shared」にチェックを入れます。
設定を保存したら、git commit して push します。Bot は git のローカル・リポジトリーではなく、push 先のリモート・リポジトリーをベースに動いてくれるようです。
Bot の作成
ようやく Bot が作る準備が整いました。
XCode から Product > Create Bot... を選択します。
全てデフォールト値で構いません。「Next」です。
スケジュール設定です。時間ごと、日ごと、週ごと。もしくはコミット時。もしくは手動の三種類が選べます。今回はテストなので手動に当たる「Manual」を選択しておきます。慣れたら、Bot の設定を変えると良いと思います。
また、この画面では、Bot を実行する時に「解析」「テスト」「アーカイブ」も行なうかどうか設定できます。デフォールトでは全てにチェックが入っています。そのままにしておいて良いでしょう。「Cleaning」は Bot 実行前に clean を実行するかどうかです。デフォールトではオフです。
デバイスの設定画面です。デフォールトでは全ての iOS デバイスになっています。私は「Specific Devices」から「iPhone Retina (4-inch)(7.0)」と「iPhone Retina (3.5-inch)(7.0)」を選びました。
最後はメール通知の設定です。「Create Bot」を押して Bot を完成させます。
自動で Bot が走って、結果が表示されます。ウェブ・ブラウザーでは http://localhost/xcode から確認できます。上のスクリーン・ショットと同じになったら成功です。
もう一度 Bot を実行
上のスクリーン・ショットでは一つテストがエラーになっています。おざなりですが、直してみます。
Foo Project から FooTests > FooTests.m を開きます。この中の testExample が原因です。
- (void)testExample
{
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
}
必ず成功するように変えてみます。
- (void)testExample
{
XCTAssertTrue(true, @"Test Example for \"%s\"", __PRETTY_FUNCTION__);
}
変更したら push を忘れずに。
Safari から右上の「インテグレート」を押します。手動実行なので...ね。
結果は成功です。気持ちがいいですね。
Bot の実行をコミットごとにしたり、毎日にしたり、失敗したらエラー・メールを飛ばしたり、設定を変えてゆくともっと便利で楽になると思います。