Xcode 6:构建挂起并且 Interface Builder Cocoa Touch Tool 开始分配所有 RAM

Posted

技术标签:

【中文标题】Xcode 6:构建挂起并且 Interface Builder Cocoa Touch Tool 开始分配所有 RAM【英文标题】:Xcode 6: Build hangs and Interface Builder Cocoa Touch Tool starts allocating all RAM 【发布时间】:2014-10-02 20:58:25 【问题描述】:

我遇到了一个问题,但我无法通过在此处或在 Google 上搜索找到解决方案。

我正在构建一个由多个开发人员共享的项目。出于某种原因,我是唯一一个遇到这个问题的人。我检查了几次代码,甚至重新安装了 Xcode。

所以发生的情况是,当我构建项目时,构建过程会永远挂起。一个名为“Interface Builder Cocoa Touch Tool”的进程运行并开始累积 RAM,直到达到 Mac 的限制(即 16 GB)。此时,只要我看到我终止进程并且构建失败。

在控制台应用程序上我看到了这个:

2014-10-02 4:45:16.013 PM Interface Builder Cocoa Touch Tool[875]: BUG in libdispatch client: kevent[EVFILT_VNODE] add: "Bad file descriptor" - 0x9
2014-10-02 4:45:17.956 PM Interface Builder Cocoa Touch Tool[875]: assertion failed: 13F34: libxpc.dylib + 29453 [75E30F22-514B-3A20-B82C-EDA43AF5C35C]: 0x8d

在 Xcode 上,我看到构建卡在“Compiling 1 of 1 story board files”或“Compiling 1 of 1 assets catalogs”上。

即使我停止构建,“Interface Builder Cocoa Touch Tool”进程仍将继续运行并积累 RAM。

我确实看到了两个与故事板相关的警告:

Base.lproj/MainStoryboard.storyboard Frame for "Scroll View" will be different at run time.
Base.lproj/MainStoryboard.storyboard: warning: Unsupported Configuration: Prototype table cells must have reuse identifiers

我看到两个资产警告:

../Images-2.xcassets: A 57x57 app icon is required for iPhone apps targeting releases of ios prior to 7.0
../Images-2.xcassets: A 57x57@2x app icon is required for iPhone apps targeting releases of iOS prior to 7.0

但我不认为这些是原因。

这里是 Xcode 和 Mac 的信息:

2.5 Ghz,带有 16 GB 内存的酷睿 i7。 操作系统 X 10.9.5。 Xcode 6.0.1。

欢迎任何帮助。

谢谢。

【问题讨论】:

我的 system.log 中的 Interface Builder Cocoa Touch Tool 出现了同样的 2 个错误。就我而言,当我尝试在某些项目中打开故事板时,我看到了这种情况。活动指示器旋转了几秒钟,然后我返回登录屏幕,系统崩溃了(Apple 尽一切努力隐藏这个事实)。重新登录,我所有的窗口都打开了,包括 Xcode(回到故事板之前打开的文件)。其他开发人员在相同项目中打开相同的故事板时没有发现此问题。 虽然,我在打开 Xcode 时看到了同样的 2 个错误,即使它没有崩溃。所以他们可能是无关的。我没有看到任何其他指向我遇到的问题的日志项。 @JeffLockhart 您可以打开活动监视器并在单击该文件时检查那里。如果你看到 IB 进程开始分配内存,你可以杀死它。 进程在崩溃之前不会在内存中增加太多。在我尝试打开情节提要之前,它使用了 ~515 MB。在屏幕变灰并让我返回登录之前,它会攀升至约 530 MB。我有 8 GB 的 RAM。 您的内存增加到 530 MB?哈!我的攀升至 24 GB。苹果如何向开发人员发布像 Xcode 这样半生不熟的软件是一个谜。 Xcode 从第 4 版开始是半熟的。 【参考方案1】:

我遇到了完全相同的问题:在 xcode 中打开故事板会导致沙滩球,而 Interface Builder 任务会消耗所有内存。我通过编辑故事板文件的 xml 和设置让它恢复工作

useAutolayout="NO"

在文档节点中。当然,这不是问题的解决方案(这似乎是 xcode 中的一个错误),因为它破坏了所有约束,但至少我可以再次打开并编译情节提要。

【讨论】:

同意关闭自动布局可以解决问题,但正如您所说,这并不是真正有用的解决方法 关闭自动布局会完全弄乱 Storyboard 中的 UI 吗? (这里有同样的问题)@MobileVet 当我尝试在现有 XIB 上启用自动布局时,我遇到了这个问题。我必须重新启动计算机才能恢复正常状态。【参考方案2】:

