SWWDC 30

43ce16de3a74c75adc7dfd6194801452?s=47 asmz
March 26, 2017

SWWDC 30

試行錯誤してたどり着いた現在のiOSアプリ自動デプロイ環境

Talked at SWWDC #30

43ce16de3a74c75adc7dfd6194801452?s=128

asmz

March 26, 2017
Tweet

Transcript

  1. 2.

    Who are you? ▷ Akira Shimizu / asmz(@_asmz) ▷ 株式会社百戦錬磨 エンジニア

    ▷ 奥さん1人、子供1人(2歳) ▷ 岩手県陸前高田市出身 ▷ 新卒から12年半東京に勤め、 2016/8より仙台にJターン ▷ 仙台市若林区荒井在住
  2. 4.

    What are you doing? ▷ 株式会社百戦錬磨とは? ◦ 「旅行×ICT」をフィールドとしたベンチャー企業 ◦ 仙台オフィス:仙台市青葉区本町2丁目

    ▪ 主にエンジニア部隊 ◦ 東京、大阪、沖縄、三戸に拠点 ▪ 営業、マーケティング部隊 ▪ エンジニア、デザイナー若干
  3. 7.

    Deploy for iOS App ▷ みなさまご存知の通り結構厄介ですよね... ◦ Certificates、App ID、UDID、Provisioning Profileの準備

    ◦ Code Signing、Provisioning ◦ Debugビルド、実機インストール ◦ AdHocビルド、実機インストール ◦ Releaseビルド、iTunesConnectへアップロード ◦ TestFlightでテスト ◦ 審査提出 ▷ 複数人での開発や大勢のテスターへ配布が必要だと...
  4. 9.

    Planning auto deployment ▷ CIサービス ◦ Bitrise ▷ 証明書、ProvisioningProfileの導入 ◦

    fastlane match ▷ iOSアプリのビルド ◦ fastlane gym ▷ ベータ版アプリの配布 ◦ Crashlytics Beta ▷ 製品版アプリの配布 ◦ fastlane deliver
  5. 10.

    Planning auto deployment ▷ 全体概要 Push Hook delivery (development) upload

    - Code signing - Provisioning - Build (production) download GitLab
  6. 11.

    Planning auto deployment ▷ fastlaneとは? ◦ https://fastlane.tools/ ◦ モバイルアプリ開発支援ツール群 「Fabric

    ( https://get.fabric.io/ )」の1 つ ◦ iOS/Androidのデプロイ作業を行え る各種コマンドをまとめたもの ◦ lane(レーン)という単位でコマンドの 進行管理を行う
  7. 12.

    Planning auto deployment ▷ fastlaneの主なコマンド ◦ match ▪ 証明書、Provisioning Profileの管理、Keychainへのインポート

    ▪ 別途Gitリポジトリを用意し、iTunesConnectに共有アカウントを用意 することで、そのアカウントで証明書やProvisioning Profileを作成・更 新する →Mac依存しないため複数人開発に便利 Gitリポジトリ (private)
  8. 13.

    Planning auto deployment ▷ fastlaneの主なコマンド ◦ gym ▪ アプリのビルド、Code Signing

    ▪ ipaファイルの生成だけでなく製品版Archive作成も行える ◦ deliver ▪ iTunesConnectへのアップロードを行う
  9. 14.

    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
  10. 15.

    Planning auto deployment ▷ Crashlyticsとは? ◦ http://try.crashlytics.com/ ◦ モバイルアプリ開発支援ツール群「Fabric (

    https://get.fabric.io/ )」の1つ ◦ Crashlytics本体はクラッシュレポート管理ツール、内包される「Beta」は ベータ版アプリの配布ツール
  11. 16.

    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 :
  12. 17.

    Planning auto deployment ▷ Bitriseとは? ◦ https://www.bitrise.io/ ◦ モバイルアプリ開発(Android/iOS/Xamarin)に特化したCIサービス ◦

    Gitリポジトリサービス(Github、Bitbucket、Gitlabなど)へのPushや MergeをHookして、ビルドを実行することが可能 ◦ 標準でiOSのビルド機能などありつつ、先述したfastlaneやCrashlyticsな どとも連携して使用可能
  13. 19.

    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 にてテスターへベータ版配布
  14. 20.

    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申請
  15. 21.

    Planning auto deployment ▷ (再)全体概要 Push Hook delivery (development) upload

    - Code signing - Provisioning - Build (production) download GitLab
  16. 24.

    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
  17. 27.

    Past auto deployment plan ▷ 無料プランなし ▷ 最安で$39/月 ◦ 1-5

    builds/day ?? ▷ 次プラン$129/月 ◦ 値段一気に上がる ◦ 5-10 builds/day
  18. 28.

    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
  19. 29.

    Past auto deployment plan ▷ 無料プラン ◦ 10 min /

    build ▪ 開発が進んでくるとこれが 結構きつい ▪ 外部ライブラリはリポジトリ 管理から外していたので、 CI上でclone後のCarthage ライブラリのビルドで結構な 時間使う
  20. 30.

    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
  21. 31.

    Past auto deployment plan ▷ 無料プラン ◦ 20 min /

    build ◦ カスタマイズ幅が少ない ▪ fastlane使用できずCI独 自の仕組みでビルド ◦ キューイングが頻発 ▪ 3時間待ちとか...
  22. 33.

    Past auto deployment plan ▷ 一旦は有料版を検討 ◦ buddybuildのキューイングは、有料版なら優先されるのでそんな に引っかからないと思われる ◦

    でもfastlane使いたい(CIの仕組みに依存したくない)ので、お金払 うならBitriseの有料版か? ◦ 転職してGithubじゃなくGitlabになったので、CircleCIやTravisCI はGitlabとの連携に対応してない...
  23. 34.

    Past auto deployment plan ▷ こんな記事を発見 ◦ [Qiita] CocoaPods・Carthageでインストールした成果物はバージョ ン管理に含めるべきか?

    ▪ http://qiita.com/mono0926/items/636819c42e96a8c4e12d ◦ CarthageのビルドをCI上で行うと時間がかかるので、バージョン管 理に含めればBitriseの10 min/build制限に引っかからないので は...?
  24. 36.

    Past auto deployment plan ▷ (再々)全体概要 Push Hook delivery (development)

    upload - Code signing - Provisioning - Build (production) download GitLab 外部ライブラリ含 む リポジトリclone後、すぐにリポ ジトリをビルドできる