我最终在 platform 块内使用了 before_all:
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
并且还在fastlane目录中放置一个空白的.env文件。
创建一个空的.env 的原因记录在我的空.env 文件中:
TL;DR:不要删除这个空文件
这个文件是空白的,让 Fastlane 定义 SharedValue::ENVIRONMENT
变量,这是我们fastlane/Fastfile 配置的一部分。
正如您在 Fastlane 的cli_tools 中看到的,
Fastlane 从ARGV 中删除--env 索引pretty early
所以我们无法知道用户传递给--env参数的内容。
不幸的是,Fastlane 仅在 fastlane 文件夹中搜索 .env 文件
在它的父文件夹中(在我们的例子中是ios 文件夹)。代表着,
在我们的项目中,fastlane 不会找到任何 .env 文件。 (Source)
Fastlane 找不到 .env 文件时,不会调用该函数
load_dot_envs_from,负责定义
SharedValue::ENVIRONMENT 变量,我们在 Fastfile 中使用
(Source)
这个文件是一个 hack,它会让 Fastlane 找到一个空的 .env 文件。
然后它将 SharedValue::ENVIRONMENT 设置为 ARGV 值。
然后我们在 Fastlane 中使用SharedValue::ENVIRONMENT 来加载正确的
从正确的位置文件。