Xcode 卡在索引上

Posted

技术标签:

【中文标题】Xcode 卡在索引上【英文标题】:Xcode stuck on Indexing 【发布时间】:2012-11-29 16:09:19 【问题描述】:

我已经工作了 2 个月的项目无缘无故停止工作,因为 Xcode 卡在“索引”上。我不能再构建项目了。如果我尝试构建,Xcode 会冻结,我必须强制退出。这只发生在这个项目中。

我尝试清理所有派生数据,但没有帮助。

我使用的是 Xcode 4.5.2。

有什么想法吗?

【问题讨论】:

项目是否与某种版本控制相关联?当它与存储库链接时,它往往会定期检查源状态,然后为文件编制索引。如果您的项目很大,这可能会导致它陷入索引。 项目不大。今天我添加了框架 GameKit,但它一整天都运行良好。当我即将完成游戏中心的设置时,问题开始了。我说“索引 | 已处理 4 个文件中的 3 个”。有时“1 个文件中的 0 个”,有时 84 个文件中的 83 个......我想我将不得不创建一个新项目并复制和粘贴几乎所有内容。几个小时…… Apple 和它的厉害之处在 xcode 5 上也有同样的问题 我在 Xcode 9.1 上遇到了这个问题。 4年后他们仍然有同样的问题:| Xcode 10 GM 也 【参考方案1】:
    打开您的项目文件夹。 找到 ProjectName.xcodeproj 文件。 右键单击复制并粘贴到安全位置。 右键单击显示包内容。 找到 project.xcworkspace 文件并删除该文件。 重新打开您的项目并清理并重建。

如果您的问题没有解决,请用您的备份文件替换该文件。

【讨论】:

在 xcode 6.2 上的 *.xcodeproj 文件中找不到 project.xcworkspace 文件。 @aleksandar-vacic 的回答对我有用。 xcode 似乎仍然停留在“索引 | 等待 xcodebuild”,但是,当我点击播放时,它确实成功构建,所以就是这样。 您能否详细说明此文件的用途/与手头问题的关系? @marlonpya 我猜你正在使用 cocoapods,在这种情况下工作区文件与我正在谈论的文件是分开的。这里我说的是 .project 文件中的文件。希望这会有所帮助,但请务必在更改项目文件或工作区文件的任何内容之前进行备份。 在使用 cocoapods 时遵循相同的说明并打开根文件夹 .xcworkspace 文件【参考方案2】:

我遇到了类似的问题,Xcode 会花费大量时间进行索引,并且会经常挂起构建项目,此时我不得不强制退出并重新启动 Xcode。这很烦人。

然后我注意到项目中有一条关于不正确地将self 分配为代表的警告。果然,类声明中缺少协议。请注意,在 OP 的示例代码中有类似的分配(尽管无法从示例中判断是否声明了正确的协议):

leaderboardController.leaderboardDelegate == self;

解决该警告后(通过正确声明实现的协议),Xcode 停止了行为不端。另外,我应该注意到,自从实现了协议方法以来,该项目确实执行正确。只是 Xcode 无法确认该协议实际上应该由该类实现。

【讨论】:

【参考方案3】:
    从 Xcode 中关闭该项目 打开 Xcode Organizer,找到有问题的项目 删除管理器中的派生数据文件夹 关闭/重新打开 Xcode

在所有 Xcode 行为不端的情况下,首先尝试 Nuking 派生数据

【讨论】:

请注意,在 Xcode 6.4 中,您应该转到 Window → Projects 而不是 Organizer。 比接受的答案更简单的解决方案,谢谢! 派生数据在我机器上的 ~/Library/Developer/Xcode/DerivedData/ 中。 在较新的 Xcode 版本(例如 13.1)中,菜单项是 ProductShow Build Folder in Finder【参考方案4】:

同时停止运行应用程序。如果您的 xcode 正在运行另一个应用程序,请先停止它,然后您应该继续索引。

【讨论】:

【参考方案5】:

