【问题标题】:Duplicate iPhone Simulators Appeared on My Xcode我的 Xcode 上出现了重复的 iPhone 模拟器
【发布时间】:2015-02-21 05:33:33
【问题描述】:

删除~/Library/Developer/Xcode/CoreSimulator文件夹后出现了重复的iPhone模拟器

如何解决这个问题?

我已尝试删除 ~/Library/Developer/Xcode 文件夹和 ~/Library/Application Support/iPhoneSimulator 文件夹。但都失败了。

【问题讨论】:

标签: xcode ios-simulator


【解决方案1】:

这可能是由于安装了多个 Xcode 或在 Xcode 升级期间发生的。唯一需要做的就是打开Xcode -> Window -> Devices 选择重复的设备并删除它。

【讨论】:

  • 谢谢!令我惊讶的是,我可以卸载 Xcode,删除 ~/Library/Developer 下的所有内容,重新安装 Xcode,这仍然会出现。我通常喜欢在我的 Windows 机器上保留我的魔法系统巫术状态。 :P
  • 像魔术一样工作!在某些时候,每个版本都有 3 个重复的模拟器 :)
  • 我希望我很久以前就知道这很容易。谢谢。 :)
  • 这可行,但由于某种原因,删除一个大约需要 10 秒。我有大约 100 个重复项,有什么方法可以加快速度吗?
【解决方案2】:

我有很多!设备太多无法一一删除,感谢苹果不包括多选。也不要双击删除,否则 Xcode 会崩溃。我找到了一个可以删除重复项的脚本,但是它仅在每种类型只有 1 个重复项时才有效,因此在我的情况下不起作用。因此,我编辑了脚本以简单地删除所有模拟器,然后您只需在“设备”窗口中单击加号即可添加所需的任何模拟器。

将以下内容另存为remove_all_sims.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
from subprocess import Popen, PIPE
from subprocess import call

p = Popen(["xcrun","simctl","list","devices"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
output, err = p.communicate(b"input data that is passed to subprocess' stdin")

blocks = re.split("--\s+(.*?)\s+--",output)

dic = {}

i=0
for block in blocks:

    matches = re.findall("iOS 8.4",block)    
    if len(matches)>0:
        content = blocks[i+1]

        lines = content.split("\n")
        for line in lines:
            line = line.strip()
            if len(line)>0:
                match = re.match("(.*?)\(",line)
                if match:
                    devicename = match.group(1)

                    idMatch = re.match(".*?\((.*?)\).*",line)

                    dic[devicename] = idMatch.group(1)
                    call(["xcrun","simctl","delete",idMatch.group(1)])
                    # print match.group(1)
                # print line

    i = i+1

for guid in dic.itervalues():
    call(["xcrun","simctl","delete",guid])

然后运行:

python remove_all_sims.py

注意它仅适用于 iOS 8.4 模拟器的硬编码。

【讨论】:

  • 这对我没有任何影响,即使在清空垃圾箱、退出 Xcode 并重新启动它之后。
  • 抱歉,我已经用脚本链接更新了我的答案以删除所有模拟器,然后您可以使用“设备”窗口中的加号按钮简单地重新创建您需要的任何内容..跨度>
  • 这对我有用并节省了我很多时间,因为我有很多重复项,以至于 Xcode 需要几秒钟才能在删除每个重复项后重新渲染列表。谢谢。
  • 请注意,如果您为多个 iOS 版本设置了模拟器,则需要多次运行脚本,方法是更改​​以下行: content = blocks[i+1] 并调整索引在我的情况下,对于块中的每个版本,我必须运行 3 次:<br/> - content = blocks[i+2]<br/> - content = blocks[i+4]<br/> - content = blocks[i+6]<br/>
  • 如果您为多个版本的 iOS 设置模拟器,则需要多次运行脚本,每次调整 content = blocks[i+1] 在我的情况下,我必须运行它 3 次,使用: content =块[i+2] 内容 = 块[i+4] 内容 = 块[i+6]
【解决方案3】:

安装 Xcode 测试版后我遇到了同样的问题。 我发现有几个解决方案可以解决这个问题。

1。快照

https://github.com/fastlane/fastlane/tree/master/snapshot

用法:gem install fastlane; fastlane snapshot reset_simulators

我用这个库解决了我的问题,它使用起来非常简单。

2。 Xcode->窗口->设备

您可以检查已安装的模拟器并将其删除。但是如果你有很多模拟器,时间会太长。

3。 xcrun simctl 删除

您可以在终端中使用 xcrun 命令。但是您需要使用命令输入特定的设备名称。

【讨论】:

  • 我使用了选项 1,这是一个很好的结果。谢谢
  • 我也是,选项 1。这为我节省了很多时间。 :D
  • reset_simulators 也删除了我的 iOS 7 模拟器 :-(
  • 不知何故,我最终在我的系统上安装了 1380 个(!)模拟器,并且快照 reset_simulators 也为我工作。运行需要一点时间,但比手动执行任何操作要快得多。 :)
  • 胜利的快车道,没想到snapshot能做出如此美妙的事情。感谢您的 1 班轮。 :)
猜你喜欢
  • 2015-07-12
  • 2016-02-07
  • 2014-11-15
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2013-09-07
相关资源
最近更新 更多