Fastlane:如何根据 --env 从父目录加载 .env 文件

Inf*_*ity 3 ios fastlane

  1. 我知道 Fastlane 自动从.env.env.default和加载变量.env.{environment},其中由命令中的environment标志提供。--envfastlane
  2. 在我的 中,我需要 fastlane 来加载位于父目录中的Fastfile环境文件。
  3. 当根据我在标志中传递的内容进行更改.env.{environment}时,我想保留加载文件的行为。{environment}--env

Inf*_*ity 6

这对我有用:

  1. before_all在我的块中使用以下内容platform
  before_all do |lane|
    Dotenv.overload '../../.env'
    environment = lane_context[SharedValues::ENVIRONMENT]
    unless environment.nil?
        puts "Load .env file of #{environment}"
        Dotenv.overload '../../.env.' + environment
    end
  end
Run Code Online (Sandbox Code Playgroud)
  1. (重要!)在目录中放置一个空白.env文件fastlane

创建空文件的原因.env记录在我的空.env文件中:

TL;DR:不要删除这个空文件

该文件为空,以使 Fastlane 定义SharedValue::ENVIRONMENT 变量,这是我们配置的一部分fastlane/Fastfile

正如您在 Fastlane 中看到的cli_tools,Fastlane很早就--env删除了索引 ,因此我们无法知道用户传递给参数的内容。ARGV --env

fastlane不幸的是,Fastlane 仅在该文件夹及其父文件夹(在我们的示例中为该文件夹)中搜索 .env 文件ios。这意味着,在我们的项目中,Fastlane 将找不到任何 .env 文件。(来源

当 Fastlane 找不到 .env 文件时,它不会调用 load_dot_envs_from负责定义 SharedValue::ENVIRONMENT变量的函数,我们在 Fastfile 中使用该变量(源代码

这个文件是一个 hack,它会让 Fastlane 找到一个空.env文件。然后它将设置SharedValue::ENVIRONMENT为 ARGV 值。然后我们使用SharedValue::ENVIRONMENTFastlane 内部从正确的位置加载正确的文件。