15
12

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 3 years have passed since last update.

Flutterで作ったアプリをfastlane+App Distributionで配信する(iOS編)

Last updated at Posted at 2019-12-18

開発以外のメンバーに実機テストをしてもらう場合にTestFlightだけで配信してたけど、流石に面倒なのと、ステージング環境用にビルドしたアプリを本番用とは別アプリとして配信したいので、App Distributionで配信することにした。
ひとまずローカル環境でfastlaneを使ってApp Distributionに配信できるようにしたので、備忘録。

#1.環境を分けてビルド
基本的には@mono0926さんの記事で大体できるはず。とても丁寧に書かれていて、ありがとうございます。
Flutterで環境ごとにビルド設定を切り替える — iOS編

1個注意点として、ステージング用に別アプリにする場合、Identifiersをそれ用に用意しないといけない。
例えば、com.test.appが本番用だとして、com.test.app.stgみたいなIdentifiersをAppleDeveloperで作成しておく必要がある。普段iOS開発してると当たり前かもだけど、そうじゃないと忘れがち。

#2.fastlaneのインストール
fastlane周りの設定を行う。


$ sudo gem install fastlane -NV

gemでインストールしようとしたところ、Failed to build gem native extension.のエラーが出てインストールできなかった。色々調べて、行ったことは以下。

  • $ xcode-select --install
  • AppleDevelopersからCommand Line Toolsをダウンロード(バージョンはmacOS_10.14_for_Xcode_10.3)してインストール
  • $ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
  • rbenvでRubyのバージョンを更新(2.3.0 -> 2.6.5)

こんな感じでなんとかfastlaneのインストールと実行ができるようになった。

#3.Fastfileを作る
Flutterの公式ドキュメントを参考にしつつ、fastlaneの設定をする。


$ flutter build ios --release --flavor staging --target lib/main_staging.dart
$ cd ios
$ fastlane init

fastlane/Fastfilefastlane/Appfileができるので、Appfileのapp_identifierteam_idapple_idを確認する。
TestFlightにアップしたい場合はFASTLANE_PASSWORDの環境変数にiTunesConnectのパスワードを設定しておく。

iOS側のFastfileはこんな感じ。今回はステージング環境用のビルドなのでschemeはStagingを指定している。


fastlane_version "2.28.3"

default_platform :ios

platform :ios do

  desc "Submit a new Staging Build to Firebase AppDistribution"
  lane :staging do
    gym(
      scheme: "Staging",
      export_options: {
        method: "ad-hoc"
      }
    )

  end

end

これで下記のコマンドでipaファイルを出力できるようになる。

$ fastlane staging

##4.Firebase App Distributionにアップする
ipaは作れるようになったので、次はApp Distributionにアップできるようにしていく。
まずはプラグインの追加。Gemfileを作るか聞かれるので、yと答えておく。

$ fastlane add_plugin firebase_app_distribution
[✔] 🚀 
[17:42:46]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[17:42:47]: Plugin 'fastlane-plugin-firebase_app_distribution' was added to './fastlane/Pluginfile'
[17:42:47]: It looks like fastlane plugins are not yet set up for this project.
[17:42:47]: fastlane will create a new Gemfile at path 'Gemfile'
[17:42:47]: This change is necessary for fastlane plugins to work
[17:42:47]: Should fastlane modify the Gemfile at path 'Gemfile' for you? (y/n)
y
[17:43:00]: Successfully modified 'Gemfile'
[17:43:00]: Make sure to commit your Gemfile, Gemfile.lock and Pluginfile to version control
Installing plugin dependencies...
Successfully installed plugins

これで、GemfileGemfile.lockfastlane/Pluginfileが作成される。あとはFastfileにfirebase_app_distributionのアクションを追加する。



fastlane_version "2.28.3"

default_platform :ios

platform :ios do

  desc "Submit a new Staging Build to Firebase App Distribution"
  lane :staging do
    gym(
      scheme: "Staging",
      export_options: {
        method: "ad-hoc"
      }
    )
+    firebase_app_distribution(
+      app: "(Firebase上のアプリ ID)",
+      groups: "dev",
+      release_notes: "from fastlane",
+      firebase_cli_path: `which firebase`.strip()
+    )

  end

end

appにはFirebaseのアプリIDを指定する。Settingsから確認することができる。
groupsはApp Distributionでのテスターのグループを指定する。
あとは、firebase_app_distributionの実行にfirebase-toolsのバージョン7.4.0以上が必要なので、インストールする。今回はローカルからのアップなので、Firebaseへのログインもしておく。

$ npm install -g firebase-tools
$ firebase login

firebase loginするとブラウザでログイン画面が開かれるので、アカウントを選んでログインする。ちなみにCI等で実行する場合はfirebase login:ciで取得したトークンをFIREBASE_TOKENの環境変数に設定すると良いらしい。

以上で準備は整ったので、fastlaneを実行する。Gemfileを作ったので、bundle execから起動する。

$ bundle exec fastlane staging

##おわり
以上でApp Distributionでアプリが配信されるようになる。
今回はローカルでやったので、署名周りをflutter側で行ったけど、この辺りもfastlaneに任せてGithub ActionsでCDできるようにしたいところ。

##参考記事

15
12
2

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
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?