快速XCode指数冻结或缓慢
也许这只是我遇到这样一个恼人的“function”:
从Xcode 6.0.1升级到Xcode 6.1后,情况发生了变化。 Xcode 6.1永远索引项目或编译源文件。 该项目不是一个巨大的。 它只包含工作区中的一堆Swift文件和AWS SDK 2.0 Cocoapods。 我不认为它应该防止整体索引和编译顺利。 我尝试了一些aws-sdk-ios-samples,只是看看Xcode 6.1是如何工作的,而且最终还是会一直等待下去。
我迄今为止所尝试的解决scheme是:
- 在pipe理器中删除“派生数据”,重新打开工作区。 (不能修复)
- (xcode 4 – 性能下降 ).xcodeproj文件中的“显示软件包内容”并删除.xcworkspace。
不幸的是,他们都没有工作。
任何想法? 还是有类似的经历?
PS也许我应该尝试重新创build项目? 我的电脑设置:MacBook Pro(视网膜,13英寸,2014年中),内存8 GB 1600 MHz DDR3,优胜美地。 (我认为这足以运行这个小项目。)
我尝试了上面的许多build议,包括拆分文件,安装Xcode 6.2 beta,以及打破string连接语句。 最后我做了什么是分裂一个字典的声明我正在使用testing数据到多个.append
语句的数组。
// This causes indexing/building to hang... var test = [ [ "a": false, "b": "c" ], [ "a": false, "b": "c" ], [ "a": false, "b": "c" ], [ "a": false, "b": "c" ], [ "a": false, "b": "c" ], [ "a": false, "b": "c" ] ] // This works fine. var test = [ [ "a": false, "b": "c" ] ] test.append([ "a": false, "b": "c" ]) test.append([ "a": false, "b": "c" ]) test.append([ "a": false, "b": "c" ]) test.append([ "a": false, "b": "c" ]) test.append([ "a": false, "b": "c" ])
另外,对于它的价值,这个数组中的第六个条目是什么导致我的问题; 五件作品蛮好的。
我唯一的工作解决scheme是删除所有派生的数据(不仅为当前的项目,只是清理整个文件夹),然后重新启动Xcode。
-
在Xcode中打开文件/首选项
-
点击popup窗口最右侧的位置
-
点击“/Users/Mac/Library/Developer/Xcode/DerivedData"….it”旁边的小箭头图标,您会看到一个Xcode文件夹,其中包含一个DerivedData文件夹(其中包含您之前项目中的所有派生数据。)
-
删除DerivedData文件夹
你在用CocoaPods吗? 今天早些时候我碰到了同样的问题。 (使用xCode 6.1.1)
为了解决这个问题,我删除了~/Library/Developer/Xcode/DerivedData
,我的项目目录中的Pods
文件夹和<project>.xcworkspace
。
然后我打开terminal,导航到我的项目目录,并再次运行pod install
。
今天有同样的问题。 Xcode 6.3.2,中型Swift项目。 有一次,它开始索引,它永远不会完成索引。 导致这种情况的代码是一个types为[String:[String]]的字典,所以string键字典用string数组作为值。 我有两个从A到Z的键,这26个条目中的每一个都包含一个带有5到10个string的string数组。
清除派生的数据没有帮助。 只有评论这些话才能使它重新出现。
老实说,这太可笑了! 苹果需要修复Xcode! 编译Swift项目时速度已经非常慢了,但是像这样的错误是一个不争的事实。 我不能用这个做好我的工作!
对于那些仍然有这个问题,这是一个解决方法,我来享受,这将阻止你必须逐一input对象:
// instead of this, which freezes indexing let keys = [keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM] // and instead of this, which is ugly & lengthy var keys = [KeyboardKey]() keys.append(keyQ) keys.append(keyW) ... keys.append(keyM) // use this: var keys = [KeyboardKey]() keys.appendContentsOf([keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM])
对于我来说,我尝试了上述所有都没有成功, 但我所要做的只是删除派生的数据文件夹,然后打开另一个随机项目,等待它索引,现在我原来的(失灵)项目工作!
让开发世界青睐苹果,并让你的swift编译器开源 – 所以我们并不是都被你的无能打败了。
我正在使用Xcode版本7.3(7D175)
我想我可能已经找出了一个潜在的问题。 那里有两个我陷入索引阶段的例子:
-
我创build了一个闭包,我分配给一个variables并省略了types签名。 我认为Xcode有types推断步骤的问题。 如果我没有记错,其中一个参数是CGPoint,它有一个重载的构造函数。 我的假设是,我的闭包可能接受的论点有太多的可能性。
-
我重构了一个工厂方法,而不是返回一个types的实例,它可以返回具有公共基类的许多types的实例。 看来,无论我在哪里使用工厂方法,我不得不将结果对象转换为特定的types(使用as?或者将其分配给接受特定types的variables)。types推断步骤似乎被破坏了。
似乎跟前面的个人提到的字典声明一样。 我向苹果提交了一个错误报告。
升级到6.1后,我遇到了同样的问题。 Xcode会卡住编译或索引,而不会产生一个特定的错误信息。
这个问题最终通过将swift文件中的一些较长的expression式分解成多个较短的expression式来解决。 我的程序的一部分结合了许多不同的stringvariables来形成一个更长的字符 尝试将它们组合在单个expression式中,并使用添加赋值运算符都失败。 我能够通过类似于以下(简化)的方式使其工作:
var a = "Hello" var b = " " var c = "World" var d = "!" var partA = a + b var partB = c + d var result = partA + partB
我从之前的Xcode版本中多次收到以下错误中得到了这个想法:“expression太复杂,无法在合理的时间内解决;考虑将expression式分解成不同的子expression式。
希望这可以帮助
我一直在努力解决同样的问题。 我已经尝试了两种解决scheme(删除派生的数据和删除.xcworkspace)没有成功。 我也试着慢慢评论大部分的代码,并删除文件,直到几乎没有任何遗留和索引仍然卡住。
我find了一个解决scheme,我已经打开了一个旧的Xcode版本6.1(6A1030)没有问题的索引,然后回到我以前使用的最新的Xcode版本6.1(6A1052d)的项目和索引是固定并继续良好地工作。
我的结论是,这是一个Xcode版本6.1(6A1052d)的错误,我希望在将来的版本中有所改进。
偶尔会出现问题,每次修复都是一样的。 我想另外一个解决办法就是坚持使用老版本的Xcode版本6.1(6A1030),但不能用于运行iOS 8.1的设备,并且不会有最新的错误修复。
最后,我“解决”了这个问题,尽pipe这只是一个解决方法。
我创build了另一个项目,并逐个添加文件。 然后我发现了一个“非常长”的viewcontroller.swift文件。 然后我把它的代码分解成模块,并将这些重复使用的代码转换成另一个快速文件的函数。 另外,我在网上提出了这个build议,应该把长expression式分解成更短的expression式。 然后,索引工作和编译工作。
所以现在,我已经“解决”了。
但是,我不认为这是正确的。 Xcode IDE应该能够处理我“非常长”的swift文件,只有1500行。 我相信这绝对是一个bug(存在很长一段时间),虽然Xcode 6.1已经是从Xcode 6.0.1升级。
对我来说,我删除了Xcode应用程序,并再次下载并安装它。 这至less在现在解决了这个问题。
在我的Xcode解决scheme是closures所有冗余窗口。由于某些原因,许多打开的窗口使XCode非常缓慢。
Xcode的索引通常为您的代码的build议和自动完成其他事情,如帮助你在故事板,反之亦然。 但是为了让您的xcode项目更快,您可以通过terminalclosures/打开它
closures索引
默认写com.apple.dt.XCode IDEIndexDisable 1打开索引的默认值write com.apple.dt.XCode IDEIndexDisable 0
但更好的方法来使用具有良好RAM的快速mac。
我已经用Xcode 8.3.3试过了。 这是我的结果:
你可以编写完美的Swift代码,这将导致索引挂起。
索引挂起后,挂起。 将Swift代码更改回不会导致索引挂起的东西没有帮助,它仍然挂起。
在这种情况下closures项目并重新打开不起作用。
退出Xcode并重新启动它有帮助。 索引不会再挂起(也就是说,如果将代码更改为不会挂起的东西)。
重新启动您的Mac也会有所帮助,尽pipe这不是必需的。
悬挂是由完美的Swift代码造成的。 我看起来像一个例子
if let date = function1() ?? function2() ?? function3() ?? function4() ?? function5() ?? function6() ?? function7() ?? function8() ?? function9() ?? function10() { return date }
索引会挂起。 我评论了大部分的“??” 行,这是罚款(退出和重新启动Xcode后)。 不注意一行接一行。 有一些线路是好的,然后取消注释下一行将使其挂起。
唯一明显的帮助就是改变你的代码。
我也遇到了这个问题,并通过用“+”运算符去除/更改expression式来解决这个问题。
我发誓改变这个:
var mainArray = arrayOne + arrayTwo + arrayThree + arrayFour + arrayFive
对此:
var mainArray = arrayOne mainArray += arrayTwo mainArray += arrayThree mainArray += arrayFour mainArray += arrayFive
解决了这个问题。 我意识到这听起来很疯狂,但对我来说却是如此。
我的机器是2013年末MBP最高的
Xcode 6.2testing版为我解决了这个问题。 不是闪电般的,但至less它不是永远的索引。 testing版不会安装在常规Xcode安装的顶部,所以如果您不喜欢testing版,您可以将其删除。
包括beta版在内的各种Xcode下载
你可能希望更新到Xcode 6.1.1
它已经正式发布,并解决了我们的索引问题。 在更新描述中,它表示他们已经应用了稳定性修补程序,所以它很可能会以更稳定的方式运行。
祝你好运这个传奇!
如果你不介意回到6.0.1,直到找出来,那对我来说就是这样。 我在6.1和6.1.1都遇到同样的问题。 现在我很好。 当它出来时,我会试试6.2。
你可以在他们的官方开发网站上find以前版本的苹果软件,在这里: https : //developer.apple.com/downloads/index.action
如果你这样做,一定要先删除你当前的Xcode副本。
我正在使用Xcode 6.1.1和MacBook Pro上的swift文件。
当我不停地向3Dstring数组中添加行时,Xcode突然变得无法使用,现在我什么也做不了。
将尝试恢复到6.1,希望问题将消失。
我在Xcode 6.3.2中看到了这个。 我真的希望在发布一年之后,编译器能够正常工作,但是可惜。
如果以上解决scheme都不适用,请尝试检查代码是否存在语法错误。 在重构的过程中,我提取了一个闭包,但忘记了限定参数:
let hangsInsteadOfError = { l, r in return l.nameFirst < r.nameFirst || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast } let fixingErrorAvoidsHang = { (l:User, r:User) -> Bool in return l.nameFirst < r.nameFirst || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }
如果我从Swift中学到了什么东西,那就是逐步工作,避免为了find有问题的代码而回溯太多。
- 您的索引状态是“指标圈”还是“进度栏”?
- 如果是“指标圈”,那就意味着它已经陷入了一个开始。
- 打开并检查你的其他项目,如果他们都是一样的,这意味着这是一个系统问题。
- 只要重新启动电脑,一切都会好的。
我使用Xcode 8.2,并在这个问题结束。 它是在我定义了一个复杂的元组variables(tuple)和一个元组arrays之后开始的。 当元组的子数组具有以编程方式计算的属性时,事情变得非常缓慢。
正如其他一些答案指出的那样,索引是永久的,我相信它试图推断出variables的types。
我首先通过明确定义包含types的variables来解决问题。 当更新属性时,我先计算它,然后将其分配给元组,而不是在定义variables时进行计算。
这是一个示例代码。
var sectionTuples: [(section: String, rows: [(name: String, subtitle: String)])] = [] let subtitle1: String = "" // something calculated dynamically let subtitle2: String = "" // something calculated dynamically sectionTuples = [( section: "Section 1", rows: [ (name: "name1", subtitle: subtitle1), (name: "name2", subtitle: subtitle2) ])]
底线是不要让Xcode推断复杂的结构。
我有同样的问题。 我的xCode是8.2.1。 但在我的情况下,我想创build一个包含33个键值对的字典数组。 我正在按照下面的方式在做索引:
var parameter = [String : AnyObject]() var finalArray = [parameter] for item in listArray { parameter = ["A": item.a as AnyObject, "B": item.b as AnyObject, "C": item.c as AnyObject, ... , "Z": item.z as AnyObject] finalArray.append(parameter) }
以下为我工作:
var parameter = [String : AnyObject]() var finalArray = [parameter] for item in listArray { parameter["A"] = listArray.a as AnyObject parameter["B"] = listArray.b as AnyObject parameter["C"] = listArray.c as AnyObject parameter["D"] = listArray.d as AnyObject . . . parameter["Z"] = listArray.z as AnyObject finalArray.append(parameter) }