AppMill
  • ESTIM
    • ESTIMの特徴
    • ESTIMの使い方
    • 発注フロー
    • リリースまでの流れ
    • パーツ(機能)一覧
  • かんたん見積
  • 活用方法
  • Q&A
    • 契約・発注について
    • 開発について
    • ESTIMについて
  • メディア
  • お問い合わせ
  • Latest
  • 画面設計書
  • 要件定義
  • インタビュー
  • ディレクター
  • 仕様書
  • オフショア開発
  • trigger 
  • Crashlytics
  • Python
  • Fabric
  • Fastfile
  • Appfile
  • bundle id
  • Production Certificates 
  • Development Certificates 
  • Provisioning profile
  • LinterBot
  • YAMLファイル
  • Github
  • .xcconfig 
  • システムの環境
  • Cocoa pod
  • Gemfile
  • Bundle
  • Fastlane
  • Swiftlint
  • Travis CI
  • IOSプロジェクト
  • CI/CD
media-background

Travis CIでiOSアプリのビルドトリガー

  • Travis CI
  • Fastlane
  • trigger 
person-image

ビン太郎

2020-07-13 16:11:10

Content

  1. 1. 前提
    1. 1.1. 要件を分析
    2. 1.2. 必要な作業は:
  2. 2. Project と Fastlaneの設定
    1. 2.1. Project
    2. 2.2. Fastlane
  3. 3. ビルドトリガー
  4. まとめ

1. 前提

a) develop ブランチへプルリクエストをマージすると、fabricで開発環境にビルドしてテスターに渡します

b) developをmasterにマージするとステージングにビルドしてからプロダクトオーナー/お客さんに渡します。

