Slide 1

Slide 1 text

試行錯誤してたどり着いた 現在のiOSアプリ自動デプロイ環境 2017/3/25 SWWDC #30 asmz

Slide 2

Slide 2 text

Who are you? ▷ Akira Shimizu / asmz(@_asmz) ▷ 株式会社百戦錬磨 エンジニア ▷ 奥さん1人、子供1人(2歳) ▷ 岩手県陸前高田市出身 ▷ 新卒から12年半東京に勤め、 2016/8より仙台にJターン ▷ 仙台市若林区荒井在住

Slide 3

Slide 3 text

Who are you? ▷ 無類のビール好き ○ 「麦芽系エンジニア」で検索すると前職エンジニアブログ の自分のエントリとか出ます ○ 思わずドメイン取ってしまった ■ http://asmz.beer

Slide 4

Slide 4 text

What are you doing? ▷ 株式会社百戦錬磨とは? ○ 「旅行×ICT」をフィールドとしたベンチャー企業 ○ 仙台オフィス:仙台市青葉区本町2丁目 ■ 主にエンジニア部隊 ○ 東京、大阪、沖縄、三戸に拠点 ■ 営業、マーケティング部隊 ■ エンジニア、デザイナー若干

Slide 5

Slide 5 text

What are you doing? ▷ STAY JAPAN(https://stayjapan.com) ○ 「民泊」Webプラットフォーム ■ 自分はネイティブアプリ(iOS/Android)担当

Slide 6

Slide 6 text

“ iOSアプリのデプロイプロセス...

Slide 7

Slide 7 text

Deploy for iOS App ▷ みなさまご存知の通り結構厄介ですよね... ○ Certificates、App ID、UDID、Provisioning Profileの準備 ○ Code Signing、Provisioning ○ Debugビルド、実機インストール ○ AdHocビルド、実機インストール ○ Releaseビルド、iTunesConnectへアップロード ○ TestFlightでテスト ○ 審査提出 ▷ 複数人での開発や大勢のテスターへ配布が必要だと...

Slide 8

Slide 8 text

“ 『よし、自動化しよう』

Slide 9

Slide 9 text

Planning auto deployment ▷ CIサービス ○ Bitrise ▷ 証明書、ProvisioningProfileの導入 ○ fastlane match ▷ iOSアプリのビルド ○ fastlane gym ▷ ベータ版アプリの配布 ○ Crashlytics Beta ▷ 製品版アプリの配布 ○ fastlane deliver

Slide 10

Slide 10 text

Planning auto deployment ▷ 全体概要 Push Hook delivery (development) upload - Code signing - Provisioning - Build (production) download GitLab

Slide 11

Slide 11 text

Planning auto deployment ▷ fastlaneとは? ○ https://fastlane.tools/ ○ モバイルアプリ開発支援ツール群 「Fabric ( https://get.fabric.io/ )」の1 つ ○ iOS/Androidのデプロイ作業を行え る各種コマンドをまとめたもの ○ lane(レーン)という単位でコマンドの 進行管理を行う

Slide 12

Slide 12 text

Planning auto deployment ▷ fastlaneの主なコマンド ○ match ■ 証明書、Provisioning Profileの管理、Keychainへのインポート ■ 別途Gitリポジトリを用意し、iTunesConnectに共有アカウントを用意 することで、そのアカウントで証明書やProvisioning Profileを作成・更 新する →Mac依存しないため複数人開発に便利 Gitリポジトリ (private)

Slide 13

Slide 13 text

Planning auto deployment ▷ fastlaneの主なコマンド ○ gym ■ アプリのビルド、Code Signing ■ ipaファイルの生成だけでなく製品版Archive作成も行える ○ deliver ■ iTunesConnectへのアップロードを行う

Slide 14

Slide 14 text

Planning auto deployment ▷ こんな感じで設定ファイルを書きます platform :ios do before_all do end desc "Lane of dev branch build" lane :dev_build do # 開発ブランチ用のlane match(...) gym(...) crashlytics(...) end desc "Lane of master branch build" lane :master_build do # masterブランチ用のlane match(...) gym(...) deliver(...) end : end ▷ 実行方法 ○ 開発ブランチ $ fastlane dev_build ○ masterブランチ $ fastlane master_build

Slide 15

Slide 15 text

Planning auto deployment ▷ Crashlyticsとは? ○ http://try.crashlytics.com/ ○ モバイルアプリ開発支援ツール群「Fabric ( https://get.fabric.io/ )」の1つ ○ Crashlytics本体はクラッシュレポート管理ツール、内包される「Beta」は ベータ版アプリの配布ツール

Slide 16

Slide 16 text

Planning auto deployment ▷ Crashlyticsとfastlaneは連動できます : desc "Lane of dev branch build" lane :dev_build do match gym crashlytics( crashlytics_path: "./Pods/Crashlytics/iOS/Crashlytics.framework", api_token: ENV['CRASHLYTICS_API_TOKEN'], build_secret: ENV['CRASHLYTICS_BUILD_SECRET'], ipa_path: "./TestApp.ipa", groups: "developers", notifications: true ) end :

Slide 17

Slide 17 text

Planning auto deployment ▷ Bitriseとは? ○ https://www.bitrise.io/ ○ モバイルアプリ開発(Android/iOS/Xamarin)に特化したCIサービス ○ Gitリポジトリサービス(Github、Bitbucket、Gitlabなど)へのPushや MergeをHookして、ビルドを実行することが可能 ○ 標準でiOSのビルド機能などありつつ、先述したfastlaneやCrashlyticsな どとも連携して使用可能

Slide 18

Slide 18 text

Planning auto deployment ▷ Workflow ○ リポジトリのClone、ビルドなど一連の作業フローを定義 ▷ Trigger ○ 指定ブランチがPush、Mergeされた際に行うWorkflowを指定できる

Slide 19

Slide 19 text

Planning auto deployment ベータ版配布の流れ 1. GitlabにPush(or Merge) 2. Bitriseにてブランチに応じたWorkflow実行 a. fastlane matchで証明書、Provisioning導入 b. fastlane gymでビルド、ipaファイル生成 c. Crashlyticsへipaアップロード 3. Crashlytics Beta にてテスターへベータ版配布

Slide 20

Slide 20 text

Planning auto deployment 製品版配布の流れ 1. GitlabにPush(or Merge) 2. Bitriseにてブランチに応じたWorkflow実行 a. fastlane matchで証明書、Provisioning導入 b. fastlane gymでビルド、アーカイブ作成 c. fastlane deliverでiTunesConnectへアップロード 3. TestFlightでテスト 4. Apple申請

Slide 21

Slide 21 text

Planning auto deployment ▷ (再)全体概要 Push Hook delivery (development) upload - Code signing - Provisioning - Build (production) download GitLab

Slide 22

Slide 22 text

“ 「どこが試行錯誤したの?」 『それはかれこれ2年前...』

Slide 23

Slide 23 text

“ (2年前)『よし、自動化しよう』

Slide 24

Slide 24 text

Past auto deployment plan ▷ 既に同じようなことをやり始めてました ○ [blog] fastlane、Crashlyticsを使ったiOSアプリのリリースプロセス 自動化に挑む ■ http://engineering.otobank.co.jp/entry/ios-deploy-use-fastlane-crashlytics Push Hook delivery (development) upload (production) - Code signing - Build download

Slide 25

Slide 25 text

Past auto deployment plan ▷ CIサービス:CircleCI ▷ iOSアプリのビルド:fastlane ▷ ベータ版アプリの配布:Crashlytics Beta ▷ 製品版アプリの配布:fastlane deliver

Slide 26

Slide 26 text

“ CircleCI「iOSビルド有料化します 」 『えっ』

Slide 27

Slide 27 text

Past auto deployment plan ▷ 無料プランなし ▷ 最安で$39/月 ○ 1-5 builds/day ?? ▷ 次プラン$129/月 ○ 値段一気に上がる ○ 5-10 builds/day

Slide 28

Slide 28 text

Past auto deployment plan ▷ CIサービスをBitriseに乗り換え ○ [blog] CircleCIのiOSビルドが有料プラン化するらしいので、Bitrise の無料プランに乗り換えてみた ■ http://engineering.otobank.co.jp/entry/ios-build-switch-to-bitrise-from-circleci Push Hook delivery (development) upload - Code signing - Provisioning - Build (production) download

Slide 29

Slide 29 text

Past auto deployment plan ▷ 無料プラン ○ 10 min / build ■ 開発が進んでくるとこれが 結構きつい ■ 外部ライブラリはリポジトリ 管理から外していたので、 CI上でclone後のCarthage ライブラリのビルドで結構な 時間使う

Slide 30

Slide 30 text

Past auto deployment plan ▷ CIサービスをbuddybuildに乗り換え ○ [blog] iOSアプリのデプロイ自動化にbuddybuildを使ってみた話 ■ http://engineering.otobank.co.jp/entry/ios-build-by-buddybuild Push Hook delivery (development) upload - Code signing - Provisioning - Build (production) download

Slide 31

Slide 31 text

Past auto deployment plan ▷ 無料プラン ○ 20 min / build ○ カスタマイズ幅が少ない ■ fastlane使用できずCI独 自の仕組みでビルド ○ キューイングが頻発 ■ 3時間待ちとか...

Slide 32

Slide 32 text

“ 『...  』

Slide 33

Slide 33 text

Past auto deployment plan ▷ 一旦は有料版を検討 ○ buddybuildのキューイングは、有料版なら優先されるのでそんな に引っかからないと思われる ○ でもfastlane使いたい(CIの仕組みに依存したくない)ので、お金払 うならBitriseの有料版か? ○ 転職してGithubじゃなくGitlabになったので、CircleCIやTravisCI はGitlabとの連携に対応してない...

Slide 34

Slide 34 text

Past auto deployment plan ▷ こんな記事を発見 ○ [Qiita] CocoaPods・Carthageでインストールした成果物はバージョ ン管理に含めるべきか? ■ http://qiita.com/mono0926/items/636819c42e96a8c4e12d ○ CarthageのビルドをCI上で行うと時間がかかるので、バージョン管 理に含めればBitriseの10 min/build制限に引っかからないので は...?

Slide 35

Slide 35 text

Past auto deployment plan ▷ ビルド時間大幅に短縮...!

Slide 36

Slide 36 text

Past auto deployment plan ▷ (再々)全体概要 Push Hook delivery (development) upload - Code signing - Provisioning - Build (production) download GitLab 外部ライブラリ含 む リポジトリclone後、すぐにリポ ジトリをビルドできる

Slide 37

Slide 37 text

“ ついに平和な日々が訪れる! と、この時は思っていた... (つづく)

Slide 38

Slide 38 text

“ - PR -

Slide 39

Slide 39 text

One more thing... ▷ ネイティブアプリエンジニアも絶賛募集中!  (募集要項にはWebエンジニアしか書いてないけど...) ○ https://www.wantedly.com/projects/37700 ▷ Techブログ開設予定! ○ http://tech.hyakuren.org/ ○ 続きはWebで!

Slide 40

Slide 40 text

ご清聴ありがとうございました 2017/3/25 SWWDC #30 asmz