从 ruby​​ 模块调用 Fastlane 操作

Ily*_*bet 6 ruby fastlane

我正在尝试使用我在 Fastfile 中使用的一些帮助函数来制作一个 ruby​​ 模块。它看起来如下:

lane :a do |options|
  Utils.foo
end

module Utils
  def self.foo
    get_info_plist_value(...)
  end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试运行车道时,我收到此错误:undefined method 'get_info_plist_value' for Utils:Module

我尝试了以下方法来解决这个问题:

  • extend Utils在模块定义之后添加
  • 包括FastlaneFastlane::Actions进入模块

这些对我没有帮助。

还有其他方法可以解决问题吗?

小智 3

我已经得到了一个像这样的实用程序,可以使用依赖注入来工作:

lane :a do |options|
  Utils.call(self)
end

module Utils
  def initialize(lane)
     @lane = lane
  end

  def self.call(lane)
     new.execute(lane)
  end

  def execute
     @lane.get_info_plist_value(...)
  end
end
Run Code Online (Sandbox Code Playgroud)

:a如果您查看声明的“lane”(例如 )的剖析,每个操作(如get_info_plist_value )都在Fastlane::Lane 的块内执行,该块由Fastfile实例化。

尽管可能,但应谨慎使用编写调用 Fastlane 操作的实用程序。这似乎完全超出了 Fastlane 的预期用途范围。我认为处理此类问题的“正确”方法是实际编写自定义操作(更冗长一些,但可能是更易于维护的选项)。

俗话说“不要与框架对抗!”