[iOS 8] 15分で作れる CI 環境構築

191件のシェア(すこし話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

iOSアプリにも継続的インテグレーション環境を

こんにちは!今日からMacDownでブログを書いています。荒川です。

モダンなWeb開発では馴染み深くなってきた、CI(継続的インテグレーション)環境を iOS 開発でも弊社では積極的に取り入れています。社内での共有も兼ねて、今回は簡単にまとめます。

「継続的インテグレーション」と聞くととても難しそうで、設定も大変そうです。ですので、最低限コピペで作れる程度の環境構築方法を紹介します。

iOS 開発での CI とは何かを詳しく知りたい方は、弊社諏訪の記事 iOSアプリ開発でCI/継続的デリバリ環境を始めるための4種の神器 を参考にしてください。

今回構築する環境は、以下に該当する方に最適です。

  • gitを使って iOS 開発を行っている。
  • チーム内でチャットツールを使っていて、そのAPIが公開されている。
  • テストコードを書いている。または、そのうち書きたい。
  • GitHub でリモートのリポジトリを共有している。
    • GitHub のPull Requestをマージする前に、そもそもビルドがしっかり通っているかクリーンな環境で確認したい。

開発環境

  • Mac OS X Yosemite
  • Xcode 6.1
  • iOS SDK 8.1
  • CocoaPods 0.34.4
  • ChatWork(チャットツール)
  • GitHub(共有リポジトリ)
  • Travis CI(公開リポジトリ用の.orgドメイン、Privateなリポジトリは.comドメイン)

チャットツールはAPIが公開されていれば、どのサービスでも結構です。チャットツールのAPIトークンを利用するため、 GitHub と Travis CI は必ずプライベートリポジトリ にして下さい。公開リポジトリを使用する時は、チャットツールの設定を省略して下さい。

まずは、各サービスにログインし、作業リポジトリを作成して下さい。

iOS × Travis CI 環境を作るための4ステップ

Travis CIGitHub で管理されているリポジトリに、簡単な設定を追加するだけで CI 環境を提供してくれるWebサービスです。

同じようなサービスの Jenkins と異なる点は、

  • GitHub に依存している。
  • 環境構築が設定ファイル(.travis.yml)で簡単に行える。
  • ビルド環境を Travis 側が提供してくれる。

などがあります。

Travis の VM 上でビルドの度に使い捨ての環境が立ち上がるようです。これによって常にクリーンな状態からビルドが行えます。

順番に連携の仕方を紹介します。

1. Travis CI Webコンソールから対象リポジトリの設定

Travis CI には GitHub アカウントでログインできます。 ログイン後に対象リポジトリを Travis でビルドするためのチュートリアルが表示されますので、その通りに進めてください。

2. 設定ファイルの作成

まず、「.git」 ディレクトリと同階層に 「.travis.yml」 を作成します。

ターミナルからリポジトリのディレクトリまで移動し、以下を入力します。

vi .travis.yml
language: objective-c

before_install:
  - gem install cocoapods -v '0.34.4'
  - pod install

script:
  - xctool -workspace YOURPROJECT.xcworkspace -scheme YOURSCHEME -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO
  - xcodebuild -workspace YOURPROJECT.xcworkspace -scheme YOURSCHEME -destination 'platform=iOS Simulator,name=iPhone 6' test

after_success:
  - chmod 755 chatwork.sh
  - ./chatwork.sh

現在 Travis でのパッケージ管理を行う homebrew では、 xctool の iOS 8.1 以降のテストに対応していないため、テストビルドは xcodebuild を使っています。xctool の方がログが整形されていて見やすいですが、Xcode 標準のビルドツールより新 OS への対応が遅いです。xctool は Facebook の OSSです。

  1. YOURPROJECT.xcworkspace と YOURSCHEME それぞれにプロジェクトに適した名前をつけてください。
  2. CocoaPods を利用するためには、Podfile が必要です。
  3. テストを書いていない場合は、「- xcodebuild -workspace YOURPROJECT.xcworkspace -scheme YOURSCHEME -destination 'platform=iOS Simulator,name=iPhone 6' test」 の箇所を消してください。
  4. チャットツールを使わない場合は、「after_success:」以降を消してください。
  5. 3. チャットツールとの連携

    「.travis.yml」と同階層に「chatwork.sh」を作成します。

    vi chatwork.sh
    
    #!/usr/bin/env sh
    CHATWORKTOKEN=(チャットワークのトークンが入ります。)
    CHATWORKROOMID=(チャットワークのルームIDが入ります。)
    
    # ビルド成功時は develop ブランチのみ通知
    if [ ${TRAVIS_TEST_RESULT} -eq 0 ] && [ ${TRAVIS_BRANCH} != "develop" ]; then
      echo "exit: build success on any branch without develop"
      exit 0
    fi
    if [ ${TRAVIS_TEST_RESULT} -eq 0 ]; then
      result="BUILD SUCCESS"
    else
      result="BUILD FAILED"
    fi
    
    body=`cat << EOT
    [info][title]${result} - ${TRAVIS_REPO_SLUG} [/title]branch: ${TRAVIS_BRANCH}
    commit: https://github.com/${TRAVIS_REPO_SLUG}/commit/${TRAVIS_COMMIT}
    build: https://magnum.travis-ci.com/${TRAVIS_REPO_SLUG}/builds/${TRAVIS_BUILD_ID}
    [/info]
    EOT`
    
    echo "$body"
    
    script="puts URI.encode_www_form_component('${body}')"
    encoded=`ruby -r uri -e "${script}"`
    echo $encoded
    curl -X POST -H X-ChatWorkToken:$CHATWORKTOKEN -d body=${encoded} https://api.chatwork.com/v1/rooms/$CHATWORKROOMID/messages
    

    以上で設定は終わりです。

    ChatWork での API トークンの取得方法については、 ChatWork API ドキュメント - 認証方法 を参考にしてください。

    4. Xcode での Scheme の共有設定

    Xcode のプロジェクトを外部サービスでビルドしたいときは、スキーム毎に許可を与える必要があります。

    ios-travis02

    ios-travis01

    以上で全ての環境構築が完了しました。

    GitHub の develop ブランチへ push すれば、 Travis で自動ビルド & テストが実行されて、結果がチャットツールへ通知されます。

    まとめ

    今回は iOS 開発の CI 環境構築の一例を紹介しました。

    もちろん「.travis.yml」ファイルを各言語設定に書き換えれば iOS 以外でも CI 環境が構築できます。

    既に GitHub をお使いの方は、簡単に出来ますので、構築してみてはいかがでしょうか。