You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 17中CLBackgroundActivitySession崩溃:苹果WWDC指引存误导

iOS 17中CLBackgroundActivitySession崩溃问题及WWDC指引误导分析

问题概述

在iOS 17开发中遇到CLBackgroundActivitySession相关崩溃问题,该问题疑似由WWDC 2023视频中的误导性指引导致。

崩溃基本信息

  • 崩溃发生线程:com.apple.corelocation.shared 调度队列线程
  • 已准备可复现崩溃的示例代码及完整崩溃日志

简化复现步骤

  • 打开示例应用
  • 归档并导出(操作路径:Distribute App -> Custom -> 选择Release Testing/Enterprise/Debugging任一选项 -> Export)
  • 打开应用,点击enableBackgroundLocation,在系统权限弹窗中选择「使用App期间允许」
  • 点击disableBackgroundLocation
  • 返回iOS主屏幕,等待10秒
  • 重新打开应用,崩溃触发

崩溃原因与WWDC指引冲突

WWDC 2023《Discover Streamlined Location Updates》视频中的原文指引(翻译后):

在开始位置更新前,你需要实例化一个CLBackgroundActivitySession对象来启动新会话。注意,我们将会话赋值给self.backgroundActivity属性而非局部变量——这一点很关键,因为如果使用局部变量,当它超出作用域时,所持对象会被释放,导致会话失效,可能中断App的位置访问权限。当需要结束会话时,你可以发送invalidate消息,或者让对象自行销毁。

但实际测试发现:将CLBackgroundActivitySession对象设为nil(即让对象销毁)并未正确结束会话,反而引发崩溃。甚至最小化实现也会触发崩溃,例如在viewDidLoad中执行以下代码:

let session = CLBackgroundActivitySession()
print("session \(session)")

后续进展

已向苹果官方提交该问题寻求解决方案,同时将问题分享给开发者社区。此误导性指引已影响应用发布进度,恳请苹果官方尽快确认问题并作出澄清。

内容的提问来源于stack exchange,提问作者Steve Ham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:08:14