使用Swift的Fastlane | 传递参数| CI

这篇文章假定您已经熟悉Fastlane。
在这里,您可以找到如何将参数传递到车道。


我的场景:在我的CI设置中,我将同时使用Jenkins和Fastlane。 因此,我需要将参数从命令行发送到我的车道。
经过一番努力之后,我终于知道了如何将参数从命令行传递给Fastlane。
缺少了什么?。。。文档。
我从以下几点开始调查:

https://github.com/fastlane/fastlane/issues/11747
https://github.com/fastlane/fastlane/issues/11370
https://github.com/fastlane/fastlane/pull/11401


先决条件
1.在MacOS上安装fastlane
2.使用以下命令进行设置:

 捆绑程序执行器fastlane init swift 

此时,fastlane正在项目文件夹中创建一些默认文件。
(fastlane文件夹,Gemfile和Gemfile.lock)


从这一刻起,我们需要集中精力扩展Fastfile.swift 。 为此,我更喜欢使用位于以下位置的FastlaneSwiftRunner.xcodeproj
./fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj
在分析Fastlane的快速源文件之后,我尝试查看如何在不带&参数的情况下从命令行调用车道。
我在Fastfile.swift中定义了一些示例函数(通道):
(我已决定根据fastlane swift代码为其中一些格式提供该格式)。

Lane️车道名称匹配不区分大小写。 非常好 !

乍一看,我发现可以使用两种格式调用firstLane
bundle exec fastlane firstLane或将bundle exec fastlane first

下一步将是看如何将参数传递给车道。 在不涉及复杂的Fastfile的情况下,我只想发送样本[key:value]格式。

当然,对于secondLane,我们不能使用以下命令:

bundle exec fastlane secondLane

因此,在深入研究之后,我设法找出了正确的格式,原因以及如何传递参数。 从前面的控制台消息可以看出,只有3种方法被检测为通道。

  //不带参数的简单车道,后缀为“车道”。 
func firstLane()//带参数的泳道,作为可选参数,后缀为“ lanewithoptions:”
func thirdLane(withOptions options:[String:String]?)//带参数的泳道,为可选,后缀为“ lanewithoptions:”
func fourLaneWithOptions(_ options:[String:String]?)

即使在控制台中不够清楚,将“ lanewithoptions:”作为后缀也是将这些功能检测为通道的原因。

因此,让我们尝试查看参数是否正确发送。
对于此测试,我添加了fatalError调用以停止执行。
这样可以立即在控制台中获得反馈。
因此,thirdLane已更新为:

运行后:

bundle exec fastlane third environment:Staging
我得到以下结果(这意味着参数已正确发送):

跑步后

bundle exec fastlane third environment:Production

我得到以下结果(这意味着参数已正确发送):


结论
一个带参数的车道的示例(我觉得很容易理解)是:

在命令行下如何调用它的示例是:

bundle exec fastlane hockeyApp environment:Staging

资源:
https://github.com/doruvil/FastlaneSwift/tree/testing-fastlane-swift-limits

PS:
为了解决功能与可用通道列表的匹配问题,我打开了一个问题:
https://github.com/fastlane/fastlane/issues/12277

请分享您的想法,或者在设置快速通道时可能会遇到的困难/无法实现的事情。