我遇到了这个确切的问题,它是由 20 项数组文字引起的。不得不切换到不同的语法。很傻。

【讨论】:

对我来说也一样。适用于阵列 4x4。数组 6x6 对 xcode 来说太多了……戏剧 @Jehan 你是对的,但是如果你定义了一个数组类型,那么我的问题就解决了。就像例如let propertyType : [[[String : String]]] = [ [ ["propertyKey":"All Types"], ["propertyKey":"House"] ], [["propertyKey":"Apartment & Unit"], ["propertyKey":"Townhouse"] ]....... So on 对我来说也一样。这对于 Apple 和 Xcode 来说绝对是奇怪和真正的失败 如何找出代码中编译器卡住的地方? @TomaszNazarenko - 请参阅下面的答案。您可以让 xcode 警告您有关代码耗时过长的问题。【参考方案6】:

在 Xcode 6.4 中有类似的问题。进度条指示“索引”已“暂停”。尝试删除 project.xcworkspace,然后如上所述删除派生数据。似乎没有帮助。注意到上面的帖子还建议修复警告,并且由于我继承了这个有 180 条警告的庞大项目,我对自己说,“这到底是什么看起来像是修复警告的好日子”。当我修复警告时,半小时后,我注意到“索引”进度条从 10% 增加到大约 20%。一个小时后,到了50%,又一个小时到了80%,又过了半个小时就完成了!结论:在上述建议中添加“吃午饭或午睡”。

【讨论】:

我认为这是我最后的选择。【参考方案7】:

当使用 Xcode 6 时,它说

等待制作

可能是 make 的一个实例已经在运行。终止进程和索引继续进行。很傻,但对我有用。

【讨论】:

这为我解决了问题。我有一个在后台运行“make start”的 Docker 容器。【参考方案8】:

我在 Xcode 7.0 beta 中遇到了同样的问题。 就我而言,PROJECT 和 TARGETS 的“构建设置”的“配置文件”和“产品包标识符”的值不同。 我为它们设置了相同的值。而且我还对“appName”和“appNameTest”的目标使用了相同的值。 然后关闭项目并重新打开它。 这解决了我的问题。

【讨论】:

【参考方案9】:

我遇到了类似的问题,发现我不小心将一个类定义为自己的子类。我没有收到任何警告或错误,但编译卡住了。

class mainClass : mainClass

    ...

【讨论】:

事实上,在我的情况下,这是索引卡住的解决方案。很好的答案! 为什么这会(有效地)导致 Xcode 的子进程崩溃,而不会像任何其他代码错误一样产生错误?【参考方案10】:

对我来说,完全关闭 Xcode 然后重新启动项目是可行的。

这不是原始问题的解决方案,我不相信,但在删除文件和文件夹等之前尝试更简单的事情。感谢 this answer 的想法。

【讨论】:

【参考方案11】:

就我而言,删除派生数据目录没有帮助。显然我有一个文件被另一个进程锁定了,因为在关闭了几个终端窗口和 emacs,并终止了一个 react-native 打包程序进程后,一切都解决了。

【讨论】:

同样,我之前中断了迦太基重建。显然,并非所有进程都停止运行,因此我认为保留了一些文件在使用中。关闭终端并关闭重新打开 XCode 就可以了。【参考方案12】:

对我来说,原因是我同时在 Primary EditorAssistant Editor 中打开了 same 文件。一旦我关闭了助理编辑器,它就通过了。 (Xcode 版本 7.2.1)

【讨论】:

【参考方案13】:

Command-Option-Shift-K 清理构建文件夹。

【讨论】:

请检查此URL 它将有助于提高您的内容质量【参考方案14】:

关闭你的 Xcode ,关闭任何打开的 git 客户端(源代码树或终端),最后重新启动你的项目。

【讨论】:

【参考方案15】:

我也遇到了这个问题。我注意到我打开了同一个项目两次。

所以 QuitXCode > 打开你的项目并确保只打开一个实例 > Clean > CleanBuild Folder in some cases > build.

它应该可以工作

【讨论】:

【参考方案16】:

按住 alt > 产品 > 清理构建文件夹

【讨论】:

【参考方案17】:

最近在 XCode 7.3.1 上遇到了这个问题 - 对我来说,我注意到 CleanMyMac3 的 RAM 使用率达到 100%。在我重新启动机器后,这个问题神奇地自行解决了。然而,平心而论,我已经尝试了接受的答案,所以你需要在重启之前做同样的事情,以防万一:-)

