首页 > 解决方案 > Carthage 更新失败,提示“找不到任何适用于 iOS 的模拟器” - Xcode 10.1、macOS Mojave (10.14.2)

问题描述

我正在尝试使用 Carthage 将 Realm 安装到我的项目中。它以前可以工作,但在切换到新的 MacBook Pro(15 英寸,2018 年,TouchBar)之后我收到以下错误,

carthage update --no-use-binaries --platform iOS
*** Fetching realm-cocoa
*** Checking out realm-cocoa at "v3.13.0"
*** xcodebuild output can be found in /var/folders/m4/1z0tvn6d67q2rqwcjvndy80m0000gn/T/carthage-xcodebuild.2vfx4v.log
*** Building scheme "Realm" in Realm.xcworkspace
Could not find any available simulators for iOS

我已经尝试卸载和重新安装 Carthage (0.31.2) 并按照这些答案中给出的步骤进行操作,

堆栈溢出问题

迦太基 Git 问题

迦太基修复和发布

xcrun simctl list devices --json

     {
        "availability" : "(available)",
        "state" : "Shutdown",
        "isAvailable" : true,
        "name" : "iPad Pro",
        "udid" : "94790E33-EA0A-40B4-BA0A-19CC8D976A6F",
        "availabilityError" : ""
      }

调试迦太基

(lldb) po devices[latestOSName]?.first { $0.isAvailable }
▿ Optional<Simulator>
  ▿ some : Simulator
    - isAvailable : true
    - name : "iPhone 5s"
    - udid : 87A9C887-034C-44A8-8F30-C90AF9ACCBCC

(lldb) po sdk.platform
XCDBLD.Platform.iOS

(lldb) po sdk.platform.rawValue
"iOS"

看起来这个问题仍然存在。有没有办法解决这个问题以在最新的 Xcode 版本上工作?

标签: iosswiftrealmcarthagexcode10.1

解决方案


也许您可以进行一些检查以缩小范围:

迦太基版

carthage version

应该输出

0.31.2

安装了多个 Xcode

xcode-select -p

应该给

/Applications/Xcode.app/Contents/Developer

用于标准安装。

模拟器

xcrun simctl list devices --json 

那应该输出一个列表,如:

{
  "devices" : {
    "iOS 12.1" : [
      {
        "availability" : "(available)",
        "state" : "Shutdown",
        "isAvailable" : true,
        "name" : "iPhone 5s",
        "udid" : "1A6959A0-C10F-474B-96C5-7E8955FBDD80",
        "availabilityError" : ""
      },
  ...

如果没有模拟器,请使用 Xcode <Window/Devices and Simulators> 添加一个。

如果有条目,请检查是否有带有trueas 值的“isAvailable”条目:

"isAvailable" : true,

如果没有,请检查 Xcode 安装。

删除缓存

也可以尝试

  • 退出 Xcode
  • 删除 Carthage 和 Xcode 派生数据文件夹的缓存

与往常一样,使用时rm -rf必须小心:

rm -rf ~/Library/Caches/org.carthage.CarthageKit 
rm -rf <your project folder>/Carthage
xcrun simctl delete unavailable

然后再试一次:

carthage update --no-use-binaries --platform iOS

调试迦太基

Carthage 的好处在于它是开源的,甚至是用 Swift 编写的。

所以要调试它,我们可以:

  • 退出 Xcode
  • 在终端中创建一个文件夹并 cd 到该文件夹

然后:

git clone https://github.com/Carthage/Carthage.git
cd Carthage
git checkout 0.31.2
make bootstrap
open Carthage.xcworkspace

之后我们需要输入命令行参数。为此:

  • 在 Xcode 中使用 <Product/Scheme/Edit Scheme...>
  • 在左侧选择“运行/调试”
  • 在右侧选择选项卡“参数”
  • 将“启动时传递的参数”更改为update --no-use-binaries --platform iOS

论据

  • 切换到“选项”选项卡
  • 将 Cartfile 所在的路径输入为“工作目录”

工作目录

最后:

  • 打开 Carthage/Source/CarthageKit/Simulator.swift
  • 在方法中设置断点selectAvailableSimulator

然后你可以调试出了什么问题。

如果一切正常,它看起来像这样:

调试会话

如果从 Xcode 运行时没有发生错误,则让它在 Xcode 中完全运行,没有断点,并给它一些时间进行编译。

如果从 Xcode 项目成功更新 carthage,则按照此处所述卸载当前的 carthage 安装。

如何从 OS X 卸载 Carthage?

然后在终端中转到 Makefile 所在的 Carthage 项目文件夹并键入:

'make install'

之后,您可以再次从命令行尝试。它应该工作!


推荐阅读