LoginSignup
20
16

More than 5 years have passed since last update.

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

Posted at

前提

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

参考にした記事

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16