Help us understand the problem. What is going on with this article?

Travis CIでつくるiOSのCI環境(準備編)

More than 1 year has passed since last update.

この記事はWHITEPLUS Advent Calendar 2016 5日目になります。

株式会社ホワイトプラス、エンジニアの @akaimo です。
ホワイトプラスでは主にリネットのiOSアプリを担当しています。

iOSアプリのリリースや配布は手間がかかる

iOSアプリをリリースしたり、開発版を配布しようと思うと、各開発者のMacに証明書をインストールしなければいけません。
しかし、Appleの証明書は複雑なため、なかなかスムーズにいきません。
また、アップロードできる人を絞ってしまうと、負荷の集中、不在時にどうするかなどの問題も発生します。

そこでホワイトプラスでは、Travis CIを利用してリリース・配布のフローを自動化しています。
CI環境を作ってしまえば、つい忘れていつの間にかテストが通らなくなっている、なんてことも防げ品質を高く保つこともできます。

利用するサービス

  • GitHub
  • Travis CI
  • HockeyApp
  • TestFlight (iTunes Connect)
  • Slack

Travis CIの環境

  • MacOS Sierra
  • Xcode8.1
  • Swift3.0

ゴール

travis.001.jpeg

GitHubへのPushを起点にTravisでテストが実行され、
リリースブランチの場合はiTunes Connectへアップロード、
デベロップブランチの場合はHockeyAppへアップロードし、
最後にSlackへ結果を通知します。

ローカルでの準備

前提条件

開発で使用しているMacのXcodeからiTunes Connectへアップロードできることを前提に進めます。
証明書の作成などは事前に行っておいてください。

証明書の書き出し

アプリをリリースするために、

を用意します。
リリース用と配布用で異なる場合は配布用も必要です。
証明書はキーチェーンから.p12を書き出します。

証明書の配置

今回はリポジトリ内のcertsの下に配置してGitHubにpushします。
そのままアップロードするのは危険なので暗号化します。

証明書の暗号化

暗号化にはopensslコマンドを使います。

$ openssl aes-256-cbc -a -k "password" -in certs/Distribution.mobileprovision -out certs/Distribution.mobileprovision.enc
$ openssl aes-256-cbc -a -k "password" -in certs/Distribution.p12 -out certs/Distribution.p12.enc

復号パスワードをtravisの環境変数に追加する

このパスワードも直接書いてしまうと危険なので暗号化します。
Travis CI Clientを使うと環境変数に暗号化された状態で追加することができます。

Travis CI Clientのインストール

Travis CI Clientはgemでインストールすることができます。

$ gem install travis

インストールが完了したらログインします。

$ travis login

これでtravisコマンドを使用する準備ができました。

復号パスワードを暗号化して.travis.ymlに追加する

復号パスワードを暗号化して環境変数として追加します。

$ travis encrypt DECORD_CERTS=password --add

これで、.travis.ymlenv:global:に暗号化されたパスワードが追加されています。
Travis CIではDECORD_CERTSでこのパスワードにアクセスできます。

ここでエラーになる場合は対象のディレクトリ内で、

$ travis login --pro

を実行してログインし直せばできると思います。

証明書のインストールに必要なパスワードの暗号化

同様に証明書のインストールに必要なパスワードも暗号化して環境変数として追加します。

$ travis encrypt CERT_PASS=password --add

以上でローカルでの準備は完了です。

Travis上での準備

ここからは、Travis CI上で実行するスクリプトになります。
Travis CIでビルドやアップロードをするための環境構築です。
この処理はシェルスクリプトとして用意しておくことをオススメします。

証明書のインストール

先ほどリポジトリに追加した証明書をインストールしていきます。

Travis上にキーチェーンに作成

security create-keychain -p travis travis.keychain
security default-keychain -s travis.keychain
security unlock-keychain -p travis travis.keychain
security set-keychain-settings -t 3600 -l ~/Library/Keychains/travis.keychain

証明書・Provisioning Profileの復号

openssl aes-256-cbc -a -d -k $DECORD_CERTS -in certs/Distribution.mobileprovision.enc  -out certs/Distribution.mobileprovision
openssl aes-256-cbc -a -d -k $DECORD_CERTS -in certs/Distribution.p12.enc -out certs/Distribution.p12

証明書のインストール・Provisioning Profileの配置

security import ./certs/apple.cer -k ~/Library/Keychains/travis.keychain -T /usr/bin/codesign
security import ./certs/Distribution.p12 -k ~/Library/Keychains/travis.keychain -P $CERT_PASS -T /usr/bin/codesign

mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp "./certs/Distribution.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/

キーチェーンへのアクセスを 許可

Sierraでキーチェーンに仕様変更が入り、このままだとパーミッションの確認がでてハングしてしまいます。
パーミッションを許可するために以下を追加します。

security set-key-partition-list -S apple-tool:,apple: -s -k travis travis.keychain

ここまでの処理をまとめて1つのスクリプトにしたものをTravis CIで実行すれば、ビルド・アップロードするための準備が整います。

終わりに

以上でTravis CI上でテスト・配布する環境は整いました。
続きのテスト・アップロード編は12月14日に公開予定です。

明日は弊社デザイナー @UomoriAtsushi の「デザイナーがレシピ投稿サイトに投稿してみたら」です。

ホワイトプラスではエンジニアを募集しています

ホワイトプラスでは、新しい技術にどんどん挑戦したい!という技術で事業に貢献したいエンジニアを募集しております。

akaimo
wh-plus
「日々の生活と心にゆとりと豊かさ」を生むためのサービスを提供している会社です。
https://www.wh-plus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away