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 包含多个 UITableViewCell
s。在给每个表视图它自己的 .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 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)
iOS 集成测试随机崩溃:与 backboardd 通信时遇到 XPC 错误