#ruby #fastlane
#ruby #fastlane
Вопрос:
Я пытаюсь создать модуль ruby с некоторыми вспомогательными функциями, которые я использую в Fastfile. Это выглядит следующим образом:
lane :a do |options|
Utils.foo
end
module Utils
def self.foo
get_info_plist_value(...)
end
end
Когда я пытаюсь запустить полосу, я получаю эту ошибку: undefined method 'get_info_plist_value' for Utils:Module
.
Я попробовал следующие способы решения этой проблемы:
- добавление
extend Utils
после определения модуля - включая
Fastlane
илиFastlane::Actions
в модуль
Мне это не помогло.
Есть ли какие-либо другие способы решения проблемы?
Комментарии:
1. это драгоценный камень? Существует небольшая путаница между именами, где-то вы написали
fastlane
и гдеfastfile
-то. Не могли бы вы подтвердить?2. @zhisme, да, Fastlane — это жемчужина. Fastfile — это файл, в котором вы пишете код с использованием Fastlane (как в моем примере). Это документация по Fastlane — docs.fastlane.tools/начало работы / ios .
Ответ №1:
Я получил такую утилиту для работы с использованием внедрения зависимостей:
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
Если вы посмотрите на анатомию объявленного «lane» ( :a
например), каждое действие (например, get_info_plist_value ) выполняется в блоке Fastlane::Lane, экземпляр которого был создан Fastfile.
Хотя это возможно, написание утилит, вызывающих действия Fastlane, следует использовать экономно. Это кажется довольно выходящим за рамки предполагаемого использования Fastlane. Я думаю, что «правильный» способ приблизиться к чему-то подобному — это на самом деле написать пользовательское действие (немного более подробное, но, вероятно, более удобный вариант).
Как говорится, «Не сражайтесь с фреймворком!»