JenkinsでCocos2d-xのiOSアプリをビルドしてみる



## 概要

Jenkinsを使って、iOSアプリのビルドからHockeyAppへのアップロードを自動化する。
ジョブはスレーブのMacに実行させる。
Gitのリポジトリを監視し、変更があればビルドして、HockeyAppへアップロードする。
今回は Cocos2d-x の iOS アプリをビルドする。

### 環境

* master
	* CentOS 6.6 (Final)
	* Jenkins 1.580.1
* slave
	* OS X Yosemite 10.10.1
	* iOSアプリをビルドできる環境

### 前提

* [JenkinsにMacのスレーブを追加してみる](http://qiita.com/kiarina/items/2d9efc3d456d205fa69c)


## 準備

### Git Pluginをインストール

masterのJenkinsにアクセスして、以下を実施する。

1. [Jenkinsの管理] > [プラグインの管理] を選択する
2. [利用可能] タブを選択し、[フィルター] に [Git Plugin] と入力する
3. 一覧の [Git Plugin] をチェックする
4. 画面下部の [ダウンロードして再起動後にインストール] を選択する

しばらくして再アクセスすると、プラグインが利用可能になっている。

### 認証情報を追加する

Git-hubなどにアクセスする際に使用する認証情報を登録する。

1. [Jenkinsの管理] > [認証情報の管理] を選択する
2. [認証情報の追加] > [SSHユーザ名と秘密鍵] を選択する
3. [ユーザ名][説明]を入力し、[秘密鍵]を要件に合わせて選択して入力する
4. 画面下部の [保存] を選択する

### iOSのプロビジョニングプロフィールのUUIDを確認する

```bash
$ cd ~/Library/MobileDevice/Provisioning Profiles
$ ls -l
```

一覧のファイル名からあたりをつける。


## ジョブを作成する

### ジョブを追加

* [新規ジョブ作成] を選択する
	* ジョブ名に空白は含まないようにする
* [フリースタイル・プロジェクトのビルド] を選択

![](https://www.evernote.com/shard/s138/sh/616828f3-04c2-431c-9626-ba4c6eb04ed1/d9752765351eb6beb8a18fe47dbade42/deep/0/新規ジョブ作成--Jenkins-.png)

### 古いビルドの破棄

![](https://www.evernote.com/shard/s138/sh/94b88656-1db9-4048-8620-09dfce7e5fd1/977ba9e621ea50acf6ea09ba5f7ccd11/deep/0/cheers-client-iOS-Config--Jenkins-.png)

### 実行するノードを制限

![](https://www.evernote.com/shard/s138/sh/e051d029-2042-442e-bc10-515e3cf639f3/738e6e7ad28bd18d215be88b788dba19/deep/0/cheers-client-iOS-Config--Jenkins-.png)

### ソースコード管理

![](https://www.evernote.com/shard/s138/sh/b955136e-5375-4260-b972-a81b5e17b791/e29927533af74473be053dffeac5ac37/deep/0/cheers-client-iOS-Config--Jenkins-.png)

* Git-hubやbitbucketのリポジトリのURLを設定する
* Credentialsは追加した認証情報を選択する

### ビルド・トリガ

![](https://www.evernote.com/shard/s138/sh/a3042187-af3f-4427-a379-c585594aa0fc/233a2754badcebb20d5679393cd7e1f3/deep/0/cheers-client-iOS-Config--Jenkins-.png)

* 15分に一回確認する

### ビルド手順を追加する

[ビルド手順の追加] > [シェルの実行] を選択して、以下コマンドを実行する。

#### 環境のクリア

```bash
# git clean
git clean -f -d
git checkout -- .

# clean
rm -rf bin/

# xcode clean
xcodebuild \
	-project "${WORKSPACE}/proj.ios_mac/置き換える.xcodeproj" \
	-configuration Release \
	-target "置き換える" \
	-sdk iphoneos8.1 \
	CONFIGURATION_BUILD_DIR="${WORKSPACE}/bin/release/ios" \
	clean
```

#### ビルド

```bash
xcodebuild \
	-project "${WORKSPACE}/proj.ios_mac/置き換える.xcodeproj" \
	-configuration Release \
	-target "置き換える" \
	-sdk iphoneos8.1 \
	CONFIGURATION_BUILD_DIR="${WORKSPACE}/bin/release/ios" \
	PROVISIONING_PROFILE="置き換える" \
	CODE_SIGN_IDENTITY="iPhone Distribution: 置き換える"
```

#### リネームと圧縮

```bash
pushd bin/release/ios
mv "置き換える iOS.app" "置き換える.app"
mv "置き換える iOS.app.dSYM" "置き換える.app.dSYM"
zip -9r "置き換える.app.dSYM.zip" "置き換える.app.dSYM"
popd
```

#### ipaファイルを作成

```bash
xcrun \
	-sdk iphoneos8.1 \
	PackageApplication \
	-v "${WORKSPACE}/bin/release/ios/置き換える.app" \
	-o "${WORKSPACE}/bin/release/ios/置き換える.ipa"
```

#### HockeyAppにアップロード

```bash
curl \
	-F "status=2" \
	-F "notify=0" \
	-F "notes=Some new features and fixed bugs." \
	-F "notes_type=0" \
	-F "ipa=@bin/release/ios/置き換える.ipa" \
	-F "dsym=@bin/release/ios/置き換える.app.dSYM.zip" \
	-H "X-HockeyAppToken: 置き換える" \
	https://rink.hockeyapp.net/api/2/apps/置き換える/app_versions/upload
```

* API
	* http://support.hockeyapp.net/kb/api/api-versions
* X-HockeyAppToken
	* HockeyApp > Manage Account > API Tokens で作成する
* URL内の識別ID
	* 登録されたアプリのページに表示してある


## 参考サイト

* [Jenkinsを使ってみよう（Mac OS X＆Linux）](http://www.buildinsider.net/enterprise/jenkins/01)
* [Jenkinsでcocos2d-xのアプリをビルド](http://wonderpla.net/blog/engineer/Jenkins_Cocos2d-x/)
* [Jenkinsでcocos2d-xのiOSアプリをビルド](http://wonderpla.net/blog/engineer/cocos2d-x_jenkins_ios/)
* [xcodebuildについて](http://blog.asial.co.jp/953)
* [xcodebuild - PROVISIONING_PROFILE](http://qiita.com/zaki@github/items/848af16ef650df2f00a2)
* [iOSのリリースまでの流れ](http://qiita.com/takeh1k0/items/017164ae40bad930d505)
* [iOSのプロジェクトをJenkinsでビルドする](http://d.hatena.ne.jp/soutaro/20111203/1322916503)
* [JenkinsをMacで自動起動](http://qiita.com/makoto_kw/items/cbe93d4ebbc35f3b43fd)
* [Eclipseでbuild.xmlを自動生成](http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/091204_eclipse-create-buildxml.html)