c) release/* ブランチを作成するとき、(例えば: release/build) 、本番の*.ipaファイルをビルドします(配信なし)

(Fabricにはテスターとプロダクトオーナーのグループが作成しておきます)

1.1. 要件を分析

  • 3設定の3ビルドバージョンがあります。
    • 開発
    • ステージング
    • 本番
  • CIで下記のGitHubアクティビティを追跡する
    • プルリクエスト
    • コミット
    • ブッシュブランチ
  • それぞれの環境のブランチ名を決める
    • ステージング用のmasterブランチ
    • 開発のdevelopブランチ
    • 本番用のrelease/* ブランチ

1.2. 必要な作業は:

  • こちらに作成された下記の設定でビルドできるには project と lane を再度編集します
    • 開発
    • ステージング
    • リリース
  • Travis CIの トリガー を受け取って該当のfastlaneビルドを選択します
  • トリガーを処理するコード

2. Project と Fastlaneの設定

2.1. Project

  • Xcodeでのprojectに対して設定する値を編集することが必要です。 
    • 開発 : 自動でsigningしてビルドします 
    • ステージング : 手動でビルドし、XcodeがCertificateとProvisioningを自動的に選択します
    • 本番 : ステージングと同様にします
  • #1には設定ファイルを作成方法を説明しただけですので、これから各環境の設定を説明します。下記はサンプルになります。

  • 説明
    • 開発(Debug) :iOS開発者により自動になり、CertificateとProvisioningはXcodeでの設定から受け取ります。
    • ステージング(Staging):  iOS Distributionにより手動になり、provisioningはAdHocを指定します、Certificateが外部からインポートされます。
      • ローカルには手動でクリックすると、key chainに入れます。
      • Travisマシンには手動で作成した key chainを通してコマンドでインポートします。
    • リリース にはステージングと同様にします。もしくはリリースの要望によってAppStoreの設定が必要の場合もあります。

2.2. Fastlane

  • まず、fastlaneがローカルで正常に動いているかどうかを確認します。
  • 注意点:
    • スキーム
    • 設定する値
    • エクスポート方法 
      • app-store
      • ad-hoc
      • package
      • enterprise
      • development
      • developer-id
desc "Build App AdHoc Local"
  lane :build_adhoc_local do
    make_build_folder
    build_ios_app(
      scheme: "TheLastProject_Staging", 
      workspace: "TheLastProject.xcworkspace",
      configuration: "Staging", 
      export_method: "ad-hoc",
      output_directory: "./build",
      output_name: "TheLastProject_Staging.ipa",
      silent: true,
      clean: true
    )
  end
  • ​ これからローカルにビルドしましょう。エラーとなる場合はXcodeの設定を確認してから修正してください。
bundle exec fastlane build_adhoc_local
  • Certificate(development & distribution) を端末にインポートすることが必要になります。ターミナルは下記のように表示されたら設定が正しいです。

  • 他の設定にも導入します。
  • CIマシンのビルドをFastlane にします。下記のコードを参考して自分の設定を確認してください。
    • ステージングビルド
desc "Build Staging"
  lane :build_staging do
    make_build_folder
    disable_automatic_code_signing(
      path: "TheLastProject.xcodeproj"
    )
    import_certificate(
      keychain_name: "ios-build.keychain",
      keychain_password: ENV["KEYCHAIN_PASS"],
      certificate_path: "./scripts/certs/dis.p12",
      certificate_password: ENV["CERT_PASS"]
    )
    update_project_provisioning(
      xcodeproj: "TheLastProject.xcodeproj",
      profile: "./scripts/profiles/TheLastProject_AdHoc.mobileprovision",
      target_filter: "TheLastProject",
      build_configuration: "Staging",
    )
    build_ios_app(
      scheme: "TheLastProject_Staging", 
      workspace: "TheLastProject.xcworkspace",
      configuration: "Staging", 
      export_method: "ad-hoc",
      output_directory: "./build",
      silent: true,
      clean: true,
      skip_profile_detection: true,
      export_options: {
        provisioningProfiles: { "com.fx.thelastproject": "TheLastProject_AdHoc" }
      }
    )
    create_release_notes(format: 'Appstore: %h %s')
    upload_fabric(groups: "staging")
    enable_automatic_code_signing(
      path: "TheLastProject.xcodeproj"
    )
  end

 

  • リリースビルド
desc "Build Release"
  lane :build_release do
    make_build_folder
    disable_automatic_code_signing(
      path: "TheLastProject.xcodeproj"
    )
    import_certificate(
      keychain_name: "ios-build.keychain",
      keychain_password: ENV["KEYCHAIN_PASS"],
      certificate_path: "./scripts/certs/dis.p12",
      certificate_password: ENV["CERT_PASS"]
    )
    update_project_provisioning(
      xcodeproj: "TheLastProject.xcodeproj",
      profile: "./scripts/profiles/TheLastProject_AdHoc.mobileprovision",
      target_filter: "TheLastProject",
      build_configuration: "Release",
    )
    build_ios_app(
      scheme: "TheLastProject_Release", 
      workspace: "TheLastProject.xcworkspace",
      configuration: "Release", 
      export_method: "ad-hoc",
      output_directory: "./build",
      silent: true,
      clean: true,
      skip_profile_detection: true,
      export_options: {
        provisioningProfiles: { "com.fx.thelastproject": "TheLastProject_AdHoc" }
      }
    )
    create_release_notes(format: 'Appstore: %h %s')
    upload_fabric(groups: "release")
    enable_automatic_code_signing(
      path: "TheLastProject.xcodeproj"
    )
  end

CIマシンに正しく実行しなくても大丈夫です。エラーを一つずつ修正します。全部OKになってから次にしましょう。

3. ビルドトリガー

  • CIマシンがビルド設定を自動的に洗濯してビルドできるために、下記の情報が処理する必要があります。
- ブランチ名
- インタラクティブタイプ
 - コミット
 - プッシュ
 - プルリクエスト
 - マージ
  • これらの情報はTravisが環境変数(environment-variables)で共有しています。こちらに参照してください。
  • Travisの設定する値を確認します。
    • Build pushed branches : on
    • Build pushed pull requests : on
  • ブランチに正しくプルリクエストして、確認しましょう。
    • developは開発環境のためにビルドする 
    • master はステージング環境のためにビルドする
  •  .travis.yml ファイルを開いて下記のスクリプトを編集します。
script:
  - ./scripts/lint
  - if [[ "$TRAVIS_BRANCH" == "develop" ]]; then bundle exec fastlane build_dev; fi
  • ​  develop ブランチを作成し、コードをコミットします
  • 上記のスクリプトは:
    • 環境変数を使用します
    •  if で条件確認します。
    • masterブランチでも同様で使えます。
  • ただ、リリース環境用のビルドの場合はrelease/* ブランチを作成するときに Travisが自動に実行し、ビルドします。下記の作業が必要です。
    • ブランチ名を正しく認証します
    • 文字列の処理でreleaseの単語があるか確認します。
    • 参照 : https://stackoverflow.com/questions/2172352/in-bash-how-can-i-check-if-a-string-begins-with-some-value
  • 現状のブランチ名をとるにはのBashを使ってもいいと思います・
script:
  - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
  - echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
  • 条件や変数が揃ったらアプリビルド用のスクリプトを書きましょう。下記は参照のコードです。こちらは runを名称としてBashシェルファイルを作成します。
    • current branchを取得 
    • 文字列を処理
    • 念のため、このスクリプトをローカルで実行して見た方がいいと思いますす。(ビルドのコマンドを決してechoのコマンドを残します)
#Log debug branch
BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
 
if [ "$TRAVIS_BRANCH" == "develop" ]
then
  echo "********** BUILD DEV **********"
  bundle exec fastlane build_dev
elif [ "$TRAVIS_BRANCH" == "master" ]
then
  echo "********** BUILD STAGING **********"
  bundle exec fastlane build_staging
elif [[ "$TRAVIS_BRANCH" == "release"* ]]
then
  echo "********** BUILD RELEASE **********"
  bundle exec fastlane build_release
else
  echo "NOTHING"
fi
  • OKになったらコードをコミットし、最初の要件の通りに実施して見ましょう。
    •  develop ブランチを作成、これから子ブランチを作成、編集してからプルリクエストを実行します
    •  Develop をmasterにマージします
    • masterからrelease/* ブランチを作成します
  • Fabricに該当のビルドバージョンがアップロードされたかどうかを確認します。エラーがある場合はまた順番に修正しましょう。
  • 次にやって見たい作業はいくつがあります:
    • コードをキレイにします
    • マトリクスビルド
    • 他のCIサービスを設定します

まとめ

  • iOSプロジェクトの様々な設定に応じて fastlaneがビルドできるように仕組みを作ります。
  • Travis CIがビルドタイミングとどの環境にビルドが必要かを判断できるには該当なトリガーを作成します。
  • 該当の環境に自動的にビルドするようにCIを設定します。
  • Travis CI
  • Fastlane
  • trigger 

関連記事

  • images-author ビン太郎

    FabricでiOSアプリケーションをデプロイする

    2020-07-13 16:10:20
  • images-author ビン太郎

    Fastlaneの概観

    2020-07-13 16:09:18
  • images-author ビン太郎

    CI上でCertificateとProvisioning Profileを設定します

    2020-07-13 16:09:17
  • 運営会社

    • 株式会社Enlyt
    • Tel : 03-6555-3667
    Enlyt公式サイト
    • ESTIMの特徴
    • ESTIMの使い方
    • 発注フロー
    • リリースまでの流れ
    • パーツ(機能)一覧
    • かんたん見積
    • 活用方法
    • メディア
    • 契約・発注について
    • 開発について
    • ESTIMについて
ESTIM
  • ESTIM
  • かんたん見積
  • 活用方法
  • Q&A
  • メディア
お問い合わせ
  • All Right Reserved
  • Privacy Policy