如何为多个目标提供(快速通道)下载元数据?

How to make deliver (fastlane) download metadata for multiple targets?

我有一个包含六个目标的 Xcode 项目,每个目标都用于构建一个单独的应用程序。我正在尝试设置 fastlane 以帮助我发布这些应用程序。

Fastlane 文档 suggest 使用 .env 文件来处理多个目标(您可以在不同的 .env 文件中指定 app_identifierteam_name 等,然后,对于例如,调用 fastlane appstore --env ENV_NAME_HERE)。但是我不知道如何正确设置 deliver

deliver init 默认只下载一个目标的元数据。我需要将所有目标的元数据下载到不同的目录(显然,然后使用这些目录上传数据)。 deliver download_metadata 不接受 --env 参数(我的 Deliverfile 依赖于 env 文件)。我已经试过了 fastlane deliver --env,但它似乎只是 shorthand for deliver,所以它也不起作用。

我想我可以手动 运行 deliver 使用不同的 --metadata_path 参数(以及所有其他参数,因为我的 Deliverfile 无效,因为它取决于 env 文件),并且然后稍后使用 Deliverfile + .env 文件指定目录。但由于我已经设置了 Deliverfile 和 .env 文件(现在我使用 deliver 仅上传二进制文件),我希望有更好的方法。有吗?

P.S。这是一个大型遗留项目,因此将它分成六个不同的项目会很好,但不幸的是,这不是一个选择。

我也一直在努力解决这个问题,使用 .env 文件设置提交很容易。

但检索初始数据很困难,但并非不可能。

要获取元数据 运行 此命令:

fastlane deliver download_metadata -m "./Targets/Release/Metadata" -u "itunes@username" -a "com.example.ios"

对于屏幕截图:

fastlane deliver download_screenshots -w "./Targets/Release/Screenshots" -u "itunes@username" -a "com.example.ios"

总计 @rckoenes 个答案:

1) 使用此信息创建一个 .env.yourEnvName 文件(作为示例):

DLV_METADATA_PATH="../Targets/Your_Target/Metadata"
DLV_ITUNESCONNECT_USERNAME="yourItunesUser@something.com"
DLV_BUNDLE_ID="com.yourCompany.yourTarget"

2) 像这样创建一条车道:

desc "Download metadata"
 lane :metadata do
    sh('fastlane deliver download_metadata -m "$DLV_METADATA_PATH" -u $DLV_ITUNESCONNECT_USERNAME -a $DLV_BUNDLE_ID')
 end

3) 像这样调用 fastlane:

fastlane metadata --env yourEnvName

这样它会更干净一些,并且您将变量保存在 .env 文件中。 多目标自动调用,请参考:https://docs.fastlane.tools/faqs/#multiple-targets-of-the-same-underlying-app

这是@rckoenes、@Riddick 的回答和这个 fastlane github issue submission 的组合。

我正在尝试@Riddick 的回答以获得更清晰的工作流程,但我无法下载元数据。出于某种原因,它只生成元数据路径文件夹,但没有从 iTunesConnect 下载的元数据。我做了一些试验和错误,并从上面的 link 中找到了这行代码:

ENV["DELIVER_FORCE_OVERWRITE"] = "1"

将它添加到泳道并成功了!

1) 使用以下信息创建一个 .env.yourEnvName 文件(作为示例):

METADATA_PATH="../Targets/Your_Target/Metadata"
APP_IDENTIFIER="com.yourCompany.yourTarget"

2) 像这样创建一条车道:

desc "Download metadata"
 lane :metadata do
    ENV["DELIVER_FORCE_OVERWRITE"] = "1" # This is the additional line from Riddick's code
    sh "fastlane deliver download_metadata --app_identifier #{ENV['APP_IDENTIFIER'] --metadata_path #{ENV['METADATA_PATH']}"
 end

3) 像这样调用 fastlane:

fastlane metadata --env yourEnvName

***我没有使用用户名参数,因为我在我的传送文件中有它。