【问题标题】:cocoapods can't find simulators, pod repo push failscocoapods 找不到模拟器,pod repo 推送失败
【发布时间】:2019-03-15 11:17:03
【问题描述】:

我正在尝试推送一个私有 pod。当我这样做时,我得到了这个错误:

- ERROR | [iOS] unknown: Encountered an unknown error (Could not find aiossimulator (valid values: ). Ensure that Xcode -> Window -> Devices has at least oneiossimulator listed or otherwise add one.) during validation.

我正在运行 Xcode 10并且我最近在我的机器上安装了 Xcode 10.1 beta。 另外,我有普通的 cocoapods (1.5.3) 和最新的 beta (1.6.0.beta.1)。

为了降低复杂性,我从我的机器中删除了两个测试版。所以,只是发布的版本。我仍然看到此错误。

我无法想象这里会发生什么。但是 something 出了问题。我真的更愿意完全删除 Xcode,或者做一些更激烈的事情。但我完全被困住了。

我团队中的其他人可以提取代码并执行pod repo push,但我不能从我自己的机器上。

感谢任何帮助/建议。

【问题讨论】:

  • XCode/首选项/位置/命令行工具;检查您是否选择了正确的选项。还要检查您是否有模拟器?
  • 命令行工具(10A254a)只有一个选择,如果我打开“设备和模拟器”,就会看到一大堆。另外,我可以在 sim 上运行。
  • @Ankur,这是 Cocoapods 的问题 - github.com/CocoaPods/fourflusher/commit/…。修复它的 RP 已经合并。
  • 安装 Xcode 11 后,pod lib lint 由于fourflusher 再次损坏 - xcrun simctl list -j 的“可用性”键现在是布尔值“isAvailable”
  • 要在安装 Xcode 11 后解决此问题,请按照以下@PavloBoiko 的回答并将device['availability'] == '(available)' || device['isAvailable'] == 'YES' 替换为device['availability'] == '(available)' || device['isAvailable'] == 'YES' || device['isAvailable'] == true

标签: xcode cocoapods


【解决方案1】:

执行以下步骤,它解决了我对于 XCode 10.X 和 11.X 的问题

  1. sudo gem 更新 cocoapods

如果上述方法不适用于您的系统,请按照以下 3 个步骤操作,它肯定会起作用

  1. sudo gem 卸载fourflusher
  2. sudo gem 安装fourflusher
  3. sudo gem 更新 cocoapods

【讨论】:

  • 只需将 cocoapods 更新到 1.6.0 或更高版本就足以兼容 Xcode 10.2。
  • 这适用于 Xcode 12.1 和 cocoapods 1.6.1 以及安装的 XCode 12.2。
  • @NickN 你是说 XCode 10.2 吗?你评论[这适用于 Xcode 12.1 和 cocoapods 1.6.1 以及安装的 XCode 12.2。]
  • 这对我也有效,应该被接受。
  • 重新安装fourflusher对我有用,似乎不需要更新cocoapods。
【解决方案2】:

如果您安装了 Xcode 10.1,_即使 Xcode 10.0 被设置为 Xcode 的默认版本,simctl 的输出具有不同的格式,特别是为了可用性。其余字段似乎相同,只是不是这个。你可以看到这个 JSON 调用 xcrun simctl list -j。而且 Cocoapods 还没有将它们的包装器更新为这种格式。

我为此问题准备了临时分步修补程序。它对我有用。

