macOSアプリのCI事情1 – 概要

デベロッパ・市場規模のせいか、iOSアプリのCI(継続的インテグレーション)に関する情報は簡単に見つかるが、macOSアプリやtvOSアプリのCIに関する情報はなかなか見つけにくい。長いこと苦戦してきたが、macOSアプリに関しては、ようやく良さげな解決策を見つけるところまで至ったので、ここに共有しておく。

やりたいことの確認

やりたいことは基本的に、一般的なiOSアプリのCIとほとんど変わらない。ソースコードに変更があったら自動的にテストを実行したり、App Storeへの申請用のビルドを作ってiTunes Connectにアップロードしたりする。なおiOSでは、実機テスト用に最新ビルドをTestFlightに上げ続けるような運用をしたりするが、macOSにはTestFlightはない。
CIを導入するメリットや目的も、iOSのそれと基本的には同じ。テストによる早期の不具合発見、テスト・申請用ビルドにかかるマシンパワーの節約・並列化による効率化、誰でもどこからでも申請用のビルドを作れるようにする、など。

使うツールやサービス

macOSのCI環境を整えるのに使うツールやサービスも、基本的にはiOSのそれと変わらない。ビルドやテストの実行にはxcodebuildコマンドを使い、iTunes Connectへのバイナリのアップロードにはfastlaneのdeliver等を使う。一連のフローの管理には、Jenkinsを使っても良いし、BitriseなどのCIサービスを使っても良い。ただし、慣れないうちはまずローカルでTerminalで動かしてみて、仕組みを理解した上でCIサービスを使わないと苦しむことになる。

なにが厄介なのか

当然ながら、細かい部分ではiOSとmacOSで違いが出てくる。例えば、iOSでCI環境下でテストを動かす場合にはシミュレータを使うが、macOSにはそのような機構はない。iOSの申請用のバイナリーファイルはipaだが、macOSの場合はpkgファイルをアップロードする。
これらの違いにより、ツールを叩くときのコマンドや設定が微妙に異なってくるのだが、ここに厄介な理由がある。

  1. ツールやサービスに関するほとんどの情報がiOS用に書かれており、macOS用の情報を見つけるのが難しい。
  2. ものによっては、macOS対応してなかったり、ちゃんとメンテされてなかったりする。あるいは、一見するとわからないような設定が追加で必要だったりする。
  3. macOSのビルド環境は変化が大きく、古い情報の通りには使えなかったりする。

上記の理由で、今までなかなか快適なmacOSアプリのCI環境を作れずにいたのだが、Xcode8のリリースなどもあり、ようやく快適な環境を作れるようになった。
というわけで、次のポスト以降で詳しい仕組みと、具体的な手順について説明していく。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です