Flutter fastlane ios如何通过--dart-define

问题描述 投票:0回答:2

我找不到这个问题的答案。 我的应用程序需要定义参数

--dart-define=ENVIRONMENT="$APP_ENV"

构建 Android 没有问题,但是在 fastlane 中构建 ad-hoc 时如何传递这些问题呢? 我已经准备好运行的构建脚本:

flutter pub get
flutter build ios --config-only \ 
    --flavor prod \ 
    --dart-define=ENVIRONMENT="$APP_ENV"

cd ios
bundle exec fastlane build_app_prod_ad_hoc

我的快车道是:

  lane :build_app_prod_ad_hoc do
    cocoapods
    gym(
      configuration: "AdHoc-prod",
      export_method: "ad-hoc",
      scheme: "prod",
      export_options: {
        provisioningProfiles: {
           ...
        },
      },
    )
  end

但是我可以看到我的结果没有正确设置环境。 有什么想法吗?

ios flutter fastlane
2个回答
4
投票

解决方案
flutter_export_environment.shGenerated.xcconfig 中编码并替换 dart 变量,然后直接从 Xcode/Fastlane 运行应用程序即可正常工作。

------详情--------

问题:
如果您直接从 Xcode/Fastlane 运行应用程序而不先运行 flutter run/build 命令,则通过 --dart-define 传递的变量将不会反映。

原因:
涉及以下生成的文件,但不打算手动更新,但在我们从 Xcode 或 Fastlane 运行来构建应用程序的情况下,使用的 dart 变量将不会更新。当您运行 flutter run 或 build 命令时,这些文件将使用 --dart-define 中的值更新为 Base64。

/ios/Flutter/flutter_export_environment.sh
ios/Flutter/Generate.xcconfig

当您直接从 Xcode 构建应用程序或使用 Fastlane 时,Flutter 项目代码内 ios 文件夹中的 generated.xcconfig 将用于运行/构建应用程序。

示例: 在我的例子中,我们使用 --dart-define 传递 ENV 变量,但是如果您直接从 XCode 运行而不首先运行 flutter build 或 run 命令,这些参数将不会更新。

flutter 运行/构建 --flavor dev --dart-define ENV=dev

Dart 定义变量将以 Base64 编码存储在 flutter_export_environment.sh 和 generated.xcconfig 中。

DART_DEFINES=RU5WX1UEU9chZ2luZw==

注意:这是一种解决方法,可以避免运行 flutter run/build 命令,然后运行 Xcode/Fastlane 来解决问题。不是最好的解决方案,但我希望它可以帮助别人。


0
投票

我使用 gitlab-ci 找到了一个没有口味的轻型解决方案。

  1. 第 1 步:在没有工件的情况下构建应用程序:
flutter build ipa --build-number=$BUILD_NUMBER --dart-define="APP_ENV=$APP_ENV"
  artifacts:
    paths:
      - build/ios/ipa/app.ipa
    expire_in: 1 day
  1. 第 2 步:创建 iOS 发布通道:
default_platform(:ios)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :beta do
    api_key = app_store_connect_api_key(
      key_id: ENV['IOS_ID_KEY'],
      issuer_id: ENV['IOS_ISSUER_ID'],
      key_filepath: ENV['IOS_AUTH_KEY'],
      duration: 1200,
      in_house: false
    )

    get_certificates
    get_provisioning_profile
    upload_to_testflight(
      ipa: '../build/ios/ipa/app.ipa' # depends on the CI current directory,
    )
  end
end

下一步:构建具有风味的应用程序以使用不同的包标识符。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.