iOS 虚拟定位新思路:wloc 让你一键"换个城市"
拦截 Apple 网络定位服务,不需要越狱、不需要电脑,在地图上选个点就行
苹果的定位系统一直被公认为业内最精准的之一。从 GPS 卫星定位到 WiFi 指纹、基站三角定位,Apple 的混合定位方案几乎在所有场景下都能给出令人满意的结果。
但精准有时候也是种麻烦。
比如你想在社交媒体上”打卡”某个远方的咖啡馆,或者你想让某些区域限定 App 以为你在另一个城市,又或者你只是单纯不想让 App 知道你真实的位置。传统的做法是用 Xcode 的开发者工具模拟定位,但这台设备需要连接 Mac,操作繁琐到让人放弃。
最近 GitHub 上出现了一个叫wloc的项目,提供了一种全新的思路——通过拦截 Apple 网络定位服务的返回数据,直接修改坐标。不需要越狱,不需要电脑,甚至不需要手动输入经纬度。
这个项目到底做了什么
wloc 的核心原理非常巧妙。iOS 设备在获取位置时,会综合 GPS、WiFi 基站和蜂窝基站的数据。其中 WiFi/基站定位走的是 Apple 自己的网络定位服务,域名是gs-loc.apple.com(国内是gs-loc-cn.apple.com)。
wloc 做的事情就是:代理工具拦截这个域名返回的定位数据,把其中的坐标替换成你想要的。
具体来说,项目包含两条规则脚本:
- ▪wloc.js— 拦截
/clls/wloc的响应,解析 Apple 的 protobuf 协议,把里面的经纬度字段替换成你设定的目标坐标 - ▪wloc-settings.js— 拦截
/wloc-settings/save请求,把目标坐标写入代理工具的持久化存储
流程大概是这个样子的:
- 你在选点页面上选好想”定位”的位置
- 选点页面向
gs-loc.apple.com发一个保存请求 - 代理工具拦截这个请求,提取经纬度,存下来
- 下次任何 App 触发定位时,Apple 返回真实坐标,代理脚本把它替换成你存的坐标
- App 就以为你在那个位置了
为什么这个方案比其他方法好用
市面上 iOS 虚拟定位的方案其实不少,但大多有各种限制:
Xcode 模拟定位:需要 Mac,需要数据线,每次都要打开 Xcode 操作,而且关了模拟就会恢复。说实话,这套流程对非开发者来说几乎不可用。
越狱插件:不越狱就没法用。但 iOS 越狱的门槛越来越高,而且越狱本身的安全风险也需要考虑。
App Store 上的”虚拟定位”类 App:这类 App 大多只能伪装一次性的位置,或者通过修改系统的时区、语言等间接方式来影响定位结果,效果不稳定,而且经常被 App Store 下架。
修改 DNS 或代理定位 API:这种方案能影响部分 App,但很多 App 会直接使用 GPS 硬件定位,DNS 层面根本拦不住。
wloc 的优势在于:
- ▪不需要越狱:只需要一个支持 MITM 的代理工具就行
- ▪不需要电脑:选点页面直接在手机上操作
- ▪不需要手动输入坐标:在地图上选点,一键设置
- ▪恢复方便:关闭模块或运行清理脚本,定位立刻恢复正常
当然,它也有一个硬性限制——只修改网络定位,不影响 GPS 硬件定位。这意味着如果你在户外,GPS 信号足够强的时候,iOS 可能会直接用 GPS 坐标而忽略网络定位的结果。所以这个方案在室内场景(WiFi 定位为主)效果最好。
实际使用体验
项目提供了五种代理工具的订阅地址,Surge、Quantumult X、Loon、Stash、Shadowrocket 都可以。
第一步:订阅模块
在代理工具里添加模块订阅地址,启用后需要开启 MITM,并信任gs-loc.apple.com的证书。这是所有 MITM 方案的基本操作,熟悉代理工具的人应该都很熟练。
第二步:选点
项目提供了公共的在线选点页面,打开后是一个内置地图的 Web 页面。你可以直接在地图上点击选点,搜索地名,或者粘贴 Apple Maps、Google Maps、高德、百度的地图链接来自动定位。
但更方便的方式是项目提供的快捷指令。”wloc 设置地理位置”这个快捷指令可以在地图 App 里直接操作——长按地图选点,然后共享到这个快捷指令就完事了。苹果地图和高德地图都支持。
第三步:生效
储存完成后,下次 App 触发网络定位时就会使用新坐标。iOS 15 到 18 的设备基本即时生效,不需要额外操作。
但iOS 26 及更高版本有个坑。Apple 从 iOS 26 开始强化了locationd的定位缓存机制,切换坐标后可能需要重启设备才能清除缓存。项目的 README 里给了两种推荐的操作流程,都比较复杂,但这不是 wloc 的问题,是 Apple 系统层面的变化。
技术细节值得深挖
从技术角度看,wloc 的实现有几个亮点:
protobuf 解析:Apple 的 WLOC 服务使用 protobuf 格式传输定位数据。项目没有用笨重的方式去解码整个 protobuf 消息,而是精准定位到坐标字段进行替换。这种做法对性能影响极小,延迟几乎可以忽略。
坐标系处理:中国大陆使用的是 GCJ-02 坐标系(所谓的”火星坐标”),和 WGS-84 标准坐标有几百米的偏移。项目的 Worker 服务在解析地图链接时会自动做坐标换算,高德分享的短链(302 跳转)也能正确解析。这种细节处理体现了作者对实际使用场景的深入理解。
隐私设计:解析地图链接的 Worker 服务是纯转发——收到链接、跟跳转、解析坐标、返回 JSON,全程不写存储、不记日志、不缓存。而且 Worker 源码完全开源,不放心可以自己部署。这种”可选信任”的设计思路值得点赞。
收藏位置功能:选点页面支持收藏多个位置,数据存在浏览器的 localStorage 里。这对于经常需要在不同位置之间切换的用户来说很实用。
需要注意的地方
这个项目并不是万能的虚拟定位方案,使用前有几个点需要清楚:
第一,它只影响网络定位。如果你的设备能收到足够的 GPS 信号(比如在户外开阔地带),系统可能会直接使用 GPS 坐标而忽略网络定位结果。
第二,需要代理工具常驻后台。如果代理工具被系统杀掉或者手动关闭了,拦截就失效了,App 会拿到真实定位。
第三,MITM 证书是必须的。如果不想对gs-loc.apple.com开启 MITM,那这个方案就没法工作。
第四,某些 App 可能有额外的定位校验。比如一些出行类 App 可能会综合 IP 地址、WiFi 信息等来交叉验证位置。仅修改 WLOC 坐标不一定能完全骗过这些 App。
写在最后
wloc 是我最近看到的 iOS 生态里最有意思的工具项目之一。3600+ stars、592 forks,从 2026 年 6 月 24 日创建到现在不到三周的时间,增长速度相当惊人。这说明 iOS 虚拟定位是一个真实存在的、大量用户有需求的场景。
项目的实现方式很优雅——不越狱、不修改系统、不依赖电脑,通过代理 MITM 在网络层解决问题。快捷指令的支持把操作门槛降到了最低:长按地图选点 → 共享 → 搞定。
如果你有 iOS 虚拟定位的需求,wloc 值得一试。项目地址:https://github.com/Yu9191/wloc
本文介绍了 wloc 开源项目的功能和使用体验,仅供技术交流。请遵守相关法律法规,不要用于任何违法违规用途。
夜雨聆风