重复的iPhone模拟器出现在我的Xcode上

时间:2014-12-23 04:43:33

标签: xcode ios-simulator

删除~/Library/Developer/Xcode/CoreSimulator文件夹

后,出现了一个重复的iPhone模拟器

Duplicate iPhone Simulators

如何解决这个问题?

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

3 个答案:

答案 0 :(得分:55)

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

答案 1 :(得分:32)

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

1。快照

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

用法:gem install fastlane; fastlane snapshot reset_simulators

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

2。 Xcode->窗口 - >设备

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

3。 xcrun simctl delete

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

答案 2 :(得分:5)

我有点儿了!在设备中逐个删除太多,感谢Apple不包括多选。不要双击删除,否则您将崩溃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模拟器的硬编码。

Many duplicates