2013年4月15日

【iPhone】Jenkinsで古いXcodeでビルドする



僕のMacには4つのXcodeが入っています。
最新のXcodeでビルドするとエラーになる、古いプロジェクト等、いろいろありますので、
Xcodeは常に最新にするものが1つと、その他の古いバージョンをインストールしています。

Jenkinsでの自動ビルドへ移してから、
プロジェクトごとにバージョンの指定をすれば、Jenkinsでも古いXcodeが使えるようです。

と、いう訳で早速やってみます。


Xcodeのインストール

まずは、ビルドサーバ、もしくはローカルにXcodeの古いバージョンをインストールします。

Downloads for Apple Developers

こちらから、古いバージョンのdmgファイルをダウンロードして、マウントします。
中に入っているXcode.appを/Applicationsへ移動。
適当に名前を既存のXcodeと被らないように変更します。


Jenkinsの設定

Jenkinsでビルドする前に、xcode-selectコマンドで、利用するXcodeを選択出来ます。

まずはターミナルで試し打ち、
$ xcode-select -version
xcode-select version 2311.
xcodebuild -version
Xcode 4.6.1
Build version 4H512
$ sudo xcode-select --switch /Applications/Xcode4.5.2.app/Contents/Developer/
$ xcodebuild -version
Xcode 4.5.2
Build version 4G2008a

さて、ここでxcode-selectの--switchオプションを使うには、sudo権限が必要になります。
これは、Jenkins上で実行しても同じなので、Jenkinsユーザにxcode-selectを実行するときに限りsudo権限をつけるようにします。

sudo権限の追加

ここで、/etc/sudoersを編集して、jenkinsにxcode-selectのみパスワード無しsudo実行出来るように設定する。

まずは、root権限になり、/etc/sudoersを編集する。間違ってもsudo chmodなどしてはいけない。
$ sudo su -
# visudo

これで、/etc/sudoersが編集出来るようになる。

ここに、権限を追加する。
# User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL
jenkins  ALL=NOPASSWORD /usr/bin/xcode-select

これでjenkinsというユーザからxcode-selectのみパスワード無しで実行可能になった。

Jenkinsへの設定

基本は常に最新のXcodeでビルドしつつも、特定のプロジェクトだけ古いバージョンを使うように設定する。

ビルドの1番目にシェルの実行を追加し、
# Xcodeのバージョンを4.5.2へ変更
sudo xcode-select --switch "/Applications/Xcode4.5.2.app/Contents/Developer/"
を追加、これで4.5.2へ変更出来る。

さらに、ビルドの最後にもシェルを追加し、元に戻すコードを追加。
(これはビルド失敗した時に微妙なので、出来れば他の方法がいいが、現状は面倒臭い・・・)

まずは、これで、特定プロジェクトのみ古いXcodeを使えるようになったのでよしとする!