无法使用 Ruby 测试 Fastlane 中的目录是不是已存在

Posted

技术标签:

【中文标题】无法使用 Ruby 测试 Fastlane 中的目录是不是已存在【英文标题】:Can't test if directory already exists from within Fastlane with Ruby无法使用 Ruby 测试 Fastlane 中的目录是否已存在 【发布时间】:2018-11-09 03:25:46 【问题描述】:

我无法从 Fastlane 操作或通道中测试目录是否存在。对于当前目录中的save_path = "./dir_name"save_path = "dir_name"(正在运行fastlane),以下操作均无效:

!Dir.empty?(save_path)
!Dir[save_path].empty?
Dir.exist?(save_path)
File.exist?(save_path)
File.directory?(save_path)

我什至尝试扩展相对路径:

File.exists? File.expand_path(save_path)

我提到了以下内容:

    Check if directory is empty in Ruby How to check if a given directory exists in Ruby https://blog.bigbinary.com/2017/02/28/dir-emtpy-included-in-ruby-2-4.html https://ruby-doc.org/core-2.2.0/Dir.html

如何测试一个目录是否存在于 Fastlane 中?感谢您的阅读和帮助!

【问题讨论】:

【参考方案1】:

检查这个的正确格式:

Dir.exist? "#save_path" 

如果存在则返回 true,否则返回 false。

【讨论】:

感谢您的回复!如上所述,此语法不等同于Dir.exist?(save_path) 吗?感谢您的洞察力! 是的,你是对的,我没有看到你也是这样写的。很高兴你找到了解决方案!【参考方案2】:

LOL 好吧,我发现了我的问题。我没有意识到我必须包含每个语句的完整路径,因为我使用Dir.foreach 来迭代文件系统的一部分;更新后的语法是:

Dir.foreach(save_path) do |dir|
   next if dir == '.' or dir == '..'
   if (File.directory?("#save_path#dir"))
     begin
       FileUtils.mkdir_p("./#save_path#dir/images")
     rescue StandardError => e
       UI.message("Failed to make directory ./#save_path#dir/images: #e.to_s")
       return
     end
   end
end

这与 if 语句中的 File.directory?("#dir") 相比。我认为 Ruby DirFileUtil 库在路径的其余部分看起来相对于当前目录。

【讨论】:

以上是关于无法使用 Ruby 测试 Fastlane 中的目录是不是已存在的主要内容,如果未能解决你的问题,请参考以下文章

如何在模拟器中使用 fastlane 运行仪器测试?

Fastlane 注释掉字符串中的引号

Fastlane 不断警告我正在使用 Ruby 2.2.4

[fastlane] [gem] [rvm] [ruby]

运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode

运行 sudo gem install fastlane -NV 在安装 fastlane ruby​​zip 需要 ruby​​ version >= 2.4 时抛出错误