65
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

fastlane導入〜コマンド一発でCrashlyticsベータアプリを配布

Last updated at Posted at 2016-02-06

アプリ配布作業にまつわる問題

テスターへの配布やApp Storeリリース版アップロードなどのアプリ配布作業は煩雑で、地味に工数がかかったり、ビルドのミス(証明書の間違い等)の原因となったりします。
現在関わっているプロジェクトではまだCIツールを導入していないのですが、配布作業の一部を自動化できないかということで、今回fastlaneの利用を検討しました。
※以下、本記事ではCircleCIのようなツールとの連携については触れません

fastlane

fastlane (Github)はiOSアプリのリリースプロセスを自動化できるツールです。
以下のように、fastlaneを使うと様々な工程を自動化することができます。

###fastlane Toolchain
※メモのため日本語に訳しました

  • deliver : スクリーンショット、メタデータ、アプリをApp Storeにアップロード
  • snapshot : アプリのスクリーンショット撮影を自動化
  • frameit : スクリーンショットを各デバイス画像にはめる
  • pem : プッシュ通知プロファイルの生成と更新
  • sigh : プロビジョニングプロファイルのダウンロード、更新、生成等
  • produce : iTunes Connectで新しいiOSアプリを作成
  • cert : code signing certificates の作成と管理
  • codes : プロモコードの作成 *deprecated
  • spaceship : iTunes ConnectやApple Dev Centerにアクセス
  • pilot : TestFlightテスターの管理
  • boarding : TestFlightテスターの招待
  • gym : アプリのビルド
  • match : Gitで証明書とプロファイルをチーム管理

今回は、deliver, sigh, gymを利用してみることにします。

セットアップ方法

公式のガイド の手順通りに進めると、すんなりインストールすることができました。
以下のコマンド以降は対話形式となっており、最低限の設定は迷わずに終わります。
$ fastlane init

サンプル

以下を行うためのFastfileのサンプルです。

  • Crashlyticsでステージング版を配布
    $ fastlane crashlytics
  • iTunes Connectへリリース版をアップロード
    $ fastlane appstore

※今回は配布先に応じて、Info.plistの内容を書き換えてみます

Fastfile
fastlane_version "1.57.0"

default_platform :ios

platform :ios do
  PLIST_PATH = "./YourApp/Info.plist"

  before_all do
    # Crashlyticsの設定
    ENV['CRASHLYTICS_API_TOKEN'] = "YOUR_API_TOKEN"
    ENV['CRASHLYTICS_BUILD_SECRET'] = "YOUR_BUILD_SECRET"
    # git statusのチェック
    ensure_git_status_clean
    # pod install
    cocoapods    
  end

  desc "Crashlyticsでグループに配布"
  lane :crashlytics do
    sigh(
      skip_install: true,
      app_identifier: "com.example.YourApp",
      development: true
    )

    # Bundle ID, Bundle display nameを変更してみる
    # ビルド後、Info.plistは変更前の状態に戻す
    backup_file(path: PLIST_PATH)
    update_info_plist(
      plist_path: PLIST_PATH,
      app_identifier: "com.example.YourApp.staging",
      display_name: "YourApp-STG"
    )
    gym(
      clean: true,
      scheme: "Staging of YourApp"
    )  
    restore_file(path: PLIST_PATH)

    crashlytics(
      crashlytics_path: "./Crashlytics.framework", # CocoaPodsでCrashlyticsをインストールした場合は"./Pods/Crashlytics/iOS/Crashlytics.framework"
      notes: "fastlaneによる配布", # リリースノート
      groups: ['your-group-alias'] # group名ではなくエイリアス
    )
  end

  desc "iTunes Connectにリリースビルドをアップロード"
  lane :appstore do
    sigh(
        skip_install: true,
        app_identifier: "com.example.YourApp",
        development: false
    )

    gym(
      clean: true,
      scheme: "Release of YourApp"
    ) 
       
    deliver(
      force: true,
      skip_screenshots: true,
      skip_metadata: true
    )
  end
end

アプリのビルド時やCrashlytics側でエラーとなった場合はコマンドラインにエラー内容が出力されるので、適宜対処します。
※実行完了時やエラー時にSlackに通知するといったことも可能です

今回はInfo.plistの書き換えのために、update_info_plist, backup_file, restore_file のアクションを使ってみました。アクションのリストは以下のコマンドで確認することができます(沢山のアクションがあります)。
$ fastlane actions

実用例(概要、Fastfileのサンプル)

  • fastlane Example Setups
    実際のサービスで使われている例。Fastfileの書き方が参考になります。
  • Fitbay Fastfile
    上記のサンプルのうち、Fabric (Crashlytics) が使われているもの。

所感

これで、コマンド一発でアプリを配布できるようになりました。OrganizerやFabricの操作を減らせて良さそうな感じがします(これまで手動だったので)。
fastlane toolsの組み合わせ次第で、細かな部分も自動化できそうです。

参考

65
57
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?