【CI/CD】BitriseでDeployGateなFlutterのAndroidとiOSをやってみる
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のビルド環境はこちら
- compileSdkVersion 28
- buildToolsVersion '28.0.3'
- minSdkVersion 21
- targetSdkVersion 28
- keystoreはそれぞれリポジトリに含む
iOSのビルド環境はこちら
- 証明書の設定はManual
- CLIは不使用
- ConfigrationはDebug,Releaseの2種類
- AdhocはReleaseで設定
- 証明書はDevelopment,Adhoc,Appstoreの3種類
- 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 Build の Android Platform Configs で、 Addtional parameters にパラメーターを追加します。
1--target-platform=android-arm64
これで64bit対応がされた.apkファイルが出力されます。
さいごに
iOSのCIビルド、もといビルドそのものは、やはり一筋縄ではいきませんね。
しかし、無料でCIビルドできるって本当に素敵ですね!
今回で、Bitriseシリーズは最終回となります。
お付き合いありがとうございました!
オススメ本
こちらの記事もオススメ!
2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
関連記事
最終的に出来上がった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
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
新潟生まれ新潟育ち本業はモバイルアプリエンジニア。 日々、猫(犬)エンジニアとして活躍中!
おすすめ記事
immichを知ってほしい
2024.10.31