【问题标题】:How to make deliver (fastlane) download metadata for multiple targets?如何为多个目标提供(fastlane)下载元数据?
【发布时间】:2016-05-11 10:58:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ios fastlane fastlane-deliver


    【解决方案1】:

    我也一直在努力解决这个问题,使用 .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"
    

    【讨论】:

    • 谢谢!看来这确实是目前唯一的方法。
    • 我还没有尝试过,但也许你甚至可以通过 -m-W 并在交付时使用 init 操作。我在脚本中使用这些方法并写出 .env 文件。
    【解决方案2】:

    加起来就是@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

    【讨论】:

    • 我尝试了这个解决方案,但我总是得到“终端中缺少 -a”。以下是我的泳道 desc “下载每个目标的元数据”泳道 :metadata do sh('fastlane deliver download_metadata -m "$DLV_METADATA_PATH" -u $DLV_ITUNESCONNECT_USERNAME -a $DLV_BUNDLE_ID') end 以下是我的 .env 文件 DLV_METADATA_PATH=./目标/NextSampleFastlaneTesting3/元数据 DLV_ITUNESCONNECT_USERNAME=****@****.com DLV_BUNDLE_ID= com.****.NextSampleFastlaneTesting3 我做错了吗?
    【解决方案3】:

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

    我试图通过@Riddick 的回答来获得更简洁的工作流程,但我无法让它下载元数据。出于某种原因,它只制作元数据路径文件夹,但没有从 iTunesConnect 下载元数据。我做了一些试验和错误,从上面的链接中找到了这行代码:

    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
    

    ***我没有使用用户名参数,因为我的交付文件中有它。

    【讨论】:

    • 有没有办法使用 sh 来执行 download_metadata 步骤?
    • 说实话,我已经有一段时间没有接触过这段代码了。我相信你不能使用 ENV。我可能错了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2023-03-03
    • 2021-01-20
    • 2011-07-14
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    相关资源
    最近更新 更多