中年エンジニアの開発と生活の日々

中年エンジニアがソフトウェア開発や日々の生活で得た知見の備忘録

iOSとAndroidの同時開発で Circle CI を使用する

はじめに

iOSAndroidのクロス開発を行なっているのですが、Circle CIを使用してインテグレーションすることになったので、概要をまとめてみました。

Circle CI の仮想環境は Mac OS を使用する

Circle CI では仮想環境をLinuxMac OS から選ぶことができます。(Mac OSは有料プランでしか選べませんが…)

iOSAndroid のクロス開発を行う場合は Circle CI は Mac OS仮想マシンを使う必要があります。これは、Mac OS仮想マシンでなければ iOS 版をビルドできないためです。

Circle CI で iOS 版と Android 版をビルドするときの大まかな流れ

1つのリポジトリiOS版とAndroid版を開発しているケースを想定しています。

Circle CI は関連づけられているリポジトリの更新を感知してインテグレーションを開始します。そのため、基本的には1つのインテグレーションのサイクルでiOS版とAndroid版をそれぞれビルドして、まとめてデプロイすることになります。

  • iOS のビルド環境を構築する
  • Android のビルド環境を構築する
  • iOS 版をビルドする
  • Android 版をビルドする
  • デプロイ

iOS のビルド環境を構築する

Circle CI の Mac OS の仮想環境には既に必要な XCode 等はインストールされているので、使用する XCode のバージョンを指定する。circle.yml の machine に xcode のバージョンを記載します。

machine:
  xcode:
    version: 8.2

ビルドツールとしてfastlaneを使用するのであれば、dependenciesでセットアップしておきます。また、2017年4月時点では Cocoa Pods や npm モジュールは Podfile や package.json などの設定ファイルの存在をチェックして自動でやってくれますが、念のため明示的にセットアップするように circle.yml に記載するほうが好きです。

dependencies:
  override:
    - gem install fastlane
    - pod install
    - npm install

Android のビルド環境を構築する

Circle CI の用意してくれる Mac OS の仮想環境には Android 向けの開発環境は入っていないため、自力で構築する必要があります。 おおよその場合、android-sdk と関連ライブラリをセットアップします。

android-sdk はつい最近まで、brewでインストールできたましたが、brew caskに移動したので、cask からインストールします。また、関連ライブラリは従来は android コマンドで実行していたが、つい最近廃止になり、sdkmanagerコマンドでセットアップすることになっています。

dependencies:
  pre:
    - brew install Caskroom/cask/android-sdk
    - sdkmanager "platforms;android-23" "build-tools;23.0.1"

sdkmanagerについては今度細かく書きたい。

自動テストを行う

自動テスト用のビルドを行い、自動テストを実施します。iOS版とAndroid版を両方ビルドして検証するべきですが、時間がかかるのが悩ましいところです。 iOS版とAndroid版のビルドについてはざっくりと紹介します。

iOS 版をビルドする

自分はiOS 版のビルドには fastlane を使っていますが、 XCodeコマンドラインツールを直接実行する方法もあります。fastlane はビルドから署名までいろいろと便利機能が充実しているので便利です。 更新されたブランチを特定してfastlaneのオプションを切り替えることによって署名を検証向けと製品向けを切り替えることができます。

Android 版をビルドする

Android 版のビルドは標準の Gradle を使用してビルドします。

デプロイ

変更されたブランチを特定してデプロイ先を変更することができます。Masterブランチの場合は App Store、Develop ブランチの場合は検証用のWebサーバーなどに配置します。 DeployGate などのツールを使用すれば、お金はかかりますが労力は軽減されそうです。

最後に

Circle CI を使用して iOS 版と Android 版を一緒にビルドする方法を中心にまとめてみました。Mac OS 上での コマンドラインベースのAndroidの環境構築を行なっている人が少ないので、参考になれば幸いです。