FlutterでbitriseでDeploygateでCI/CD

# そのままは無理

BitriseはFlutterをサポートしているとはいえ、ipaを出力する方法がflutterコマンドにない。
そのため、それぞれのプラットフォームのやり方をやるしかない。

`fastlane build ios --release` とかはどうあがいてもipa作れなかったので、結局fastlaneで設定するのがその後のためにもいい。

# fastlane

結局いつものコレ。
fastlane initしてできたのを以下のように編集。

```
# AppFile

app_identifier("xxxxxx") # The bundle identifier of your app
apple_id("xxxxxxx") # Your Apple email address

itc_team_id("xxxxx") # App Store Connect Team ID
team_id("xxxxx") # Developer Portal Team ID

# For more information about the Appfile, see:
#     https://docs.fastlane.tools/advanced/#appfile

```

```
# FastFile

# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:ios)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :beta do
    sigh(force: false, adhoc: true)
    gym()
    deploygate(
      api_token: 'xxxxxx', 
      user: 'adriablue', 
      message: "Fastlane build #{lane_context[SharedValues::BUILD_NUMBER]}",
    )
  end
end

```

```
# GymFile

scheme("Runner")

clean(true)
export_options({
  method: "ad-hoc",
})
export_xcargs("-allowProvisioningUpdates")
output_directory("./build")    # store the ipa in this folder

```

おそらくなくても良い設定とかもある。もりもりで検証で入れているのもある。
これで fastlane beta で動く。まずはローカルで動くのを確認しましょう。

## ビルド時のエラー

> /bin/sh: /packages/flutter_tools/bin/xcode_backend.sh: No such file or directory

ほほう。flutterでのプロジェクト作成時に自動で作られたworkspaceの設定の環境変数 FLUTTER_ROOT がないことが問題。

パスとしては /Users/vagrant/Library/flutter に入るので、これをEnv Varsに入れる。


## Bitrise

```yml

---
format_version: '6'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
project_type: flutter
trigger_map:
- push_branch: "*"
  workflow: primary
- pull_request_source_branch: "*"
  workflow: primary
workflows:
  deploy:
    steps:
    - activate-ssh-key@4.0.3:
        run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
    - git-clone@4.0.14: {}
    - script@1.1.5:
        title: Do anything with Script step
    - certificate-and-profile-installer@1.10.1: {}
    - flutter-installer@0.9.2: {}
    - flutter-test@0.9.1:
        inputs:
        - project_location: "$BITRISE_FLUTTER_PROJECT_LOCATION"
    - flutter-build@0.9.1:
        inputs:
        - project_location: "$BITRISE_FLUTTER_PROJECT_LOCATION"
    - xcode-archive@2.4.18:
        inputs:
        - project_path: "$BITRISE_PROJECT_PATH"
        - scheme: "$BITRISE_SCHEME"
        - export_method: "$BITRISE_EXPORT_METHOD"
        - configuration: Release
    - deploy-to-bitrise-io@1.3.19: {}
  primary:
    steps:
    - activate-ssh-key@4.0.3:
        run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
    - git-clone@4.0.14: {}
    - certificate-and-profile-installer@1.10.1: {}
    - flutter-installer@0.9.2: {}
    - flutter-build@0.9.1:
        inputs:
        - platform: ios
    - cocoapods-install@1.7.2:
        inputs:
        - source_root_path: "$BITRISE_SOURCE_DIR/ios"
    - fastlane@2.3.12:
        inputs:
        - work_dir: "$BITRISE_SOURCE_DIR/ios"
        - lane: beta
    - deploygate--upload-app-bitrise-step@1.0.1:
        inputs:
        - owner_name: adriablue
        - app_path: "$FLUTTER_IPA_PATH"
        - api_key: "$DEPLOYGATE_API_KEY"
    - slack@3.1.2:
        is_always_run: false
        inputs:
        - webhook_url: "$slack_incomming_url"
app:
  envs:
  - opts:
      is_expand: false
    BITRISE_FLUTTER_PROJECT_LOCATION: "."
  - opts:
      is_expand: false
    BITRISE_PROJECT_PATH: ios/Runner.xcworkspace
  - opts:
      is_expand: false
    BITRISE_SCHEME: Runner
  - opts:
      is_expand: false
    BITRISE_EXPORT_METHOD: ad-hoc
  - opts:
      is_expand: false
    DEPLOYGATE_USER: adriablue
  - opts:
      is_expand: false
    FLUTTER_ROOT: "/Users/vagrant/flutter-sdk/"
  - opts:
      is_expand: false
    FLUTTER_IPA_PATH: "/Users/vagrant/git/ios/build/Runner.ipa"

```

- 設定している環境変数はこんな感じ。あとはPasswordにdeploygate, fastlaneのパスワードなどを入れる。
あとはiosのプロジェクト側でCode SigningをAutomaticじゃなくてManualにした。
- workflowでFlutterのタスクはいろいろあるんだけど、 `Flutter` じゃなくて `Flutter Build` じゃないとsixのライブラリがなくてビルドできない。でも `Flutter` の方にもbuildができる引数があるので注意


これでFlutterでもBitriseで動く。まる2日くらいかかったぞ・・・