我正在使用第三方fastlane插件,它包含一个动作,将显示我需要捕获的重要信息,例如链接。
我试图找到一种优雅的方法来捕获fastlane动作中的这些日志,我试图避免使用shell命令,但如果这是唯一的方法,那么我想我别无选择。
我需要这个链接,因为它是一个独特的随机链接,包含我想下载的资源。
我已经尝试重定向stdout无济于事,因为fastlane使用他们自己的记录器(通常是UI.message)并且即将向fastlane提交功能请求但是想到也许其他人遇到了这个并且设法通过它。
反正有没有重定向这种类型的日志并捕获它?
这是围绕UI的fastlane源代码:https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/ui
这是我尝试重定向输出的方法之一:Capturing logger output inside a method
任何帮助/建议/资源将不胜感激!
构建fastlane的方法允许您使用自己的图层替换UI图层。您可以在fastlane.ci GitHub repo https://github.com/fastlane/ci/blob/master/app/features/build_runner/fastlane_build_runner_helpers/fastlane_ci_output.rb上找到示例实现
您将如何设置它的方式如下
ci_output = FastlaneCI::FastlaneCIOutput.new(
each_line_block: proc do |raw_row|
puts "new line here, access raw_row"
end
)
FastlaneCore::UI.ui_object = ci_output
我不知道这是否会对你有所帮助,但我设法将fastlane stdout捕获到一个变量中以获得我想要的东西(在我的情况下,获取iPhone开发证书的通用名称)使用这个简单的方法
def with_captured_stdout
original_stdout = $stdout
$stdout = StringIO.new
yield
$stdout.string
ensure
$stdout = original_stdout
end
lane :test do |options|
match_dev = with_captured_stdout { match(type: 'development') }
puts match_dev
@dev_index = match_dev.index('iPhone Developer')
ENV['DEV_CODE_SIGN_ID'] = match_dev[@dev_index..match_dev.index(')', @dev_index)]
# ENV['DEV_CODE_SIGN_ID'] = "iPhone Developer: Test Name (XXXXXXXX)"
end