• トップ
  • ブログ一覧
  • 【CI/CD】BitriseでDeployGateなFlutterのAndroidとiOSをやってみる
  • 【CI/CD】BitriseでDeployGateなFlutterのAndroidとiOSをやってみる

    笹川(エンジニア)笹川(エンジニア)
    2019.07.02

    IT技術

    第3弾~はじめに~

    秋山笹川先生

    (株)ライトコードの笹川(ささがわ)です!

    CIシリーズ第3弾です!

    引き続きBitriseの使い方を紹介いたします。

    ちなみに、今回がBitriseシリーズ最後です!

    今回は、クロスプラットフォームのFlutterでAndroidとiOSそれぞれをDeployGateにデプロイしてみます。

    前回の記事 :【CI/CD】BitriseでDeployGateなiOSをFastlane matchでやってみる
    前々回の記事:【CI/CD】BitriseでDeployGateをAndroidでやってみる

    早速設定を始めてみましょう

    Flutterのビルド環境はこちら

    1$ flutter doctor
    2Doctor summary (to see all details, run flutter doctor -v):
    3[] Flutter (Channel stable, v1.5.4-hotfix.2, on Mac OS X 10.14.5 18F132, locale ja-JP)
    4[] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    5[] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
    6[] Android Studio (version 3.4)
    7[] IntelliJ IDEA Community Edition (version 2018.3.2)
    8[] Connected device (2 available)

    Androidのビルド環境はこちら

    1. compileSdkVersion 28
    2. buildToolsVersion '28.0.3'
    3. minSdkVersion 21
    4. targetSdkVersion 28
    5. keystoreはそれぞれリポジトリに含む

    iOSのビルド環境はこちら

    1. 証明書の設定はManual
    2. CLIは不使用
    3. ConfigrationはDebug,Releaseの2種類
    4. AdhocはReleaseで設定
    5. 証明書はDevelopment,Adhoc,Appstoreの3種類
    6. Xcodeは10.2.1

    設定してみる

    今回は、公式ドキュメントを参考に進めていきます。

    【公式ドキュメント】
    https://devcenter.bitrise.io/getting-started/getting-started-with-flutter-apps/

    しかし、毎度のごとくうまくいきません

    署名エラーを対応する

    1+------------------------------------------------------------------------------+
    2
    3| (5) flutter-build@0.9.2                                                      |
    4+------------------------------------------------------------------------------+
    5| id: flutter-build                                                            |
    6| version: 0.9.2                                                               |
    7| collection: https://github.com/bitrise-io/bitrise-steplib.git                |
    8| toolkit: go                                                                  |
    9| time: 2019-06-01T05:05:11Z                                                   |
    10+------------------------------------------------------------------------------+
    11|                                                                              |
    12Config:
    13- IOSAdditionalParams: --degug
    14- AndroidAdditionalParams: --degug --target-platform=android-arm64
    15- Platform: both
    16- IOSExportPattern: *build/ios/iphoneos/*.app
    17- AndroidExportPattern: *build/app/outputs/apk/*/*.apk
    18- IOSCodesignIdentity: 
    19- ProjectLocation: /Users/vagrant/git
    20iOS Codesign settings
    21 Installed codesign identities:
    22 - No codesign identities installed
    23|                                                                              |
    24+---+---------------------------------------------------------------+----------+
    25| x | flutter-build@0.9.2 (exit code: 1)                            | 4.19 sec |
    26+---+---------------------------------------------------------------+----------+
    27| Issue tracker: ...thub.com/bitrise-steplib/bitrise-step-flutter-build/issues |
    28| Source: https://github.com/bitrise-steplib/bitrise-step-flutter-build        |
    29+---+---------------------------------------------------------------+----------+

    これは、iOSのエラーですね。

    前回の記事でも、署名エラーでp12ファイルをアップロードして解決したので同じように対応します。

    プロビジョニングプロファイルのエラーを対応する

    これは、完全に笹川のミスなのですが、matchなどプロビジョニングプロファイルの署名周りの設定を入れていませんでした

    こちらは、p12ファイルと同様にそれぞれプロビジョニングプロファイルをアップロードします。

    Workflow Editor → Code Signing → PROVISIONING PROFILE

    これで、署名/証明書関連のアップロードは終わりになります。

    忘れずに Workflow に Certificate and profile installer を追加しておいてください。

    iOSのDeployGateアップロード失敗に対応する

    こちらを DeployGate にアップロードする際に、パス指定を$BITRISE_APP_DIR_PATH としましたがアップロードに失敗しました

    1+------------------------------------------------------------------------------+
    2
    3| (7) deploygate--upload-app-bitrise-step@1.0.1                                |
    4+------------------------------------------------------------------------------+
    5| id: deploygate--upload-app-bitrise-step                                      |
    6| version: 1.0.1                                                               |
    7| collection: https://github.com/bitrise-io/bitrise-steplib.git                |
    8| toolkit: bash                                                                |
    9| time: 2019-06-07T07:52:34Z                                                   |
    10+------------------------------------------------------------------------------+
    11|                                                                              |
    12INFO[07:52:34]  * [OK] Step dependency (curl) installed, available. 
    13+ upload_app
    14+ set +ex
    15curl: (26) couldn't open file "/Users/vagrant/git/build/ios/iphoneos/Runner.app"
    16+ return 0
    17+ envman add --key DEPLOYGATE_UPLOAD_APP_STEP_RESULT_JSON
    18++ cat output.json
    19++ parse_error_field
    20++ cat -
    21++ ruby -rjson -ne 'puts JSON.parse($_)["error"]'
    22+ [[ '' == \f\a\l\s\e ]]
    23+ cat output.json
    24+ exit 1
    25|                                                                              |
    26+---+---------------------------------------------------------------+----------+
    27| x | deploygate--upload-app-bitrise-step@1.0.1 (exit code: 1)      | 3.14 sec |
    28+---+---------------------------------------------------------------+----------+
    29| Issue tracker: https://github.com/DeployGate/upload-app-bitrise-step/issues  |
    30| Source: https://github.com/DeployGate/upload-app-bitrise-step                |

    デフォルトでFlutterビルドで生成されるのは、.appファイルです。

    .ipaファイルを生成するコマンドはないようです。

    そのため、こちらの記事を参考にScriptを設定します。

    Flutter アプリを Bitrise で DeployGate に自動アップロード

    これで、.ipaファイルが生成されるようになりました。

    DeployGateアップロードのファイルパスを、$FLUTTER_IPA_PATH へ忘れずに設定してください。

    Artifactsにipaファイルが保存されないのを対応する

    DeployGateへのアップロード対応でipaを出力するようにしましたが、このままだとArtifactsとして保存されませんのでその対応をします。

    こちらは、先程の手順で追加したScriptに1行追加するだけです。

    1cp ${BITRISE_SOURCE_DIR}/build/ios/iphoneos/Runner.ipa $BITRISE_DEPLOY_DIR

    これで、Bitriseを利用したFlutterのDeployGateでのデプロイが完了となります。

    Androidの64bitビルドを対応する

    昨今、話題になっているAndroidの64bit対応ですが、Flutterでは通常のビルドでは64bit対応されません

    Workflow の Flutter BuildAndroid Platform Configs で、 Addtional parameters にパラメーターを追加します。

    1--target-platform=android-arm64

    これで64bit対応がされた.apkファイルが出力されます。

    さいごに

    秋山笹川先生

    iOSのCIビルド、もといビルドそのものは、やはり一筋縄ではいきませんね。

    しかし、無料でCIビルドできるって本当に素敵ですね!

    今回で、Bitriseシリーズは最終回となります。

    お付き合いありがとうございました!

    オススメ本

    iOSアプリ開発自動テストの教科書 〜XCTestによる単体テスト・UIテストから,CI/CD,デバッグ技術まで
    iOSアプリ開発自動テストの教科書 〜XCTestによる単体テスト・UIテストから,CI/CD,デバッグ技術まで

     

    こちらの記事もオススメ!

    featureImg2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    関連記事

    featureImg2019.06.18【CI/CD】BitriseでDeployGateをAndroidでやってみた第1弾~はじめに~笹川先生(株)ライトコードの笹川(ささがわ)です!弊社ブログの中で、あまりCIについて触れているもの...

    featureImg2019.06.20【CI/CD】BitriseでDeployGateなiOSをFastlane matchでやってみる第2弾~はじめに~笹川先生(株)ライトコードの笹川(ささがわ)です!CIシリーズ第2弾です!引き続き、Bitriseの...

    featureImg2019.07.02【CI/CD】BitriseでDeployGateなFlutterのAndroidとiOSをやってみる第3弾~はじめに~笹川先生(株)ライトコードの笹川(ささがわ)です!CIシリーズ第3弾です!引き続きBitriseの使...

    最終的に出来上がったymlファイル

    1---
    2format_version: '7'
    3default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
    4project_type: flutter
    5trigger_map:
    6- push_branch: develop
    7  workflow: debug-deploy
    8- pull_request_source_branch: "*"
    9  workflow: debug-deploy
    10workflows:
    11  debug-deploy:
    12    steps:
    13    - activate-ssh-key@4.0.3:
    14        run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
    15    - git-clone@4.0.14: {}
    16    - cache-pull@2.0.1: {}
    17    - certificate-and-profile-installer@1.10.1: {}
    18    - flutter-build@0.9.2:
    19        inputs:
    20        - android_additional_params: "--debug --target-platform=android-arm64"
    21        - ios_additional_params: "--debug"
    22    - script@1.1.5:
    23        inputs:
    24        - content: |-
    25            #!/usr/bin/env bash
    26            cd build/ios/iphoneos
    27            mkdir -p Payload
    28            mv Runner.app Payload/
    29            zip -ry Runner.ipa Payload
    30
    31            envman add --key FLUTTER_IPA_PATH --value "${BITRISE_SOURCE_DIR}/build/ios/iphoneos/Runner.ipa"
    32
    33            cp ${BITRISE_SOURCE_DIR}/build/ios/iphoneos/Runner.ipa $BITRISE_DEPLOY_DIR
    34    - deploygate--upload-app-bitrise-step@1.0.1:
    35        inputs:
    36        - api_key: "$DEPLOYGATE_API_KEY"
    37        - owner_name: "$DEPLOYGATE_NAME"
    38        - app_path: "$BITRISE_APK_PATH"
    39    - deploygate--upload-app-bitrise-step@1.0.1:
    40        inputs:
    41        - api_key: "$DEPLOYGATE_API_KEY"
    42        - owner_name: "$DEPLOYGATE_NAME"
    43        - app_path: "$FLUTTER_IPA_PATH"
    44    - deploy-to-bitrise-io: {}
    45    - cache-push@2.2.0: {}
    46app:
    47  envs:
    48  - opts:
    49      is_expand: false
    50    BITRISE_FLUTTER_PROJECT_LOCATION: "."
    51  - opts:
    52      is_expand: false
    53    BITRISE_PROJECT_PATH: ios/Runner.xcworkspace
    54  - opts:
    55      is_expand: false
    56    BITRISE_SCHEME: Runner
    57  - opts:
    58      is_expand: false
    59    BITRISE_EXPORT_METHOD: development
    60  - opts:
    61      is_expand: false
    62    DEPLOYGATE_NAME: "{user name}"
    63  - opts:
    64      is_expand: false
    笹川(エンジニア)

    笹川(エンジニア)

    おすすめ記事