用途:这是 Core Location 实现决策的规范技能,用于选择授权策略、监控方式与定位精度,并排查“定位不工作”问题、审查定位代码中的反模式。
主要能力:列出常见反模式及代价,包括首次启动就请求 Always 授权(拒绝率 30-60%)、用连续更新做地理围栏(约 10 倍耗电)、忽略静止检测、不处理授权被拒、精度与场景不匹配、不停止更新、忽略 iOS 18+ 的 CLServiceSession。提供授权策略、监控策略、精度选择三组决策树,以及发布前定位检查清单、后台定位检查清单和压力场景应对。
必要用法:优先从最小授权开始,例如 CLServiceSession(authorization: .whenInUse),在用户触发后台功能时再升级为 .always;地理围栏使用 CLMonitor 与 CircularGeographicCondition,注意每应用最多 20 个条件、半径至少约 100m;连续跟踪使用 CLLocationUpdate.liveUpdates() 并配合合适配置(如 .automotiveNavigation、.fitness、.default);后台定位需开启 Background Modes 的 Location updates,持有 CLBackgroundActivitySession 引用并从前景启动。
适用场景:选择 When In Use 与 Always、决定连续更新/显著变化/CLMonitor、实现地理围栏或后台定位、调试定位失效、审查定位代码。
限制:资料未提供具体收费、价格与平台支持范围;部分 API 有版本要求,CLLocationUpdate、CLMonitor、CLBackgroundActivitySession 需 iOS 17+,CLServiceSession 需 iOS 18+,iOS 14-16 需使用 CLLocationManager 委托模式。