Posted at

Travis-CI上でiOS アプリをビルドしてdeploygateで配布する

More than 3 years have passed since last update.


前提


  • Swift と CocoaPods を使ったプロジェクトのビルドを想定しています


  • master ブランチにマージされた際にビルドされることを前提としています


準備


Travis コマンドのインストール

$ gem install travis --no-document

$ cd [Project Directory]
$ travis login
# Github のユーザ名とパスワードを入力
$ travis enable


証明書とプロビジョニングプロファイル


  1. 証明書はキーチェーンアクセスから秘密鍵と公開鍵を選択して .p12 形式でパスフレーズを設定して travis.p12 として出力しておく

  2. プロビジョニングプロファイルは以下の方法で探して、 travis.mobileprovision にリネームしておく


    • Xcode の Preferences > Accounts > View Details の該当のプロビジョニングプロファイルを右クリックして Show in Finder してもってくる

    • Apple Developer Member Center からダウンロードしてくる



  3. 上記で作成した二つのファイルをプロジェクトの .travis ディレクトリにまとめて配置する

  4. 以下の手順で隠しておきたいファイルを暗号化しておく

$ 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 logOFF にしておく

変数名
説明

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 SettingsBuild pull requests を OFF にしておく

iosapp-travis.png


Travis-CI 用の設定ファイル



  • .travis.yml ファイルとしてプロジェクトのディレクトリの直下に設置する


  • xcode_workspace の項目には自分のプロジェクトの *.xcworkspace のディレクトリ名を入れる


  • before_installopenssl ... の行には先の手順の 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 は一プロジェクトにつき複数のファイルを扱えない


参考にした記事