如何使用 .env 文件覆盖 fastlane 的 appfile 中的值

How to override values inside fastlane's appfile using .env files

我们需要在某些情况下覆盖 fastlane 的 appfile 中的值,例如使用不同的 apple 帐户发布应用程序,但没有记录在案的官方方式。

我们找到了一种方法,使用主项目文件夹中忽略的 .env 文件。

它可用于覆盖 appfile 中的值,如下所示:

require('dotenv')
Dotenv.load '../.env'

app_identifier "original.app.identifier" # The bundle identifier of your app
apple_id "account@example.com" # Your Apple email address
team_name "originalTeamName"
team_id "originalTeamID"

unless ENV["N42_FASTLANE_APP_IDENTIFIER"].nil?
  app_identifier ENV["N42_FASTLANE_APP_IDENTIFIER"]
end

unless ENV["N42_FASTLANE_APPLE_ID"].nil?
  apple_id ENV["N42_FASTLANE_APPLE_ID"]
end

unless ENV["N42_FASTLANE_TEAM_NAME"].nil?
  team_name ENV["N42_FASTLANE_TEAM_NAME"]
end

unless ENV["N42_FASTLANE_TEAM_ID"].nil?
  team_id ENV["N42_FASTLANE_TEAM_ID"]
end

新值可以在 .env 文件中设置如下:

N42_FASTLANE_APPLE_ID="anotherAccount@example.com"

Appfile 支持覆盖不同通道的值:https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md

您还可以在 Fastfile 中指定不同的 team_idusernameapp_identifier,例如:

lane :example_lane do
cert(
      username: "email@company.com",
      team_id: "ABCDE123"
    )    
sigh(
      username: "email@company.com",
      team_id: "ABCDE123",
      app_identifier: "com.company.example.app"
      )
gym(
      export_team_id: "ABCDE123"
      ) 
end

最简单的方法是使用环境变量:

像这样使用 Appfile

apple_id ENV["APPLE_ID"] || "default@company.com"
app_identifier ENV["APP_IDENTIFIER"] || "com.company.default"

当您现在调用 fastlane 而不使用环境变量时:

fastlane beta

它将使用提供的默认值 (default@company.com)

要设置不同的值,您可以使用

APP_IDENTIFIER="com.custom.app" fastlane enterprise

另外正如其他回复所指出的那样,您始终可以为不同的环境设置多个通道,只需将不同的应用程序标识符或用户名传递给您正在调用的每个操作即可。