Swift Xcode索引冻结或慢速

时间:2014-10-21 18:49:38

标签: swift indexing osx-yosemite aws-sdk xcode6.1

也许这只是我遇到这样一个烦人的“功能”:

从Xcode 6.0.1升级到Xcode 6.1后,情况发生了变化。 Xcode 6.1永远索引项目或编译源文件。该项目不是一个巨大的项目。它只包含工作区中的一堆Swift文件和AWS SDK 2.0 Cocoapods。我不认为它应该阻止整个索引和编译顺利。我尝试了一些aws-sdk-ios-samples,只是为了看看Xcode 6.1如何在它们上工作,它最终会在同一个永远等待。

到目前为止我尝试了哪些解决方案:

  1. 在管理器中删除“派生数据”,然后重新打开和工作区。 (未能修复)
  2. 在.xcodeproj文件中显示“包内容”并删除.xcworkspace,如(Xcode 4 - slow performance
  3. 不幸的是,他们都没有工作。

    P.S。也许我应该尝试重新创建项目? 我的电脑设置: MacBook Pro(Retina,13英寸,2014年中),内存8 GB 1600 MHz DDR3,优胜美地。 (我认为这足以运行这个小项目。)

25 个答案:

答案 0 :(得分:70)

我尝试了上面的许多建议,包括拆分文件,安装Xcode 6.2 beta和打破字符串连接语句。对我来说最后做的是将我用于测试数据的字典数组声明分成多个.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" ])

此外,对于它的价值,这个阵列中的第6个条目是导致我的问题的原因;五件作品就好了。

答案 1 :(得分:33)

对我来说唯一可行的解​​决方案是删除所有派生数据(不仅是当前项目,只是清理整个文件夹),然后重新启动Xcode。

  1. 在Xcode中打开文件/首选项

  2. 点击弹出窗口最右侧的位置

  3. 点击" / Users / Mac / Library / Developer / Xcode / DerivedData"旁边的小箭头图标,它会带您进入包含DerivedData文件夹的Xcode文件夹(它包含以前项目中的所有派生数据。)

  4. 删除DerivedData文件夹

答案 2 :(得分:11)

你在使用CocoaPods吗?我今天早些时候遇到了同样的问题。 (使用xCode 6.1.1)

要解决此问题,我删除了~/Library/Developer/Xcode/DerivedData,项目目录中Pods文件夹和<project>.xcworkspace中的所有内容。

然后我打开终端,导航到我的项目目录,然后再次运行pod install

答案 3 :(得分:8)

今天有同样的问题。 Xcode 6.3.2,中型Swift项目。有一次它开始索引,它永远不会完成索引。导致这种情况的代码是[String:[String]]类型的字典,因此字符串键dict以字符串数组作为值。我有两个带有从A到Z的键,这26个条目中的每一个都包含一个包含5到10个字符串的字符串数组。

清除派生数据没有帮助。只是评论出这些说法才能再次出现。

老实说,这太荒谬了! Apple需要修复Xcode!编译Swift项目时已经非常慢了,但是像这样的bug是一个显而易见的问题。我不能正确地完成我的工作!

答案 4 :(得分:6)

对于那些仍然遇到这个问题的人来说,这是一种我已经开始享受的解决方法,可以防止您逐个输入对象:

E/NetdConnector(  367): NDC Command {51 bandwidth removeiquota eth0} took too lo
ng (559ms)
E/NetdConnector(  367): NDC Command {53 bandwidth setiquota eth0 922337203685477
5807} took too long (1037ms)
E/NetdConnector(  367): NDC Command {55 bandwidth setiquota eth0 922337203685477
5807} took too long (1230ms)
E/memtrack(  890): Couldn't load memtrack module (No such file or directory)
E/android.os.Debug(  890): failed to load memtrack module: -2
E/installd(   61): dexopt in='/data/app/com.ionicframework.test638461-1.apk' out
='/data/dalvik-cache/data@app@com.ionicframework.test638461-1.apk@classes.dex' r
es=65280

答案 5 :(得分:4)

对我来说,我尝试了以上所有但没有成功;但我所要做的就是删除派生数据文件夹,然后打开另一个随机项目,等待它编制索引,现在我的原始(故障)项目正常工作!

让开发世界成为一个受欢迎的苹果并让你的快速编译器开源 - 所以我们并不是因为你的无能而受挫。

答案 6 :(得分:3)

我正在使用Xcode版本7.3(7D175)

我想我可能已经找到了潜在的问题。在那里我陷入索引阶段的两个实例:

  • 我创建了一个我赋给变量的闭包,省略了类型签名。我认为xcode在该类型推理步骤中存在问题。如果我没记错的话,其中一个参数是CGPoint,它有一个重载的构造函数。我的假设是,我的闭包可能接受的可能性太多了。

  • 我重构了一个工厂方法,使得它不是返回一种类型的实例,而是返回具有公共基类的多种类型的实例。似乎无论我在哪里使用工厂方法,我都必须将结果对象强制转换为特定类型(使用as?或将其分配给接受特定类型的变量)同样,类型推断步骤似乎已被破坏。 / p>

早期个人提到的字典声明似乎也是如此。我向苹果提交了一份错误报告。

答案 7 :(得分:2)

Xcode 11.5(11E608c)仍然是相同的问题,距原始问题6年之后。 我希望我可以在这个问题上“标记”苹果,以便他们可以看到这个烂摊子。 这是一个很大的项目(> 1000个文件),我不知所措,所以当我发现冻结索引时,我更改了100多个文件,无法返回。

我已经尝试了一切:

  1. 清除衍生数据并构建
  2. 重新启动xcode,重新启动mac
  3. 删除并添加源
  4. 搜索了字典文字等,

问题是数组创建:

private var overlayColors: [UIColor] = [UIColor(hex: "#b71c1c"), UIColor(hex: "#4a148c"),
                                        UIColor(hex: "#880e4f"), UIColor(hex: "#1de9b6"),
                                        UIColor(hex: "#f50057"), UIColor(hex: "#311b92"),
                                        UIColor(hex: "#f44336"), UIColor(hex: "#651fff"),
                                        UIColor(hex: "#d500f9"), UIColor(hex: "#3d5afe"),
                                        UIColor(hex: "#bf360c"), UIColor(hex: "#0d47a1"),
                                        UIColor(hex: "#006064"), UIColor(hex: "#2979ff"),
                                        UIColor(hex: "#ff6f00"), UIColor(hex: "#1a237e"),
                                        UIColor(hex: "#795548"), UIColor(hex: "#004d40"),
                                        UIColor(hex: "#00e676"), UIColor(hex: "#01579b"),
                                        UIColor(hex: "#33691e"), UIColor(hex: "#827717"),
                                        UIColor(hex: "#76ff03"), UIColor(hex: "#ffc400"),
                                        UIColor(hex: "#e65100"), UIColor(hex: "#00b0ff"),
                                        UIColor(hex: "#ff3d00"), UIColor(hex: "#616161"),
                                        UIColor(hex: "#263238"), UIColor(hex: "#ff1744")]

帮助我发现不良的swift文件的原因是当xcode冻结索引时,我执行了以下步骤

  1. 打开活动监视器->“快速”进程->显示进程信息->打开文件和端口。这将为您提供此过程正在运行的文件的列表,以深入分析可能的不良文件列表
  2. 此脚本SOURCEKIT_LOGGING=3 /Applications/Xcode.app/Contents/MacOS/Xcode &> ~/Documents/xcode.log是另一个方便的工具,它将以3级详细级别启动Xcode并开始在日志文件中记录。
  3. 在日志文件中搜索快速文件的最后条目,例如: “ my_project / Source / App /”

这不是完整的解决方案,但深入挖掘并了解外观会有所帮助。

open activity monitor -> "swift" process ->show process info -> open Files and Ports.

答案 8 :(得分:2)

升级到6.1后我遇到了同样的问题。 Xcode会在没有生成特定错误消息的情况下卡住编译或索引。

通过将swift文件中的一些较长表达式分解为多个较短的表达式,最终解决了该问题。我的程序的一部分组合了许多不同的字符串变量以形成更长的字符串尝试将它们组合在单个表达式中并使用添加赋值运算符都失败了。通过执行类似于以下(简化)的操作,我能够使其工作:

var a = "Hello"
var b = " "
var c = "World"
var d = "!"
var partA = a + b
var partB = c + d
var result = partA + partB

我在之前的Xcode版本中多次收到以下错误 “表达太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式。”

希望这有帮助

答案 9 :(得分:2)

我一直在努力解决同样的问题。我已经尝试了提到的两个解决方案(删除派生数据和删除.xcworkspace)但没有成功。我还尝试慢慢地逐步删除大部分代码并删除文件,直到几乎没有任何东西留下来并且索引仍然卡住了。

我确实找到了一个对我有用的解决方案,我用旧的Xcode Version 6.1(6A1030)打开了这个项目,它没有问题索引,然后回到我之前使用的最新的Xcode Version 6.1(6A1052d)索引是固定的,并继续运作良好。

我的结论是,这是Xcode版本6.1(6A1052d)的一个错误,我希望将来会有所改进。

问题确实偶尔回来,每次都有相同的修复方法。我想另一个解决方案就是坚持使用较旧的Xcode Version 6.1(6A1030),但它不适用于运行iOS 8.1的设备,并且它不会有最新的错误修复。

答案 10 :(得分:1)

在我的Xcode上解决方案是关闭所有冗余窗口。由于某些原因,许多打开的窗口使XCode非常慢。

答案 11 :(得分:1)

对我来说,我删除了Xcode应用并再次下载并安装它。这解决了这个问题,至少现在已经解决了。

答案 12 :(得分:1)

Xcode索引通常为您的代码提供建议和自动完成,例如帮助您在故事板中,反之亦然。 但为了加快您的xcode项目,您可以通过终端

关闭/打开它

关闭索引
       defaults write com.apple.dt.XCode IDEIndexDisable 1 打开索引 defaults write com.apple.dt.XCode IDEIndexDisable 0

但更好的方法是使用具有良好RAM的快速mac。

答案 13 :(得分:1)

我用Xcode 8.3.3尝试了这个。以下是我的结果:

您可以编写完美的Swift代码,这将导致索引挂起。

一旦索引挂起,它就会挂起。将Swift代码更改回不会导致索引挂起的内容并没有帮助,它仍然会挂起。

关闭项目并重新开放对那种情况没有帮助。

退出Xcode并重新启动它有帮助。索引将不再挂起(即如果您将代码更改回不会使其挂起的内容)。

重启Mac也有帮助,尽管不需要。

悬挂是由完美的Swift代码引起的。我看起来像一个例子

if let date = function1()
?? function2()
?? function3()
?? function4()
?? function5()
?? function6()
?? function7()
?? function8()
?? function9()
?? function10() {
    return date
}

索引会挂起。我评论了大部分&#34; ??&#34;行和它很好(退出和重新启动Xcode后)。取消注释一行接一行。有一些行很好,然后取消注释下一行将使它挂起。

显然唯一有帮助的是更改代码。

答案 14 :(得分:1)

最后,我&#34;解决了#34;问题,虽然这只是一种解决方法。

我创建了另一个项目并逐个添加文件。然后我发现了一个非常长的&#34; viewcontroller.swift文件。然后我将其代码分解为模块,并将这些重复使用的代码转换为另一个swift文件中的函数。而且,我在网上得到的建议是,应该将长表达式分解为较短的表达式。然后,索引工作和编译工作。

所以现在,我已经解决了#34;。

但我不认为这是对的。 Xcode IDE应该能够处理我的&#34;非常长的&#34; swift文件,只有1500行。我相信这绝对是一个错误(存在很长时间),尽管Xcode 6.1已经从Xcode 6.0.1升级了。

答案 15 :(得分:0)

如果你不介意回到6.0.1,直到他们弄明白,这对我有用。我和6.1和6.1.1都有同样的问题。现在我很好。当它出来时我会尝试6.2。

您可以在官方开发网站上找到以前版本的Apple软件,此处: https://developer.apple.com/downloads/index.action

如果这样做,请务必先删除当前的Xcode副本。

答案 16 :(得分:0)

我在相同的MacBook Pro上使用Xcode 6.1.1和swift文件。

当我不断在3D字符串数组中添加行时,Xcode突然变得无法使用,现在我什么也做不了。

将尝试恢复到6.1并希望问题会消失。

答案 17 :(得分:0)

您可能希望更新到Xcode 6.1.1

它已正式发布并为我们解决了索引问题。在更新说明中,它表示他们已经应用了稳定性修复,因此它很可能会以更稳定的方式运行。

祝你好运这个传奇!

答案 18 :(得分:0)

Xcode 6.2 beta为我解决了这个问题。不闪电,但至少它不会永远索引。测试版安装在常规Xcode安装的顶部,所以如果你不喜欢测试版,你可以删除它。

Various Xcode downloads including the beta >

答案 19 :(得分:0)

我在Xcode 6.3.2中看到了这一点。我真的希望在发布一年之后,他们会让编译器工作,但是唉。

如果上述解决方案都不起作用,请尝试检查代码中的语法错误。在重构过程中,我提取了一个闭包,但忘了限定参数:

    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工作中学到了什么,那就是以增量方式工作,以避免过多地回溯以找到有问题的代码。

答案 20 :(得分:0)

我也遇到过这个问题,并通过使用&#34; +&#34;删除/更改表达式来解决它。运营商。

我发誓改变这个:

var mainArray = arrayOne + arrayTwo + arrayThree + arrayFour + arrayFive

对此:

var mainArray = arrayOne
mainArray += arrayTwo
mainArray += arrayThree
mainArray += arrayFour
mainArray += arrayFive

解决了这个问题。我意识到这听起来很疯狂,但对我来说却是如此。

我的机器是2013年末最大的MBP

答案 21 :(得分:0)

  1. 您的索引状态是“指标圈”还是“进度条”?
  2. 如果是“指标圈”,则表示它已经停留在开头。
  3. 打开并检查您的其他项目,如果它们完全相同,那就意味着系统问题。
  4. 只需重新启动计算机,一切都会好起来的。

答案 22 :(得分:0)

我使用Xcode 8.2也结束了这个问题。它是在我定义了一个复杂的元组变量之后开始的 - 一个带有元组子阵列的元组数组。当元组的子阵列具有以编程方式计算的属性时,事情变得非常缓慢。

正如其他一些答案所指出的那样,索引需要永远,我相信它正在尝试推断变量的类型。

我首先通过清楚地定义包含类型的变量来解决问题。更新属性时,我首先计算它,然后将其分配给元组,而不是计算定义变量。

这是一个示例代码。

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推断出复杂的结构。

答案 23 :(得分:0)

我遇到了同样的问题。我的xCode是8.2.1。但在我的情况下,我想创建一个包含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)

}

答案 24 :(得分:0)

我的表情像:

let x = (value as? Int) ?? someDefault

guard let x = (dateFormatter().string(from: Date()) + msg + "\n").addingPercentEncoding(...) else { ... }

因此,重点是重写您的文件以仅包含幼儿园级别的表达式,并且索引问题将消失。