NSExtension _completeRequestReturningItems方法罕见崩溃(照片分享)技术咨询
首先还原你提供的崩溃基础信息:
Incident Identifier: 5ACBBA52-B09E-5668-E3EE-276C30303030
CrashReporter Key: None
Hardware Model: iPhone7,1
Process: GOTit [10112]
Path: /var/containers/Bundle/Application/5BD13987-877E-4655-A1D0-2EE9F9A99EE2/GOTit.app/GOTit
Identifier: com.gotit.inc
Version: 5.3.5 (5.3)
Code Type: ARM-64 (Native)
针对这种仅万分之一会话出现的罕见分享照片崩溃,结合iOS平台的常见坑点,我整理了几个优先级较高的排查方向:
聚焦线程安全与资源竞争
低概率崩溃往往和多线程竞态条件有关。你需要检查照片分享流程中,处理PHAsset/图片资源的代码是否存在线程安全问题:比如在异步线程直接修改UI、未同步访问共享的图片缓存对象,或者在资源释放后仍持有引用。建议给涉及照片资源读写的代码块加上线程锁,确保异步回调(比如图片加载完成的block)中切换到主线程再更新UI。测试权限动态变化的边缘场景
有可能用户在分享过程中突然修改了照片访问权限(比如从允许改成拒绝),导致App访问照片资源时抛出未捕获的异常。你可以手动模拟这个场景:启动分享流程后,切到系统设置关闭App的照片权限,再切回App看是否触发崩溃。同时检查代码中是否在访问照片前实时校验权限状态,并且添加了异常捕获逻辑。排查内存警告相关的资源泄漏
iPhone7,1(也就是iPhone 6s)的内存容量不算高,分享高分辨率照片时容易触发内存警告。如果分享模块存在内存泄漏(比如循环引用导致图片对象无法释放,或者缓存的图片未及时清理),内存警告后系统可能强制回收资源引发崩溃。建议用Xcode Instruments的Memory Graph工具扫描分享流程,或者手动触发内存警告(Debug菜单里的Simulate Memory Warning)来复现问题。验证系统API的版本兼容性
你的App版本是5.3.5,需要确认是否适配了目标iOS版本的API差异。比如PHPhotoLibrary的某些方法在旧iOS版本下有隐性bug,或者UIActivityViewController的分享回调在特定系统版本中存在异常。可以找不同iOS版本的iPhone 6s设备(比如iOS 12、13)测试分享流程,重点排查调用系统分享API的代码段。解析完整崩溃栈定位具体代码
你目前提供的是崩溃元数据,还需要获取完整的崩溃调用栈(尤其是Thread 0的崩溃点)。如果是TestFlight或App Store的崩溃,可在Xcode Organizer中下载完整报告;如果是内部测试,建议集成Crashlytics等工具捕获详细栈信息。找到崩溃的具体代码行(比如图片压缩、权限请求还是分享回调环节),能大幅缩小排查范围。
内容的提问来源于stack exchange,提问作者Refael.S

