Xcode 9.3后使用「Open in…」打开文件时应用崩溃问题求助
解决Xcode 9.3+中「Open in…」打开文件时应用崩溃的问题
问题描述
在Xcode 9.3版本之前,我导入文件没有任何问题;但现在尝试使用「Open in…」打开文件时,应用会崩溃,报错信息为Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)。甚至无法进入我的处理方法:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { let urlName = url.lastPathComponent print("Gotten a file \(urlName)") }也就是说应用在获取文件之前就崩溃了,对此我无法理解。另外我在AppDelegate中还新建了一些内容。
排查与解决建议
兄弟,我之前也踩过类似的坑,给你几个实用的排查方向:
- 检查文件关联配置:Xcode 9.3之后系统对
Info.plist里的文件关联配置要求更严格了。你去核对下CFBundleDocumentTypes和LSItemContentTypes的配置,是不是文件类型没对应上、或者漏了必要的字段?系统在传递URL前可能因为配置不合法导致内存访问出错。 - 排查AppDelegate新增代码:你提到在AppDelegate里加了新内容,大概率是这些代码在「Open in…」触发的启动流程里出了问题——比如某个变量没初始化、或者不小心释放了不该释放的对象。先把新增代码注释掉,再测试功能,如果不崩溃了,就逐步定位是哪段代码的问题。
- 切换到新的Open API:你现在用的
application(_:open:sourceApplication:annotation:)是旧API,从iOS 9开始苹果就推荐用application(_:open:options:)替代了,旧API在高版本系统里可能存在兼容性问题。换成下面的代码试试:func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool { let urlName = url.lastPathComponent print("Gotten a file \(urlName)") return true } - 排查内存问题:
EXC_BAD_ACCESS本质是非法内存访问,比如悬空指针、对象被提前释放。你可以用Xcode的Memory Graph Debugger来排查,在崩溃前捕获内存状态,看看有没有异常的对象引用。
内容的提问来源于stack exchange,提问作者DogCoffee
相关产品推荐
相关产品推荐

