遵循Flutter的持续交付(CD)最佳实践,以确保将您的应用程序交付给Beta测试人员并定期进行测试,而无需手动操作。
快车道
本教程向您展示如何将Fastlane(一种开源工具包)集成到现有的测试和持续集成(CI)工作流程中,例如Travis或Cirrus。
本地设置
强烈建议在移至云之前在本地测试构建和部署过程。您还可以从本地计算机实施连续部署。
- 安装fastlane:
gem install fastlane
或brew install fastlane
。有关更多详细信息,请访问Fastlane文档。 - 创建一个Flutter项目,准备好后,请确保使用
-
flutter build appbundle
; 和 -
flutter build ios --release --no-codesign
...
-
- 为每个平台初始化Fastlane项目。
-
fastlane init
[project]/android
. -
fastlane init
[project]/ios
.
-
- ,
Appfile
.
- ,
package_name
[project]/android/fastlane/Appfile
AndroidManifest.xml
. - ,
[project]/ios/fastlane/Appfile
Info.plist
.apple_id
,itc_team_id
,team_id
.
- ,
- .
- Supply ,
fastlane supply init
Play Store . .json - . - ITunes Connect
Appfile
apple_id
.FASTLANE_PASSWORD
iTunes Connect. iTunes/TestFlight.
- Supply ,
- .
- Android : . .apk, « ». « » .aab/.apk, Play Store, Play Store.
- , . . Play Store.
- .
- gradle release,
android.buildTypes.release
[project]/android/app/build.gradle
.
- iOS, TestFlight App Store, , .
- Apple Developer Account.
-
[project]/ios/Runner.xcworkspace/
.
- Android : . .apk, « ». « » .aab/.apk, Play Store, Play Store.
-
Fastfile
.
- 对于Android,请遵循Fastlane Android Beta部署指南。所有的编辑可以只是一个另外
lane
的呼叫upload_to_play_store
。将参数aab
设置../build/app/outputs/bundle/release/app-release.aab
为使用flutter build
已准备好的程序包。 - 对于iOS,请遵循Fastlane iOS beta部署指南。所有的编辑可以简单的增加
lane
,这就要求build_ios_app
有export_method: 'app-store'
和upload_to_testflight
。在iOS上,将需要额外的构建,因为它是flutter build
构建的.app
而不是.ipas
要发布的存档。
- 对于Android,请遵循Fastlane Android Beta部署指南。所有的编辑可以只是一个另外
现在,您准备好本地部署或将部署迁移到持续集成(CI)系统。
本地部署
- release.
-
flutter build appbundle
. -
flutter build ios --release --no-codesign
. , fastlane .
-
- Fastfile .
-
cd android
,fastlane [ lane]
. -
cd ios
,fastlane [ lane]
.
-
首先,请按照“本地设置”部分中描述的“本地设置”部分中的说明进行操作,以确保在移至Travis之类的云系统之前,该过程正常运行。
需要注意的主要事情是,由于云实例是短暂且不可靠的,因此您不应在服务器上保留凭据(例如Play Store服务帐户的JSON或iTunes分发证书)。
像Cirrus这样的持续集成(CI)系统通常支持加密的环境变量来存储私有数据。
采取一切预防措施,不要在测试脚本中将这些变量的值打印到控制台。在合并请求之前,这些变量也不应在请求请求中可用,以使攻击者无法创建将窃取这些机密的请求请求。在您接受并合并的请求请求中与这些机密进行交互时,请务必小心。
- 使凭据短暂。
- 在Android上:
json_key_file
从Appfile
CI系统中删除字段并将JSON字符串的内容存储在加密变量中。使用参数json_key_data
中upload_to_play_store
直接读取环境变量到你Fastfile
。- (, base64) . CI
-
echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > /home/cirrus/[directory # , gradle].keystore
- iOS:
-
FASTLANE_PASSWORD
CI. - CI . Fastlane Match .
-
- 在Android上:
- Gemfile
gem install fastlane
CI, fastlane . .
-
[project]/android
[project]/ios
Gemfile, : -
source "https://rubygems.org" gem "fastlane"
-
bundle update
Gemfile.
Gemfile.lock
. -
bundle exec fastlane
fastlane
.
-
- CI,
.travis.yml
.cirrus.yml
, .
- Linux macOS.
- Xcode macOS (, o
sx_image: xcode9.2
). - . Fastlane CI CI.
- , , , :
- Bundler
gem install bundler
. - Android , Android SDK
ANDROID_SDK_ROOT
. -
bundle install
[project]/android
[project]/ios
. - , Flutter SDK
PATH
.
- Bundler
- CI:
-
flutter build appbundle
flutter build ios --release --no-codesign
, . cd android
cd ios
bundle exec fastlane [ lane]
. Cirrus Flutter.
, .
-