前提
- Swift と
CocoaPods
を使ったプロジェクトのビルドを想定しています -
master
ブランチにマージされた際にビルドされることを前提としています
準備
Travis コマンドのインストール
$ gem install travis --no-document
$ cd [Project Directory]
$ travis login
# Github のユーザ名とパスワードを入力
$ travis enable
証明書とプロビジョニングプロファイル
- 証明書はキーチェーンアクセスから秘密鍵と公開鍵を選択して
.p12
形式でパスフレーズを設定してtravis.p12
として出力しておく - プロビジョニングプロファイルは以下の方法で探して、
travis.mobileprovision
にリネームしておく
- Xcode の
Preferences
>Accounts
>View Details
の該当のプロビジョニングプロファイルを右クリックしてShow in Finder
してもってくる - Apple Developer Member Center からダウンロードしてくる
- 上記で作成した二つのファイルをプロジェクトの
.travis
ディレクトリにまとめて配置する - 以下の手順で隠しておきたいファイルを暗号化しておく
$ cd [Project Directory]
$ cd .travis/
$ tar cvf secrets.tar travis.p12 travis.mobileprovision
$ cd ..
$ travis encrypt-file .travis/secrets.tar .travis/secrets.tar.enc
# 出力をどこかにとっておく
$ rm .travis/secrets.tar
環境変数
- Travis-CI プロジェクトページの
Settings
>Environment Variables
>Add a new variable
から設定する -
travis env set NAME VALUE
コマンドでも設定できる - 人に見られたら困る情報は
Display value in build log
をOFF
にしておく
変数名 | 説明 |
---|---|
APP_NAME |
*.xcproject もしくは *.xcworkspace の前の部分 |
KEY_PASSWORD |
travis.p12 に設定したパスフレーズ |
PROFILE_NAME | Xcode の Preferences > Accounts > View Details で表示されているプロビジョニングプロファイルの名前 |
DEVELOPER_NAME | キーチェーンアクセスの証明書の名前の : の後ろ ( より前の部分。スペースが入っている場合は、スペース前に \ を入れる |
DEPLOYGATE_USER_NAME | deploygate のユーザ名 |
DEPLOYGATE_API_KEY | deploygateの設定画面 から取得する |
Travis-CI の設定画面
Settings
> General Settings
の Build pull requests
を OFF にしておく
Travis-CI 用の設定ファイル
-
.travis.yml
ファイルとしてプロジェクトのディレクトリの直下に設置する -
xcode_workspace
の項目には自分のプロジェクトの*.xcworkspace
のディレクトリ名を入れる -
before_install
のopenssl ...
の行には先の手順のtravis encrypt-file
の結果をコピペする
.travis.yml
language: objective-c
osx_image: xcode7
xcode_workspace: YOURPROJECTNAME.xcworkspace
before_install:
### travis encrypt-file の結果をコピペする ###
- openssl aes-256-cbc -K ... -iv ... -in .travis/secrets.tar.enc -out .travis/secrets.tar -d
- tar xvf ./.travis/secrets.tar -C ./.travis
# xcpretty と fomrmatter のインストール
- gem install xcpretty-travis-formatter --no-document
before_script:
# Create default keychain on VM
# http://docs.travis-ci.com/user/common-build-problems/#Mac%3A-Code-Signing-Errors
- security create-keychain -p travis ios-build.keychain
- security default-keychain -s ios-build.keychain
- security unlock-keychain -p travis ios-build.keychain
- security set-keychain-settings -t 3600 -l ~/Library/Keychains/ios-build.keychain
# Add certs to keychain
- security import ./.travis/travis.p12 -k ~/Library/Keychains/ios-build.keychain -P ${KEY_PASSWORD} -T /usr/bin/codesign
# save profile
- mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
- cp "./.travis/profiles/travis.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/
script:
- xcodebuild -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -sdk iphoneos -configuration Release CODE_SIGN_IDENTITY="${DEVELOPER_NAME}" archive -archivePath ./build/${APP_NAME}.xcarchive | xcpretty -f `xcpretty-travis-formatter` && exit ${PIPESTATUS[0]}
- xcodebuild -exportArchive -exportFormat IPA -archivePath ./build/${APP_NAME}.xcarchive -exportPath ./build/${APP_NAME}.ipa -exportProvisioningProfile "${PROFILE_NAME}" | xcpretty -f `xcpretty-travis-formatter` && exit ${PIPESTATUS[0]}
after_success:
# Upload .ipa file to deploygate
- curl -F "file=@build/${APP_NAME}.ipa" -F "token=${DEPLOYGATE_API_KEY}" https://deploygate.com/api/users/${DEPLOYGATE_USER_NAME}/apps
after_script:
- security delete-keychain ios-build.keychain
- rm -f "~/Library/MobileDevice/Provisioning Profiles/${PROFILE_NAME}.mobileprovision"
branches:
only:
- master
動作確認
今まで追加したファイルをコミットして、Github にプッシュすると .travis.yml の定義に従ってビルドのプロセスが走ります。
$ git commit -m "add Travis-CI settings"
$ git push
注意点
- 一定規模以上のプロジェクトになると、ビルドのログが多すぎて Travis-CI の4MBの制限を突破してしまうため、ログ出力は xcpretty を挟まないとビルドが失敗する
-
travis encrypt-file
は一プロジェクトにつき複数のファイルを扱えない