it先日、Bambooを導入し、Javaサーブレットの継続的ビルド&テストに使ってきましたが、そろそろ、iOSアプリにも使いたいと思い、設定しました。引っかかるポイントがいくつかあったので、この記事にまとめてみました。Serverを使いました。Store経由でXcodeをインストールします。Tools」をインストールします。次に、コマンドラインでXcodeを動かせるようにするため、ターミナルで次のように入力します。-license[/cc]Xcodeの使用許諾が表示されるので、確認して、最後に「agree」(ライセンスに同意するという意味です)と入力します。■ios-simをインストールiOSシミュレータをコマンドラインから使えるようにするため、ios-simをインストールします。私は、Homebrew経由でインストールしました。Homebrewはターミナルで次のように入力してインストールします。https://raw.githubusercontent.com/Homebrew/install/master/install)"[/cc]Homebrewのインストールが終わったら、次のように入力して、ios-simをインストールします。ios-sim[/cc]■プラグインインストールBambooからXcodeのプロジェクトをビルドできるようにするため、次のプラグインをインストールします。Supporthttps://marketplace.atlassian.com/plugins/com.atlassian.bamboo.plugins.xcode.bamboo-xcode-plugin■Xcodeのプロジェクト設定テスト対象のプロジェクトを設定します。Xcodeの内蔵テストフレームワークを使用するようにプロジェクトを作成します。Tests」オプションをONにしたときに、自動的に作られるテストバンドルをそのまま使用しました。次のドキュメントに書かれているように、ユニットテストのターゲットのスクリプトを変更します。Script」を開き、その中に書かれているスクリプトを次のように置き換えます。ios-sim"else"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests"fi[/cc]■ジョブの設定ここからBamboo上での設定です。Xcodeでビルドするためにタスクを追加します。先ほどインストールしたプラグインによって、タスクの「Builder」に「Xcode」が追加されているので、それをジョブに追加します。追加したタスクの設定を行います。SDK」から使用するSDKを選択します。マシンにセットアップされているものが自動的に検出されるはずなのですが、私の環境では検出されませんでした。executable」を押し、追加します。6.1を使う場合は次のように設定します。入力可能な値は、ターミナルで次のように入力すると確認できます。-showsdks[/cc]私の環境では次のように表示されました。targets」のチェックを外し、「Target」にテストバンドルのターゲット名を入力します。プロジェクトの設定に次のように表示されている場合は、「RKCheckTests」と入力します。targets」です。simulator」などをONにします。次に、「Project」のディスクロージャーを開いて、プロジェクトファイルの名前と使用する設定を入力します。(たとえば、「Project」は「RKCheck.xcodeproj」、「Configuration」は「Debug」など)なお、ワークスペースを手動で作成しているときは、「Project」には何も入力せず、「Workspace」の方に入力します。「Project」と「Workspace」の両方とも同時には設定できません。どちらか片方にします。simulator」をONにします。directory」にクローン(チェックアウト)した直下からの相対パスでプロジェクトファイルのあるディレクトリを指定します。図のようなディレクトリ構成の場合は「iOS/RKCheck」と入力します。(左端がクローンした直下)これで完了です。後は、このプランを有効にすると実行できます。■実はiOSアプリのテスト特有の事象がありました実は、上記のように設定しただけだと、私の環境では動きませんでした。ローカルでXcodeからテストをしたときや、ターミナルでxcodebuildを実行したときに、正しくテストコードが動くものをコミットしても、なぜか、Bambooから実行すると、テストコード自体が検出されないという事象が起きました。実は、テストのときにios-sim経由で、iPhoneシミュレータも組み合わせてユニットテストが行われます。これは、ローカルで実行したときも同じです。このときに、Bamboo側は、ビルドもシミュレータの実行も、Bambooを動かしているユーザー権限で動作します。そのため、ログインしているユーザーとBambooの実行ユーザーが異なると、正しく動きません。そのため、bambooを動かすユーザーでサーバーにログインしておく必要があります。私の場合は、外部からは接続できない内部専用のサーバーなので、ログインしている状態で、スクリーンロックをかけていますが、外部から接続可能なサーバーの場合は、他のセキュリティソリューションも組み合わせた方が良いと思います。ログインしていない状態で実行すると次のようにログに出力され、失敗してしまいます。