如何使用.env文件覆盖fastlane的应用程序文件中的值

在某些情况下,我们有必要覆盖fastlane的appfile中的值,例如使用不同的苹果账户来发布应用程序,但是没有文档化的官方方式。

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

像这样使用一个Appfile

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

当你现在调用没有环境variables的fastlane时 :

 fastlane beta 

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

设置一个不同的值,你可以使用

 APP_IDENTIFIER="com.custom.app" fastlane enterprise 

正如其他答复已经指出的那样,对于不同的环境,您可以始终拥有多个通道,只需将不同的应用标识符或用户名传递给您要调用的每个操作。

我们find了一个方法来执行此操作,在主项目文件夹中使用忽略的.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 。

您也可以在team_id指定不同的team_idusernameFastfile ,例如:

 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