Flutter.dev:使用Flutter连续交付

本文的翻译是在Flutter Mobile Developer课程开始之前准备的










遵循Flutter的持续交付(CD)最佳实践,以确保将您的应用程序交付给Beta测试人员并定期进行测试,而无需手动操作。



快车道



本教程向您展示如何将Fastlane(一种开源工具包)集成到现有的测试和持续集成(CI)工作流程中,例如Travis或Cirrus。



本地设置



强烈建议在移至云之前在本地测试构建和部署过程。您还可以从本地计算机实施连续部署。



  1. 安装fastlane:gem install fastlanebrew install fastlane有关更多详细信息,请访问Fastlane文档
  2. 创建一个Flutter项目,准备好后,请确保使用

    • flutter build appbundle;
    • flutter build ios --release --no-codesign...
  3. 为每个平台初始化Fastlane项目。

    • fastlane init [project]/android.
    • fastlane init [project]/ios.
  4. , Appfile .

    • , package_name [project]/android/fastlane/Appfile AndroidManifest.xml.
    • , [project]/ios/fastlane/Appfile Info.plist. apple_id, itc_team_id, team_id .
  5. .

    • Supply , fastlane supply init Play Store . .json - .
    • ITunes Connect Appfile apple_id. FASTLANE_PASSWORD iTunes Connect. iTunes/TestFlight.
  6. .

    • Android : . .apk, « ». « » .aab/.apk, Play Store, Play Store.

      • , . . Play Store.
      • .
      • gradle release, android.buildTypes.release [project]/android/app/build.gradle.
    • iOS, TestFlight App Store, , .



  7. 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_appexport_method: 'app-store'upload_to_testflight在iOS上,将需要额外的构建,因为它是flutter build构建的.app而不是.ipas要发布的存档


现在,您准备好本地部署或将部署迁移到持续集成(CI)系统。



本地部署



  1. release.

    • flutter build appbundle.
    • flutter build ios --release --no-codesign. , fastlane .
  2. Fastfile .

    • cd android, fastlane [ lane].
    • cd ios, fastlane [ lane].






首先,请按照“本地设置”部分中描述的“本地设置”部分中的说明进行操作,以确保在移至Travis之类的云系统之前,该过程正常运行。



需要注意的主要事情是,由于云实例是短暂且不可靠的,因此您不应在服务器上保留凭据(例如Play Store服务帐户的JSON或iTunes分发证书)。



Cirrus这样的持续集成(CI)系统通常支持加密的环境变量来存储私有数据。



采取一切预防措施,不要在测试脚本中将这些变量的值打印到控制台。在合并请求之前,这些变量也不应在请求请求中可用,以使攻击者无法创建将窃取这些机密的请求请求。在您接受并合并的请求请求中与这些机密进行交互时,请务必小心。



  1. 使凭据短暂。

    • 在Android上:



      • json_key_fileAppfileCI系统中删除字段并将JSON字符串的内容存储在加密变量中。使用参数json_key_dataupload_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 .
  2. 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.
  3. CI, .travis.yml .cirrus.yml, .



    • Linux macOS.
    • Xcode macOS (, osx_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.
    • CI:



      • flutter build appbundle flutter build ios --release --no-codesign, .
      • cd android cd ios
      • bundle exec fastlane [ lane]






      . Cirrus Flutter.





      , .








All Articles