iOS 8 / iPhone 6 XPC 崩溃

Posted

技术标签:

【中文标题】iOS 8 / iPhone 6 XPC 崩溃【英文标题】:iOS8 / iPhone6+ XPC crash 【发布时间】:2014-10-17 03:38:32 【问题描述】:

我有一个基于 ios8 SDK 构建的应用程序,我将其存档,然后签署即席分发。

这已在具有各种更新的所有设备上运行了 2 年。现在我有一部 iPhone 6 plus。

应用程序在新安装后运行良好,但现在它不断崩溃并出现错误:

“XPC API 滥用:给定对象不是所需类型”

这发生在它进入didFinishLaunchingWithOptions之前

调用栈:

Thread 0 name: XPC API Misuse: Given object not of required type. Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libxpc.dylib 0x0000000197dd99d8 _xpc_api_misuse + 60 1 libxpc.dylib 0x0000000197dd99d4 _xpc_api_misuse + 56 2 libxpc.dylib 0x0000000197dc9ae8 xpc_dictionary_set_value + 88 3 libxpc.dylib 0x0000000197dc5538 xpc_dictionary_set_string + 48 4 CoreFoundation 0x0000000186e4b590 _CFXNotificationRemoveObservers + 912 5 Foundation 0x0000000187d1ff20 -[NSNotificationCenter removeObserver:name:object:] + 252 6 UIKit 0x000000018b8588e4 -[UITableView dealloc] + 96 7 UIKit 0x000000018b6bf510 -[UIView(Hierarchy) removeFromSuperview] + 696 8 UIKit 0x000000018b79cb24 -[UIScrollView removeFromSuperview] + 76 9 UIKit 0x000000018b6c219c -[UIView dealloc] + 444 10 CoreFoundation 0x0000000186e217e4 CFRelease + 520 11 CoreFoundation 0x0000000186e2dda4 -[__NSArrayM dealloc] + 148 12 libobjc.A.dylib 0x0000000197599720 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 560 13 CoreFoundation 0x0000000186e25400 _CFAutoreleasePoolPop + 24 14 Foundation 0x0000000187d1f180 -[NSAutoreleasePool release] + 144 15 UIKit 0x000000018b72f9ac -[UIApplication _run] + 584 16 UIKit 0x000000018b72a980 UIApplicationMain + 1484 17 HelloWorld 0x000000010000636c main (main.m:16) 18 libdyld.dylib 0x0000000197beea04 start + 0

谁能帮忙?

【问题讨论】:

我收到了一些来自用户的零散崩溃报告,显示了相同的基本问题。全部在 iPhone 6 和 6+ 上。没有其他设备。 同样的问题,只发生在 iPhone 6 和 iPhone 6 Plus 上。 【参考方案1】:

我在自己的应用程序中修复了崩溃,但我无法 100% 确定根本原因。我怀疑这是内存损坏或过度保留对象。

关键是[UITableView dealloc] 我在表视图中实现了dealloc,以查看问题发生在哪里。我最终将其追溯到从 .xib 文件实例化的UITableViewCell。这个特定的 .xib 包含多个 UITableViewCells。在给每个表视图它自己的 .xib 后,崩溃就消失了。

【讨论】:

有这个问题,但使用情节提要。你有什么想法可以解决这个问题吗? 同样的问题。这是我们应用中最严重的崩溃之一。 看到您遇到“API 滥用”错误,Apple 会定期在其 XPC 文档等中对此进行记录……有趣的是,它也出现在手册页中。 XPC 有一个非常复杂的缓存系统,它与launchd 紧密结合,只是在进行更改后任意“重新运行”崩溃的应用程序并不总是能修复它。当 XPC 崩溃时,XPC 缓存需要刷新。有时,它归结为只是等待launchd(有利于导致完全可能和压力)......出于兴趣,XPC缓存刷新由/usr/libexec/xpchelper --rebuild-cache执行 请谨慎对待,因为 XPC 服务在后台运行并依赖缓存...这纯粹是为了在开发机器上进行开发使用。【参考方案2】:

对我来说,当我从模拟器运行一些视频编辑代码时,我遇到了 xpc api Misuse 崩溃!(iOS 13),问题不会出现在真实设备上。

【讨论】:

以上是关于iOS 8 / iPhone 6 XPC 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 崩溃:XPC API 滥用

为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)

iOS 集成测试随机崩溃:与 backboardd 通信时遇到 XPC 错误

XPC 蓝牙通信崩溃

ios 6 iPhone window.rootViewController 崩溃

Xcode 8.0 GM iPhone 模拟器 (iOS 10) 崩溃