如何使交付(fastlane)下载元数据适用于多个目标?

14
我有一个Xcode项目,包含六个目标,每个目标都用于构建单独的应用程序。我试图设置fastlane来协助我发布这些应用程序。
Fastlane文档suggest建议使用.env文件来处理多个目标(您可以在不同的.env文件中指定app_identifierteam_name等,然后调用fastlane appstore --env ENV_NAME_HERE)。然而,我无法弄清楚如何正确设置deliverdeliver init默认仅下载一个目标的元数据。我需要下载所有目标的元数据到不同的目录中(然后显然使用这些目录上传数据)。 deliver download_metadata不接受--env参数(我的Deliverfile依赖于env文件)。我尝试过fastlane deliver --env,但它似乎只是deliver的简写,所以也不起作用。
我想我可以手动运行deliver并使用不同的--metadata_path参数(以及所有其他参数,因为我的Deliverfile无效,因为它依赖于env文件),然后稍后使用Deliverfile + .env文件指定目录。但是由于我已经设置了Deliverfile和.env文件(现在我仅使用deliver上传二进制文件),所以我希望有更好的方法。有吗?
P.S. 这是一个大型遗留项目,因此将其拆分为六个不同的项目会很好,但不幸的是这不是一个选项。
3个回答

19

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

谢谢!看来现在确实只有这种方法。 - FreeNickname
我还没有尝试过,但也许你甚至可以传递“-m”和“-W”,并在deliver上使用init操作。我正在脚本中使用这些方法,并编写.env文件。 - rckoenes

9
这是@rckoenes和@Riddick的答案以及这个fastlane github问题提交的结合体。
我尝试了@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

我没有使用username参数,因为我在我的Deliver File中已经有它了。


有没有一种使用 sh 来执行 download_metadata 步骤的方法? - robbie_c
老实说,我有一段时间没有碰过这段代码了。我相信你不能使用 ENV。不过我可能错了。 - r_19

8

@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 “Download Metadata of each target” lane :metadata do sh(‘fastlane deliver download_metadata -m “$DLV_METADATA_PATH” -u $DLV_ITUNESCONNECT_USERNAME -a $DLV_BUNDLE_ID’) end还有我的.env文件DLV_METADATA_PATH=./Targets/NextSampleFastlaneTesting3/Metadata DLV_ITUNESCONNECT_USERNAME=@.com DLV_BUNDLE_ID= com.****.NextSampleFastlaneTesting3我做错了什么吗? - Bharath Reddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接