在日志中找到这一行- ERROR | [iOS] unknown: Encountered an unknown error (Could not find a iossimulator (valid values: ). Ensure that Xcode -> Window -> Devices has at least oneios simulator listed or otherwise add one.

在它下面你会看到这样一行:/usr/local/lib/ruby/gems/2.5.0/gems/fourflusher-2.0.1/lib/fourflusher/find.rb

  1. 复制此文件的名称并调用:sudo vi /usr/local/lib/ruby/gems/2.5.0/gems/fourflusher-2.0.1/lib/fourflusher/find.rb
  2. I
  3. 在文件末尾找到以Simulator.new(device, os_name, os_version)....开头的行
  4. 将此行替换为Simulator.new(device, os_name, os_version) if device['availability'] == '(available)' || device['isAvailable'] == 'YES'
  5. :wq
  6. pod trunk push YourLibrary.podspec 应该可以工作。

如果有问题,请回复。

上述解决方案适用于特定的 Xcode 版本。要获得适用于任何 Xcode 版本的解决方案,请使用以下内容。 无需编辑文件,您可以从 https://github.com/CocoaPods/fourflusher/blob/master/lib/fourflusher/find.rb 复制整个内容并替换。

【讨论】:

  • 我想添加某人的ruby/gems 目录可能不同。使用gem env 列出您的 GEM PATH。例如,我在/Library/Ruby/Gems/2.3.0 中。这也已在fourflusher 中打了补丁:github.com/CocoaPods/fourflusher/pull/11
  • gem which fourflusher 找到fourflusher。
  • 注意: fourflusher-2.1.0 fixes 这个问题,所以你可以通过更新到那个版本来解决问题。
  • Xcode 10.1 和 Xcode 10.2 的兼容性已在 cocoapods 1.6.0 和更新版本中得到修复。
  • 要在安装 Xcode 11 后解决此问题,请将 device['availability'] == '(available)' || device['isAvailable'] == 'YES' 替换为 device['availability'] == '(available)' || device['isAvailable'] == 'YES' || device['isAvailable'] == true - 来自 @JoGoFo 的源代码。谢谢
【解决方案3】:

我在运行 Xcode 10.2 测试版后收到此错误。不幸的是,以前的答案并没有使错误消失。我不知道具体发生了什么变化,但我找到了一种解决方法来让它工作:

  1. 找到fourflusher中的find.rb,运行pod trunk push命令后可以通过错误位置来判断。比如:/usr/local/lib/ruby/gems/2.5.0/gems/fourflusher-2.0.1/lib/fourflusher/find.rb
  2. 转到if device['availability'] == '(available)'附近的文件末尾
  3. 确保设置了os_nameos_version 的正下方。如果您查看上面的评论,它预计会将# Sample string: iOS 9.3 拆分为iOS9.3。在我的情况下,它们是空的或其他东西,所以我自己设置它们。
  4. 同时检查可用性是否为真:|| device['isAvailable'] == true

最后那部分看起来像这样:

if device['availability'] == '(available)' || device['isAvailable'] == true
  os_name = "iOS"
  os_version = "12.1"
  Simulator.new(device, os_name, os_version)
end

这不是一个永久的解决方案!!! 这就是我现在让它工作的方式,直到 Xcode 10.2 测试版中的变化得到 cocoapods 的正式支持。

然后我注意到,当您在从未安装测试版的 Mac 上运行 xcrun simctl list -j 时,您的操作系统名称为 com.apple.CoreSimulator.SimRuntime.iOS-12-1iOS 12.1

安装 Xcode 10.2 后,我仍然看到 com.apple.CoreSimulator.SimRuntime.iOS-12-1,但 iOS 12.1 不见了。我假设find.rb 使用后者来查找os_nameos_version 值。 这就是我自己设置它们的原因。

希望这对其他人有所帮助,祝你好运!

【讨论】:

  • 在 CocoaPods 存储库上提交了 issue
  • 我的也是同样的问题。安装 XCode 10.2 beta 并删除此 beta 版本后,因为我将 XCode 9.3 升级到 XCode 10.1。
  • Xcode 10.2 兼容性已在 cocoapods 1.6.0 及更高版本中修复。
【解决方案4】:

安装 Xcode11-beta 后遇到同样的问题:

- ERROR | [iOS] unknown: Encountered an unknown error (Could not find aiossimulator (valid values: ). Ensure that Xcode -> Window -> Devices has at least oneiossimulator listed or otherwise add one.) during validation.

按照以下步骤解决:

  1. 在 Finder 菜单中选择 Go/Go to Folder...
  2. 粘贴到/usr/local/lib/ruby/gems
  3. 导航到{your gem version}/gems/fourflusher-{version}/lib/fourflusher/
  4. 打开终端
  5. 输入cd(cd 和空格)
  6. 拖放fourflusher 文件夹(包含find.rb 文件的文件夹)
  7. 输入sudo vi find.rb
  8. 输入您的密码
  9. 输入i 即可编辑文件
  10. 在文件中一直向下滚动直到看到device['availability'] == '(available)' || device['isAvailable'] == 'YES'
  11. 将以下内容附加到该行:|| device['isAvailable'] == true
  12. 现在应该是这样的:
devices.map do |device|
          if device['availability'] == '(available)' || device['isAvailable'] == 'YES' || device['isAvailable'] == true
            Simulator.new(device, os_name, os_version)
          end
        end
  1. 输入:wq 保存文件
  2. 导航到您的 .podspec 文件夹
  3. 运行 pod lib lint 对其进行 lint 或 pod trunk push 将其推送

如果您输入错误或只是想完全重新开始,您应该像这样卸载并安装fourflusher,然后从第 1 步重新开始:

卸载:sudo gem uninstall fourflusher

安装:sudo gem install fourflusher

【讨论】:

    【解决方案5】:

    我遇到了同样的问题,更新了所有对我有用的 gem: sudo gem update

    【讨论】:

    • 比其他人更容易回答,而且效果很好,谢谢!
    【解决方案6】:

    我使用CocoaPods1.7.1,然后我确实更新到1.7.2 并且问题消失了

    sudo gem install cocoapods 
    

    【讨论】:

      【解决方案7】:

      即使我尝试使用 $gem insall cocoapods 但 cocoapods 版本仍然是低版本,我终于找到了更新你的 cocoapods 的方法

      $ sudo gem install -n /usr/local/bin cocoapods --pre 
      

      然后我的cocoapod --version 显示是1.7.1 太好了,所以我解决了这个问题!

      【讨论】:

        【解决方案8】:

        当我在我的 Mac 上安装 Xcode 10.1、Xcode 10.2 和 CocoaPods 1.7.0.beta.3 时,我能够重现此问题。我运行pod lib lint MyLibrary.podspec 并收到与您在问题中提到的相同的错误消息。

        通过运行sudo xcode-select -s /Path/To/Xcode10_1.app 修复它,其中/Path/To/Xcode10_1.app 是Xcode 10.1 的路径。

        要确保您使用的是最新的 CocoaPods 版本,请尝试bundler。使用以下内容创建 Gemfile:

        source 'https://rubygems.org'
        gem 'cocoapods', '1.7.0.beta.3'
        

        之后运行 bundle install && bundle exec pod repo push(或任何其他 pod 操作)。

        【讨论】:

          【解决方案9】:

          只是为了完整性而添加了这个,但我收到了这个错误并确定我得到了它,因为我安装了多个版本的 Xcode 并且因为 Preferences > Locations > Command Line Tools 设置为没有的 Xcode 版本'没有安装所需的模拟器。

          将命令行工具切换到 DID 缺少模拟器的当前版本,一切都很好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-10
            • 2019-02-13
            • 2016-08-05
            • 1970-01-01
            • 2019-11-29
            • 2017-03-16
            相关资源
            最近更新 更多