【讨论】:

【参考方案18】:

我通过简单地从我的设备中删除应用程序并重建来解决此问题。

【讨论】:

【参考方案19】:

我在 swift 2.2 中遇到了同样的问题

它与泛型函数重载函数有关

func warnLog() 
    print("Warning line: \(#line) file: \(#file) ")


func warnLog<T>(input:T? = nil) -> T? 
    print("Warning line: \(#line) file: \(#file) ")
    return input


func warnLog<T>(input:T) -> T 
    print("Warning line: \(#line) file: \(#file) ")
    return input

我需要做的就是删除一个未使用的重载

func warnLog<T>(input:T? = nil) -> T? 
    print("Warning line: \(#line) file: \(#file) ")
    return input

【讨论】:

【参考方案20】:

对我来说,我犯了一个愚蠢的错误。我这样写一个类:

class A: A 
.......

导致冻结的类继承自身。 Xcode 没有消息提示。

【讨论】:

这是一个很可能的原因。我的情况就是这样。我很确定我以前也遇到过这种情况。【参考方案21】:

这是一个 Xcode 错误(Xcode 8.2.1),我已向 Apple 报告,当您有一个大字典文字或嵌套字典文字时会发生这种情况。您必须将字典分解为更小的部分并使用 append 方法添加它们,直到 Apple 修复该错误。

【讨论】:

2021 年 10 月 Xcode 13.0 仍在发生【参考方案22】:

我的情况:不是 project.xcworkspace 文件,也不是 Derived Data 文件夹。

我浪费了很多时间。更糟糕的是,没有错误消息。 Xcode 方面没有任何线索。彻底迷路了。

最后这个函数(有10多个参数)负责。

func animationFrames(level: Float,
                     image: String,
                     frame0: String,
                     frame1: String,
                     frame2: String,
                     frame3: String,
                     frame4: String,
                     frame5: String,
                     frame6: String,
                     frame7: String,
                     frame8: String,
                     frame9: String,
                     frame10: String) 

发疯!事实是令人担忧(因为没有语法错误,或任何类型)

【讨论】:

【参考方案23】: 首先,断开网络连接。您的有线网络和无线网络都应该关闭。 其次,杀死com.apple.dt.SourceKitService 进程。然后 XCode 将重新开始索引而不是卡住。

【讨论】:

在 Xcode 10 中似乎被称为 com.apple.dt.SKAgent【参考方案24】:
    关闭所有打开的 Xcode rm -rf ~/Library/Developer/Xcode/DerivedData 右键单击您的 PROJECT_NAME.xc 工作区,选择“显示内容”,然后删除“xcuserdata”文件夹

【讨论】:

【参考方案25】:

这发生在我身上。如果您使用的是 cocoapods,请执行以下操作:

    删除 project.xcworkspace 在终端上使用“pod install”重新安装 pod 它将创建一个新的 project.xcworkspace 打开新的project.xcworkspace -> Clean -> Build

【讨论】:

谢谢。我在 xcode11.1 中遇到问题,它对我有用 Xcode 11.5 也出现了这个问题,这个问题也解决了。【参考方案26】:

对于 XCode 9.3 索引问题 - 卸载 XCode 并从零重新安装。对我有用。

【讨论】:

XCode 的大小不是几个 KB。它是几 GB。【参考方案27】:

如果您尝试解决索引问题并且您在页面下方这么远,请尝试另一件事!

尝试将此标志添加到您的构建设置中。

-Xfrontend -warn-long-expression-type-checking=400

如果编译器需要很长时间来推导复杂的表达式,则会导致警告。