显然,有一个损坏的 .xib 文件。 我恢复了编译时卡住的文件。 我正在研究导致它崩溃的原因。

编辑

我在控制台中重现了这个问题: 这里有一个严重的错误。

Felipes-MacBook-Pro:FitMob-ios fbaytelm$     /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ibtool --target-device iphone --errors --warnings --notices --module fitmobAppStore --minimum-deployment-target 7.0 --output-partial-info-plist /Users/fbaytelm/Library/Developer/Xcode/DerivedData/fitmob-fpoxwngwxzwfqrebczuslduvfozr/Build/Intermediates/fitmob.build/Debug-iphonesimulator/fitmobAppStore.build/FMSplashViewController-PartialInfo.plist --auto-activate-custom-fonts --output-format human-readable-text --compile /Users/fbaytelm/Library/Developer/Xcode/DerivedData/fitmob-fpoxwngwxzwfqrebczuslduvfozr/Build/Products/Debug-iphonesimulator/fitmobAppStore.app/FMSplashViewController.nib /Users/fbaytelm/Documents/workspace/FitMob-ios/FitMob/Classes/Views/Common/FMSplashViewController.xib
2014-10-10 01:38:48.386 ibtoold[23113:213948] [MT] DVTAssertions: ASSERTION FAILURE in /SourceCache/IDEInterfaceBuilder/IDEInterfaceBuilder-6249/InterfaceBuilderKit/Utilities/IBAbstractMessageChannelInterfaceBuilderToolProxy.m:40
Details:  Failed to determine the value for availableFonts of UIFont.

Encountered an error communicating with Interface Builder Cocoa Touch Tool. If you choose to file a crash report or Radar for this issue, please check Console.app for crash reports for "Interface Builder Cocoa Touch Tool" and include their content in your crash report.

Exception name: IBRemoteToolFailureException
Exception reason: Interface Builder Cocoa Touch Tool crashed

Last command:
valueForKeyPath:ofClassWithName:resultMarshaller:resultMarshallerContext:

Backtrace of last command:
  0  0x000000010d5dc3e1 (in IDEInterfaceBuilderCocoaTouchIntegration)
  1  0x000000010d5a4cd1 IBAskClassInTargetRuntimeForValueForKeyPathUsingResultMarshallerWithContext (in IDEInterfaceBuilderCocoaTouchIntegration)
  2  0x000000010d5a4b38 IBAskClassInTargetRuntimeForValueForKeyPathUsingResultMarshaller (in IDEInterfaceBuilderCocoaTouchIntegration)
  3  0x000000010d5d7bae (in IDEInterfaceBuilderCocoaTouchIntegration)
  4  0x000000010d5d7a35 (in IDEInterfaceBuilderCocoaTouchIntegration)
  5  0x000000010d5d8873 (in IDEInterfaceBuilderCocoaTouchIntegration)
  6  0x000000010d64cb26 (in IDEInterfaceBuilderCocoaTouchIntegration)
  7  0x000000010d67b46b IBUIValidateFontDescription (in IDEInterfaceBuilderCocoaTouchIntegration)
  8  0x000000010d6e9fe7 (in IDEInterfaceBuilderCocoaTouchIntegration)
  9  0x000000010762177f -[IBDocumentIssueGenerator updateIssuesForMembers:] (in IDEInterfaceBuilderKit)
 10  0x0000000107622790 -[IBDocumentIssueGenerator validateIssues:] (in IDEInterfaceBuilderKit)
 11  0x000000010667f37e -[DVTDelayedInvocation runBlock:] (in DVTFoundation)
 12  0x000000010667f903 -[DVTDelayedInvocation invokeIfNeeded] (in DVTFoundation)
 13  0x000000010762289b -[IBDocumentIssueGenerator warnings] (in IDEInterfaceBuilderKit)
 14  0x00000001065aebbb (in ibtoold)
 15  0x00000001065a130f (in ibtoold)
 16  0x00000001065a4b21 (in ibtoold)
 17  0x00000001065aa3f7 (in ibtoold)
 18  0x00000001065aa947 (in ibtoold)
 19  0x00000001065aa817 (in ibtoold)
 20  0x0000000106599d4f (in ibtoold)
 21  0x00000001065a9fe1 (in ibtoold)
 22  0x00000001065a9238 (in ibtoold)
 23  0x00007fff90ff15c9 start (in libdyld.dylib)

