迦太基更新失败说"无法找到适用于iOS的任何模拟器" - Xcode 10.1,macOS Mojave(10.14.2)

Sas*_*i M 10 realm ios swift carthage xcode10.1

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

我尝试卸载并重新安装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" : ""
      }
Run Code Online (Sandbox Code Playgroud)

调试迦太基

(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"
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*cht 13

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

迦太基版

carthage version
Run Code Online (Sandbox Code Playgroud)

应该输出

0.31.2
Run Code Online (Sandbox Code Playgroud)

安装了多个Xcode

xcode-select -p
Run Code Online (Sandbox Code Playgroud)

应该给

/Applications/Xcode.app/Contents/Developer
Run Code Online (Sandbox Code Playgroud)

用于标准安装.

模拟器

xcrun simctl list devices --json 
Run Code Online (Sandbox Code Playgroud)

这应该输出如下列表:

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

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

如果有条目请检查是否有'isAvailable'条目的true值为:

"isAvailable" : true,
Run Code Online (Sandbox Code Playgroud)

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

删除缓存

人们也可以尝试

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

一如既往使用时rm -rf必须小心:

rm -rf ~/Library/Caches/org.carthage.CarthageKit 
rm -rf <your project folder>/Carthage
xcrun simctl delete unavailable
Run Code Online (Sandbox Code Playgroud)

然后再试一次:

carthage update --no-use-binaries --platform iOS
Run Code Online (Sandbox Code Playgroud)

调试迦太基

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

所以要调试它我们可以:

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

然后:

git clone https://github.com/Carthage/Carthage.git
cd Carthage
git checkout 0.31.2
make bootstrap
open Carthage.xcworkspace
Run Code Online (Sandbox Code Playgroud)

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

  • 在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'
Run Code Online (Sandbox Code Playgroud)

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