遵循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/AppfileAndroidManifest.xml. - ,
[project]/ios/fastlane/AppfileInfo.plist.apple_id,itc_team_id,team_id.
- ,
- .
- Supply ,
fastlane supply initPlay Store . .json - . - ITunes Connect
Appfileapple_id.FASTLANE_PASSWORDiTunes 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从AppfileCI系统中删除字段并将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_PASSWORDCI. - CI . Fastlane Match .
-
- 在Android上:
- Gemfile
gem install fastlaneCI, fastlane . .
-
[project]/android[project]/iosGemfile, : -
source "https://rubygems.org" gem "fastlane" -
bundle updateGemfile.Gemfile.lock. -
bundle exec fastlanefastlane.
-
- 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 appbundleflutter build ios --release --no-codesign, . cd androidcd iosbundle exec fastlane [ lane]
. Cirrus Flutter.
, .
-