这可能会导致构建错误,在您找到慢速表达式然后删除构建标志后,该错误就会消失。

【讨论】:

这是完美而准确的答案。 但现在我在构建过程中卡住了【参考方案28】:

当我的机器没有交换空间时,这个问题发生在我身上。关闭了几个程序和浏览器选项卡,构建在 30 分钟后突然成功。与我这边的派生数据、锁定文件等无关。

【讨论】:

【参考方案29】:

我在一些使用 Xcode 9.3.1 的项目中遇到过这个问题,在我的情况下,问题是由于某些原因 Xcode 不喜欢的快速代码造成的。这个问题很难解决,因为很难找到导致问题的文件。

当我遇到这个问题时,我会从 Xcode 项目中删除一些文件(删除引用)并尝试测试索引是否有效。我这样做的过程

    删除一些文件 关闭 Xcode 打开 Xcode 如果索引完成尝试重命名某些方法,如果可行,则可能是您删除的文件,它们对 Xcode 有一些奇怪的东西。

在我的例子中,我在同一个文件中有一个带有响应式扩展的类定义,由于某种原因 Xcode 不喜欢它,我将响应式扩展移动到另一个文件,现在索引工作正常。

【讨论】:

这是一个非常好的解决方案,因为即使在您尚未编写的代码中,它也可以识别瓶颈。在我的情况下,它是一个未维护的 pod/lib,我花了几天的时间来识别它,因为没有输出警告,即使使用“-Xfrontend -warn-long-expression-type-checking=300”标志也是如此。【参考方案30】:

没有什么对我有用,我的项目太大(将目标 cc++swiftjava 文件与 j2obj 合并)。我已经禁用了 Xcode 索引并且几个月没有代码完成工作(这很痛苦)。但最后我找到了解决方法。这个想法是保持 Xcode 对代码进行索引,但使用像 cputhrottle 这样的外部工具来限制其 CPU 使用率。

所以首先你需要在终端安装 cputhrottle

brew 安装 cputhrottle

然后像这样限制Xcode索引过程(20 = 20%)

sudo cputhrottle $(pgrep -f com.apple.dt.SKAgent) 20

我在此处公开了我的“解决方案”以及模式详细信息:How to prevent Xcode using 100% of CPU when indexing big projects

【讨论】:

这有帮助,尽管 cputhrottle 不再在自制软件中了。您可以改用 cpulimit,但语法略有不同:“sudo cpulimit -l 20 -p $(pgrep -f com.apple.dt.SKAgent)”——虽然我现在可以再次追踪(以前不可能),我更愿意找出索引需要这么长时间并从索引中跳过它,但我不知道它是什么,如何找出,或者如何跳过某些东西(我怀疑一些更大的链接二进制文件甚至提升? ? 我只编译C++,没有使用Swift).. 好的,我必须重新讨论这个问题。这似乎有帮助,但实际上我后来在使用 cpulimiting skagent 时遇到了一些奇怪的行为。无论如何,这只能解决症状,因此不推荐。 我还在用这个。另一种选择是完全禁用 Xcode 索引,但这对我来说是最糟糕的。如果我不这样做,Xcode 每次修改文件时都会保持 100% 的索引(基本上是 24 小时/24 小时),当我在编辑器中输入时,它每 2 秒打印 1 个字符,不可用。 嗯,这是解决问题的有效方法。如果这对你有用,那很好。完成后我遇到了 Xcode 崩溃/swod。然后我尝试了 Kijans 答案中的第 3 步(即不仅删除派生数据,而且从 .xcworkspace 中删除 .xcuserdata),现在一切都很好了。不知道那个..

以上是关于Xcode 卡在索引上的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 UITabbar 选择其他选项卡在索引 0 中显示它的标题

停止 xcode 索引

Xcode 10.3 模拟器卡在 Apple 徽标上

Xcode 11 卡在存档上

如何在 Xcode 中删除 Fetch 索引元素

Swift Xcode 索引冻结或缓慢