如何将外部GPS数据提供给Mac或iPhone的Core Location服务?
核心结论
你搜索不到「Core Location 自定义位置提供方」相关的公开开发文档不是术语使用错误,苹果官方从未向普通第三方开发者开放系统级定位源的注入权限,Core Location的底层位置源(GPS、WiFi定位、IP定位等)仅允许苹果自身和MFi认证的硬件厂商调用对应私有接口,普通开发者无法直接编写代码替换系统全局的定位数据源。
可落地的替代实现方案
你可以根据自己的使用场景选择以下方案实现需求:
- 自用App自定义位置源
如果你只需要给自己开发的App提供房车的GPS数据,不需要替换系统全局定位,可以直接在App内对接路由器上的GPSd服务,获取坐标、航向数据后手动构造CLLocation对象,替代CLLocationManager返回的系统定位数据即可,GPSd输出的WGS84坐标和Core Location使用的坐标标准完全一致,不需要额外做坐标转换。 - macOS全局自定义定位
如果你需要在Mac上实现全局定位替换,关闭SIP后可以调用苹果私有框架CoreLocation的内部接口注入自定义位置数据,也可以开发后台常驻工具,主动向你常用的支持自定义位置输入的桌面App推送GPSd的定位数据,不需要修改系统级权限的方案稳定性更高。 - iOS全局自定义定位
未越狱的iPhone仅支持在Xcode调试模式下通过simulateLocation接口注入模拟位置,仅对当前调试的App生效;如果是越狱设备,可以安装定位修改类插件的开源代码,修改数据源对接你的GPSd服务即可实现全局定位替换。 - 合规的全局方案
如果你不想修改设备权限,也可以将你的房车GPS接收器改造为MFi认证的外置定位配件,苹果允许MFi认证的定位硬件直接作为系统级位置源输入到Core Location服务,适配所有系统App和第三方App,但是MFi认证的开发和审核成本较高。
GPSd对接参考
你可以直接使用开源的libgps库对接路由器上的GPSd服务,解析NMEA报文拿到定位、航向、速度等数据后按需求转换即可。
内容的提问来源于stack exchange,提问作者sdellysse
相关产品推荐
相关产品推荐

