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)中,菜单项是 Product → Show 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 Editor 和 Assistant 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】:没有什么对我有用,我的项目太大(将目标 c
、c++
、swift
和 java
文件与 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 卡在索引上的主要内容,如果未能解决你的问题,请参考以下文章