基于HealthKit实现Apple Watch跑步记录后Fitness app无地图 如何保存路线?
权限配置要求
- 需在Watch App和关联iOS App的
Info.plist中添加定位权限声明,必须包含NSLocationAlwaysAndWhenInUseUsageDescription,仅申请使用时授权无法支持后台运动路线的持久化存储。 - 申请HealthKit权限时,必须包含路线类型的读写权限,需要主动请求
HKObjectType.seriesType(forIdentifier: .workoutRoute)的读取、写入权限,同时不能缺少跑步距离对应的HKObjectType.quantityType(forIdentifier: .distanceWalkingRunning)写入权限。
核心代码补充步骤
- 运动过程中启动
CLLocationManager实时采集定位点,建议配置参数如下,确保定位点精度符合HealthKit的有效路线要求:let locationManager = CLLocationManager() locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation locationManager.activityType = .fitness locationManager.distanceFilter = kCLDistanceFilterNone locationManager.allowsBackgroundLocationUpdates = true - 运动结束后,将采集到的有效定位点关联到已存入HealthKit的跑步锻炼记录中,不能仅单独存储锻炼记录:
// yourSavedWorkout为你已经成功写入HealthKit的HKWorkout实例 let routeBuilder = HKWorkoutRouteBuilder(healthStore: healthStore, device: HKDevice.local()) routeBuilder.insertRouteData(filteredValidLocations) { success, error in guard success, error == nil else { return } routeBuilder.finishRoute(with: yourSavedWorkout, metadata: nil) { finalRoute, error in // 路线关联完成,此时Fitness app即可读取到对应路线 } }
常见排查项
- 定位点需落在锻炼记录的开始、结束时间区间内,水平精度低于100米的无效定位点会被HealthKit自动过滤,过滤后点位不足会导致路线不展示。
- 锻炼记录的
workoutActivityType必须设置为.running,Fitness app仅对跑步、骑行、步行等户外运动类型开放地图展示板块,室内运动不会显示地图。
内容的提问来源于stack exchange,提问作者Roman Barzyczak
相关产品推荐
相关产品推荐