Exception backtrace:
(null)
Exception info:
    IBUnderlyingError = "Error Domain=IBMessageChannelErrorDomain Code=4 \"Failed to communicate with Interface Builder\" UserInfo=0x7fe7fbf43020 NSLocalizedDescription=Failed to communicate with Interface Builder, NSLocalizedFailureReason=Interface Builder Cocoa Touch Tool crashed";


Function: void IBAssertMarshallingFailure(NSString *__strong, NSString *__strong, NSString *__strong)
Thread:   <NSThread: 0x7fe7f941adf0>number = 1, name = main
Hints: None
Backtrace:
  0  0x00000001067982e4 -[DVTAssertionHandler handleFailureInFunction:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in DVTFoundation)
  1  0x0000000106797a7b _DVTAssertionHandler (in DVTFoundation)
  2  0x0000000106797cde _DVTAssertionFailureHandler (in DVTFoundation)
  3  0x0000000107676973 IBAssertMarshallingFailure (in IDEInterfaceBuilderKit)
  4  0x000000010d5a4e1c IBAskClassInTargetRuntimeForValueForKeyPathUsingResultMarshallerWithContext (in IDEInterfaceBuilderCocoaTouchIntegration)
  5  0x000000010d5a4b38 IBAskClassInTargetRuntimeForValueForKeyPathUsingResultMarshaller (in IDEInterfaceBuilderCocoaTouchIntegration)
  6  0x000000010d5d7bae (in IDEInterfaceBuilderCocoaTouchIntegration)
  7  0x000000010d5d7a35 (in IDEInterfaceBuilderCocoaTouchIntegration)
  8  0x000000010d5d8873 (in IDEInterfaceBuilderCocoaTouchIntegration)
  9  0x000000010d64cb26 (in IDEInterfaceBuilderCocoaTouchIntegration)
 10  0x000000010d67b46b IBUIValidateFontDescription (in IDEInterfaceBuilderCocoaTouchIntegration)
 11  0x000000010d6e9fe7 (in IDEInterfaceBuilderCocoaTouchIntegration)
 12  0x000000010762177f -[IBDocumentIssueGenerator updateIssuesForMembers:] (in IDEInterfaceBuilderKit)
 13  0x0000000107622790 -[IBDocumentIssueGenerator validateIssues:] (in IDEInterfaceBuilderKit)
 14  0x000000010667f37e -[DVTDelayedInvocation runBlock:] (in DVTFoundation)
 15  0x000000010667f903 -[DVTDelayedInvocation invokeIfNeeded] (in DVTFoundation)
 16  0x000000010762289b -[IBDocumentIssueGenerator warnings] (in IDEInterfaceBuilderKit)
 17  0x00000001065aebbb (in ibtoold)
 18  0x00000001065a130f (in ibtoold)
 19  0x00000001065a4b21 (in ibtoold)
 20  0x00000001065aa3f7 (in ibtoold)
 21  0x00000001065aa947 (in ibtoold)
 22  0x00000001065aa817 (in ibtoold)
 23  0x0000000106599d4f (in ibtoold)
 24  0x00000001065a9fe1 (in ibtoold)
 25  0x00000001065a9238 (in ibtoold)
 26  0x00007fff90ff15c9 start (in libdyld.dylib)

【讨论】:

你在这里做一些疯狂的调试。我希望你能明白。我找不到解决方案,但我会给你一个如此努力的点。从终端构建听起来是一个尝试查明错误的好主意。 @HotFudgeSunday 我的想法完全正确......并没有完全解决它,但 A 代表努力。 谢谢!显然,新版本的 OS 和 Xcode 解决了这个问题。【参考方案3】:

我安装了两个 Xcode 版本,5 和 6。不确定这是否是原因,但 Apple 表示这确实发生在人们身上,并且适当的措施是确保“选择”正确的版本

xcode-select -p

不确定这是否会解决问题,但在删除两个版本并安装 Xcode 6 后,问题似乎已经解决。

【讨论】:

这是一个很好的建议 - 我可能会尝试一下。由于 6 的冻结,我安装了 5。 不幸的是,这对我不起作用。我在哪里输入上面的示例代码?【参考方案4】:

在 Xcode 中,右键单击故事板文件并选择 Open As -> Source Code。在源代码编辑器中,将“useAutolayout”的值更改为“NO”。然后,您应该能够以 Interface Builder 的形式打开故事板。我遇到了这个烦人的问题。现在,我在 Xcode 5 中创建的所有故事板文件现在都可以在 Xcode 6 中打开了。

【讨论】:

【参考方案5】:

我通过将故事板的文件检查器中的 Builds For 设置从 iOS6 及更高版本更改为 iOS8 及更高版本来解决此问题 它似乎适用于 iOS 7.0 及更高版本,但将其更改回任何 iOS6 设置都会导致问题再次出现。

