話題の記事

BotsでCI環境を作る1 – Xcode 5での操作

2013.10.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Xcode 5 から Bots という名前で CI (Continuous Integration) 機能が追加されました。CIといえば今まで Jenkins など Apple 以外のツールを使っていたケースも多いと思いますが、Apple 純正のツールが出てきた事で開発者にとっては気になる存在になると思います。
既存のツールを置き換えになるのか、又は併用できるのかも気になります。

まずは動作させるまでのセットアップをしてみます。

必要なもの

  • Mac OS X Mavericks
  • Mac OS X Server
  • Xcode 5

 Mac OS X Server 今回初めて触りましたが、使ったことある人は結構レアなんじゃないかと思ってます。 Mac OS X Serverという名前のOSかと思ってましたが、実際の形式はアプリケーションでした。Mac App Storeからイントール可能です。

OS X Server / Xcode サービス の設定

まず開発マシンではなく、OS X ServerにもXcodeがインストールされている必要があります。

  1. Xcodeの場所を設定します。これは複数バージョンのXcodeを使用している場合にどのXcodeを使ってビルドするかを選択する為と思われます。
    ci_select_xcode
    Xcodeを選択すると下の画面になります。
    ci_settings
  2. Settings > Access > Permissions
    権限の設定をクリックします。ここではBotの作成と閲覧権限を設定します。
    作成と閲覧で別のロールにしたい場合は下のチェックボックスを入れて、閲覧権限を設定します。
    access
  3. Settings > Builds > Perform builds using
    Xcodeの設定。別のバージョンのXcodeを使用したい場合に使うはず。
  4. Settings > Builds > Developer Teams 
    チームの設定をクリックします。+ ボタンで使用しているDeveloper Programで使用しているAppleアカウントを登録します。
    ci_select_team
  5. Settings > Devices
    Unit Testで使用するデバイスを登録します。ServerマシンにiOSデバイスが接続していると以下のように認識されます。これはチームの開発用端末としてAppleに登録されている必要があります。Add to Team ボタンをクリックし登録完了です。ci_devices

開発用Mac / サーバーを設定

  1. Xcode > Preference > Accounts から + ボタンをクリックして Add Server... を選択します。Xcodeサービスが設定されたサーバーを選択し、そのサーバーへのログイン情報を設定します。後にBot作成時に選択項目になります。
    ci_add_server_account

開発用Mac / プロジェクトの設定

Manage Schemes からCI対象のスキームの Shared チェックを入れます。

  1. メニューから操作するなら Product > Scheme > Manage Schemes... です。(ところでなんでMacのメニューには ”...” で終わるものと普通に終わるものがあるのでしょうか...)
    ci_menu_cheme
  2. Shared チェックをONにします。
    ci_scheme_on
  3. 設定したらCIサーバーから取得した時に設定が反映されるように Push します。(Gitの場合)

開発用Mac / Bot の作成

Analyze、Test、Archive の動作を定義した Bot を作成します。

  1. メニュー Product > Create Bot... からBotの新規作成をします。
    ci_create_bot
  2. 対象のスキーム、Botの名前(登録しなければ自動設定される)、どのサーバーで動作させるかを設定します。Integrate immediately は設定後直ぐに1回目の Integrate をさせるかを設定します。
    ci_new_bots1
  3. リモートリポジトリのログイン情報を設定します。今回は https で設定しました。
    ci_new_bots_git
  4. Schedule にはどのタイミングで Integrate させるかを設定します。今回はコミット時(Push時)に設定しました。ただし、5分おきにポーリングして変更があれば Integrate するようです。Actions は何をさせるかを設定します。Cleaning はまっさらな状態からCloneするかどうかの設定ですが、時間がかかりそうなので何か問題が出てきたらチェックを入れる感じでいいと思います。
    ci_new_bots2
  5. テスト対象のデバイスを設定します。サーバーにデバイスが物理的に繋がっていればそれが使えます。もちろんシミュレータも使えます。
    ci_new_bots3
  6. メールでお知らせするタイミングを設定します。失敗した時だけ自分に送信するように設定しました。
    ci_new_bots4
  7. Create Bot ボタンで設定完了です。最初の Integrate が始まります。

現状では以下のエラーログが表示され、Archive が失敗します。Provisioning Profile が見つからないようですがCIサーバーに対象のプロビジョニングはインストール済みです。
何か情報をお持ちでしたら教えてください。

Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID “XXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”, however, no such provisioning profile was found.

CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 7.0'

 

XcodeでIntegration 結果を見る

Xcode では Log  Navigator から見ることができます。

各 Integration のサマリ
ci_result_xcode_detail

最近の Integration のサマリ
ci_result_xcode_all_summary

最近の Integration のテスト結果
ci_result_xcode_test

Archiveに成功していれば .ipa と .app のダウンロードが可能
ci_result_xcode_download

まとめ

初回は設定箇所が散らばっている事もあるのである程度手間はかかります。1回動作するように設定できれ、次回から新規アプリの設定は、スキームを Shared にして Bots の作成ウィザードでとりあえずは動作させる事ができます。
Server さえ買ってしまえば手軽に始められる部類なんじゃないかと思いました。

ブラウザ上でも操作できるようなので、次回はそちらを試します。