iOS8 / iPhone6+ XPC崩溃

5
我有一个基于iOS8 SDK构建的应用程序,我将其存档并签署以进行adhoc分发。
这在各种设备上已经运行了2年。现在我有一部iPhone 6 plus。
新安装后,该应用程序第一次运行良好,但现在在错误 "
XPC API Misuse: Given object not of required type" 的情况下不断崩溃。
这发生在进入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+上,没有其他设备出现这种情况。 - rmaddy
同样的问题只发生在 iPhone 6 和 iPhone 6 Plus 上。 - nonamelive
2个回答

1
我修复了自己应用程序中的崩溃,但我无法100%确定根本原因。我怀疑是内存损坏或过度保留对象。
关键在于[UITableView dealloc]。我实现了table view的dealloc以查看问题发生的位置。最终我追踪到一个UITableViewCell,它是从.xib文件实例化的。这个特定的.xib包含多个UITableViewCell。在为每个table view提供自己的.xib后,崩溃消失了。

有这个问题,但是使用了Storyboard。你有什么想法如何解决吗? - Dima Deplov
相同的问题。这是我们应用程序中最常见的崩溃之一。 - Jake
由于您遇到了“API误用”错误,苹果公司在其XPC文档等文件中经常对此进行记录...有趣的是,它也出现在man页面中。 XPC具有相当复杂的缓存系统,与launchd紧密结合,因此仅仅在更改后任意“重新运行”崩溃的应用程序并不能总是修复它。当涉及到XPC崩溃时,需要清除XPC缓存。有时,这只是等待launchd(而不是引起绝对的混乱和压力)...有趣的是,XPC缓存刷新是通过/usr/libexec/xpchelper --rebuild-cache执行的。 - Adrian Sluyters
请小心处理此内容,因为XPC服务在后台运行并依赖于缓存...这仅用于开发机器上的开发使用。 - Adrian Sluyters

1

对我来说,当我从模拟器中运行一些视频编辑代码时(iOS 13),我遇到了xpc api误用崩溃的问题!但是这个问题在真实设备上没有出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接