【讨论】:

嗯,好的提示,很高兴我还没有遇到问题,但我想知道这是否会有所帮助。 不喜欢这个解决方案【参考方案6】:

我也遇到了故事板问题,导致 OS X 10.9.5 上的 XCode 6.0.1 冻结。 我什至无法启动 Xcode,因为它试图重新打开情节提要。

这是我要恢复的(直到它再次发生)

重要提示:请务必备份情节提要文件,以防不小心将其删除

    完全关闭 Xcode 从终端(或 Finder):移动您的故事板文件到安全位置 重新启动 XCode 并打开您的工作区或项目 在 Xcode 中:从项目中删除缺少的故事板文件 从终端(或 Finder):复制您的故事板回到其原始位置 将故事板导入 Xcode(添加文件或从 Finder 拖放)

此时一切“通常”都适合我:打开情节提要、构建、运行...... 在我下次重新打开项目之前,我可以继续使用故事板。 然后它再次发生,我必须重复相同的步骤。

【讨论】:

不错的操作...感谢您传递它。由于 IBCTT 进程进入太空,我认为它并不能真正解决我们的无限编译时间问题。有趣的是,目前一切都在我的系统上运行(敲木头)。它确实似乎与某些约束有关,并且也与允许编译器完成的一般耐心有关。不确定到底发生了什么变化,但我现在可以再次编译该项目。 @MobileVet 我很高兴你让它工作。我的冻结发生在查看文件时,所以可能不是同一个问题。 这个过程不工作!!!仍然阻塞在编译资产目录 xxx.xcassets【参考方案7】:

我也有这个问题,并认为我找到了挂起的原因;我从情节提要中删除了一些约束,并且在构建阶段不再出现这种冻结。

【讨论】:

【参考方案8】:

我进行了“二分搜索”来查找损坏我的 .xib 文件的元素。

每次,我都必须杀死 Xcode,删除派生数据。 找到导致问题的子视图后,我将其删除并重建。

【讨论】:

【参考方案9】:

我没有使用 Storyboard,但我认为这里的问题可能在更高的层次上,并且与 Storyboard 无关。我遇到了同样的问题(xcode 在尝试构建应用程序时挂起,活动监视器显示使用 99% CPU 的界面构建器)。

以下内容对我有用 - 在 .xcodeproj 文件中,将 iOS 部署目标从 6.0 更改为 7.0 会立即修复它。

【讨论】:

【参考方案10】:

我刚刚解决了与情节提要相关的所有警告,从而解决了这个问题。 例如: 1. 我删除了 TableView 中未使用的原型单元格,因为它会导致诸如“无重用标识符”之类的警告。 2. 我删除了未使用的视图控制器。

【讨论】:

【参考方案11】:

我认为问题与界面生成器中的新字体机制有关。删除项目中对字体的所有引用,我敢打赌问题就会消失。

【讨论】:

【参考方案12】:

我在 Xcode 7.3.1 下遇到了相同的“编译故事板”或“编译资产目录”。 Activity Monitor 显示多个“Interface Builder Cocoa Touch Tool”进程正在运行。

我能够继续:

    关闭有问题的情节提要 关闭项目 重启 Xcode,但不要打开项目 只打开有问题的情节提要 关闭情节提要并重新启动 Xcode 打开项目

【讨论】:

【参考方案13】:

如果我在基于视图的表视图中绑定了错误的东西(ps,我使用的是 Core Data),我会在 Xcode 8.2.1 中发生这种情况。我将第二深级别的Table View Cell 视图的值绑定到我的数组控制器,而我应该将文本字段绑定到Table Cell View,路径为objectValue.&lt;attributeName&gt;。列对象应该没有绑定,Table View Content 应该通过arrangedObjects 绑定到数组控制器。

至少,这可以工作,并且让 Xcode (ibtool) 编译情节提要,而不会消耗所有可用内存并导致系统崩溃。

【讨论】:

以上是关于Xcode 6:构建挂起并且 Interface Builder Cocoa Touch Tool 开始分配所有 RAM的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 13:构建挂起并显示“iPhone 很忙:让 Apple Watch 为开发做好准备”

Xcode 6 Interface Builder 视图大小错误

Xcode 5 Interface Builder 设计的轻量文本在 iOS 6 上出现常规重量

如何(轻松)在 Xcode 6 的 Interface Builder 中删除约束

XCode 6.3 错误:Interface Builder 文件中的未知类

xcodebuild 在 Xcode 11 beta 上挂起,在 Xcode 10 上成功