CIを前提としたプロジェクトのテンプレートができてた話
これはiOSアドベントカレンダーの10日目の記事です。
私にとって今年は、iOSエンジニアに転向した年でした。 それまではAndroid。 そして、携わっているプロジェクトのSwift化(未完)だったりiPhoneX対応だったりと劇的な半年でした。
ほぼゼロから始めたので、iOS SDKのサンプルアプリをいくつか作って勉強してたのですが、
そのうち、 CIを前提としたプロジェクトのテンプレートのような物が出来上がっていたのでそれを紹介したいと思います。
TL;DR
AnsibleでCIできるまでセットアップするプロジェクトテンプレートができてましたという話です。
大まかな使い方
- initialタグをチェックアウト
- プロジェクトをつくって、リポジトリと同じパスに配置。( initial-projectタグの状態を作る)
- プロビジョニング(Ansible)を実行(実行すると、apply-provisionタグの状態になる)
※ 実際に使う場合はトークンなどの認証情報が設定されている必要があります。
CI
- fastlane
Deploy
- Crashlytics Beta
Package Manager
- CocoaPods
Provisioning
- Ansible
- Bundler
テンプレートプロジェクト
下記のテンプレートプロジェクトをもとに詳細を書いていきます
https://github.com/matsuokah/ProjectTemplate-iOSgithub.com
リポジトリをクローンしてからfastlaneを叩くまで2,3コマンドでできるようにする
Ansibleで環境構築を自動化することで、fastlaneのコマンドを叩くまでの時間を短縮することができました。 なるべく前提を減らし、ビルドに必要なアプリケーションがなくても動くように作りました。
流れを書くと
make setup_tools
コマンドでシェルスクリプトをフック- シェルスクリプトでXcodeのインストール済みかどうかを判定。なければ、Safariを開いてXcodeのインストールを促す
- Ansibleがなければインストール、あればアップデート
- AnsibleのPlaybookを実行
Ansibleでやったこと
brew
で必要なアプリのインストール- 各テンプレートのデプロイ
bundler
のインストール
テンプレート
主に作ったテンプレートは下記の通り
.gitignore
Podfile
fastlane
関連Gemfile
.gitignore
.gitignore
は特にプロジェクト作る度にまずこれを作りますが、うっかり忘れたり、排除対象の列挙が漏れると思わぬファイルを追跡してしまいます。
gitignore.ioで作るのもめんどくさい
今回はある程度使うものを予め盛り込んだテンプレートで対応しました。
脱線しますが、CLIではcurl http://gitignore.io/api/swift >> .gitignore
という書き方も可能です。
Podfile
Crashlytics Betaを使いたいので予め盛り込んだ状態にしています。
XXXXX.xcodeproj
にヒットしたターゲット名で生成しています。これであとはpod install
するだけ。
よく使うライブラリは他にも盛り込んでもいいかも。RxSwiftとか。
fastlane
関連
テンプレート化したのは下記の3つ。Fastfile
以外は自前の定義ファイルです。
Fastfile
- ビルドシーケンス
AppContext
Env
Gemfile
- Bundlerのインストール
Fastlane
のEnv
の管理について
プライベートリポジトリを使っていたので、気にせず直書きしていました。(セキュリティの意識は甘々ですが別の漏れても被害はほぼないので。) また、サンプルを作るときには、Bitbucketを使っていました。Privateリポジトリの作成が無料かつ無制限につかえます。 余談ではありますがCIにはBitriseを使いました。Bitriseは10分以内ビルドなら月に200回まで無料で使えます。 iOSかつ、プライベートなリポジトリのCIが無料でできるのはBitriseだけ(俺調べ)
テンプレートの使い方まとめ(再掲)
- タグinitialをチェックアウト
- プロジェクトをつくる(実行すると、タグ: initial-projectの状態になる)
- プロビジョニング(Ansible)を実行(実行すると、タグapply-provisionの状態になる)
まとめ
ということで、Xcodeプロジェクトを作ってからfastlaneを走らせるまでの作業を自動化してみました。
殆どのプロジェクトでは初回のみなのであまり機会がなさそうなソースですが、
手順が自動化でき、自分にとってのプロジェクトの作成マニュアルができました。
今回は盛り込んでいませんが、xcodeprojを使えばシェルの埋め込みも可能だと思います。
まだまだプロジェクトのテンプレートは育ちそうです。
それでは次は17日のSwiftのAdvent Calendarで〜。