我有一个包含六个目标的Xcode项目,每个目标都是为了构建一个单独的应用程序。我正在尝试设置fastlane以帮助我发布这些应用程序。
Fastlane docs suggest使用.env文件来处理多个目标(您可以在不同的.env文件中指定app_identifier
,team_name
等,然后,例如,致电fastlane appstore --env ENV_NAME_HERE
)。但是,我无法弄清楚如何正确设置deliver
。
deliver init
仅默认下载一个目标的元数据。我需要将所有目标的元数据下载到不同的目录(然后使用这些目录来上传数据)。
deliver download_metadata
不接受--env
参数(我的Deliverfile依赖于env文件)。我已经尝试了fastlane deliver --env
,但它似乎只是deliver
的简写,所以它也不起作用。
我想我可以手动运行具有不同deliver
参数的--metadata_path
(以及所有其他参数,因为我的Deliverfile无效,因为它依赖于env文件),然后使用Deliverfile指定目录+ .env文件。但由于我已经设置了Deliverfile和.env文件(现在我只使用deliver
上传二进制文件),我希望有更好的方法。有吗?
P.S。这是一个很大的遗留项目,所以将它分成六个不同的项目会很棒,但不幸的是,这不是一个选择。
答案 0 :(得分:8)
我一直在努力解决这个问题,使用.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"
答案 1 :(得分:5)
加起来@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
答案 2 :(得分:2)
这是@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
***我没有使用username参数,因为我在我的Deliver文件中使用了它。