Xcode 6中iOS模拟器带有UDID的问题

29

当我从 xcode 6 中选择模拟器时,会有多个选项供选择,但每个模拟器都带有 UDID。请参见下面的图像,并在此先感谢您的帮助。


6个回答

40
killall Xcode
- 结束所有正在运行的Xcode进程。
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService
- 结束所有正在运行的CoreSimulatorService的进程。
rm -rf ~/Library/Developer/CoreSimulator/Devices
- 从所有模拟器中删除所有模拟器数据。
open /Applications/Xcode.app - 打开Xcode。

以上来自xcode 10的步骤已经过时,请使用以下步骤:

xcrun simctl shutdown all
关闭所有设备。

xcrun simctl list devices|grep -v "unavailable"|grep -Eo "[0-9A-F\-]{36}"
列出所有可用设备。

xcrun simctl list devices|grep -v "unavailable"|grep -Eo "[0-9A-F\-]{36}"|xargs xcrun simctl delete 删除所有设备(注意:这是一行代码)。

更多详情请查看 xcrun simctl help


2
在我的情况下,杀死进程是必要的,以解决问题。仅通过终端完成非常不错。 - Yevhen Dubinin
4
这个回答需要更新,并解释这个问题的原因,以及终端命令的作用。 - Sam Clewlow
那个方法可行,但现在我没有模拟器了。我该如何重新获取一组基本的模拟器呢?下载窗口中没有列出iOS 9.2模拟器,并显示其他模拟器已经下载完毕。 - arlomedia
我找到了它:窗口 > 设备 > + > 添加模拟器。 - arlomedia

21
在Xcode中,转到“窗口”->“设备”(快捷键为Cmd +!)。
在左侧窗格中,删除所有多余的模拟器设备(在左侧窗格中选择并按键盘上的删除键)。
通常这些是没有操作系统的设备(显示iOS:n/a)。
这通常发生在您尝试直接将旧版本的模拟器复制到SDK文件夹而不是从Xcode->首选项安装它们时。

好的,谢谢。但是如果我想复制旧模拟器,该怎么做呢? - Dharmbir Singh
请前往偏好设置 -> 下载,在“组件”下下载您所需的模拟器。 - Ameer Sheikh

16

如何修复

Xcode使用设备版本来消除具有相同名称的设备的歧义。如果两个设备具有相同的名称和版本号,则将使用设备的UDID。

您拥有多个相同设备(例如iPhone 5s)。我怀疑其中一些是针对相同的iOS版本。您应该删除其中一些重复项。查看xcrun simctl listxcrun simctl delete或在Xcode.app中使用设备管理器(单击“-”以删除设备)。

如何返回默认状态

# Ensure all possible clients of CoreSimulatorService are no longer running:

killall Xcode 2> /dev/null
killall Instruments 2> /dev/null
killall 'iOS Simulator' 2> /dev/null
killall Simulator 2> /dev/null
killall 'Simulator (Watch)' 2> /dev/null
killall ibtoold 2> /dev/null
killall simctl 2> /dev/null
# There may be others

# Kill the service itself
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService

# Remove all the data and logs
rm -rf ~/Library/*/CoreSimulator

为什么会出现这种情况:

CoreSimulatorService将监控 /Library/Developer/CoreSimulator/Profiles 中新模拟器运行时的添加(例如,从Xcode -> Preferences -> Downloads 下载)。当安装新的运行时,CoreSimulatorService将为该运行时创建一组初始设备。

如果有多个CoreSimulatorService实例同时运行,则会出现此问题。每个CoreSimulatorService实例都会创建自己的设备集(但其客户端起初只能看到该实例的设备集)。在随后的启动(例如:重新启动后),两个副本都将被看到。由于在与发布的Xcode.app相同的登录会话中测试Beta版本的Xcode.app或在更新App Store之后使用Xcode.app之前和之后使用Xcode.app,可能会出现多个CoreSimulatorService副本同时运行的状态。

如果您知道任何其他可能引起此错误的方式,请在http://bugreport.apple.com上报告一个新的雷达。


我已经删除了~/Devices/文件夹中的所有文件。但仍然收到这一个。 - Dharmbir Singh
你需要 SIGKILL 服务 ss(或者重启系统)。 - Jeremy Huddleston Sequoia
其他解决方案都没有起作用,但这个解决方案有效。对我来说,“*”是关键,因为还需要删除“〜/Library/Logs/CoreSimulator”。 - eremzeit
这对我有效。其他方法并没有完全解决我的问题。 - mohamede1945

0

前往窗口 -> 设备 (快捷键是Cmd+Shift+2) 在左侧窗格中,删除所有多余的模拟器设备(在左侧窗格中选择并按键盘上的删除键) 通常这些是没有操作系统的设备(显示iOS:n/a)。 这通常发生在您尝试直接将旧的模拟器版本复制到SDK文件夹中而不是从Xcode -> 首选项中安装它们时。


0
如@ameer-sheikh所提到的,前往“窗口”>“设备” 您可能有多个具有相同iOS版本的设备。我曾经遇到过同样的问题,在选择每个重复的设备并按下删除键后,我能够恢复我的设备下拉菜单的顺序。

-1

另一个答案中的bash命令可能更简单,但您可以尝试这个更简单但更复杂的解决方案:

gem install snapshot; snapshot reset_simulators

https://github.com/KrauseFx/snapshot

通过@saniul


尽管如此,当我这样做时,它会从我的beta Xcode 7安装中删除所有的模拟器,并且我的Xcode 7模拟器在启动时崩溃,因为它假定至少安装了一个模拟器。我不得不在设备窗口中创建一个Xcode 7模拟器。 - Steve Moser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接