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

9gm1akwq  于 2023-02-17  发布在  iOS
关注(0)|答案(1)|浏览(119)

1.我知道Fastlane自动从.env.env.default.env.{environment}加载变量,其中environmentfastlane命令中的标志--env提供。
1.在我的Fastfile中,我需要fastlane来加载我的环境文件,这些文件位于 * 父目录 * 中。
1.当{environment}根据我传入--env标志的内容更改时,我希望保持加载.env.{environment}文件的加载行为。

ipakzgxi

ipakzgxi1#

这一条对我很有效:
1.在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

1.(重要!)将空白.env文件放入fastlane目录。
创建空.env的原因记录在我的空.env文件中:

TL; DR:请勿删除此空文件

此文件为空,以便Fastlane定义SharedValue::ENVIRONMENT变量,该变量是fastlane/Fastfile配置的一部分。
正如您在Fastlane的cli_tools中所看到的,Fastlane很早就从ARGV中删除了--env索引,因此我们无法知道用户传递给--env参数的内容。
不幸的是,Fastlane只在fastlane文件夹及其父文件夹(在我们的例子中是ios文件夹)中搜索. env文件,这意味着在我们的项目中,Fastlane找不到任何. env文件。
当Fastlane找不到. env文件时,它不会调用函数load_dot_envs_from,该函数负责定义SharedValue::ENVIRONMENT变量,我们在Fastfile(源代码)中使用该变量
这个文件是一个黑客,它会让Fastlane找到一个空的.env文件,然后将SharedValue::ENVIRONMENT设置为ARGV值,然后我们在Fastlane中使用SharedValue::ENVIRONMENT从正确的位置加载正确的文件。

相关问题