乐于分享
好东西不私藏

iOS 虚拟定位新思路:wloc 让你一键"换个城市"

iOS 虚拟定位新思路:wloc 让你一键"换个城市"

技术 · 安全 · 2026.07

拦截 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请求,把目标坐标写入代理工具的持久化存储

流程大概是这个样子的:

  1. 你在选点页面上选好想”定位”的位置
  2. 选点页面向gs-loc.apple.com发一个保存请求
  3. 代理工具拦截这个请求,提取经纬度,存下来
  4. 下次任何 App 触发定位时,Apple 返回真实坐标,代理脚本把它替换成你存的坐标
  5. App 就以为你在那个位置了
wloc 工作流程Step 1用户在地图选点Step 2保存到 gs-locStep 3代理拦截并存储Step 4App 触发网络定位Apple 服务器返回真实坐标Step 6脚本替换坐标App收到代理工具(Surge / QX / Loon / Stash)作为中间层拦截并修改 WLOC 响应坐标:北京 → 上海(举例)

为什么这个方案比其他方法好用

市面上 iOS 虚拟定位的方案其实不少,但大多有各种限制:

Xcode 模拟定位:需要 Mac,需要数据线,每次都要打开 Xcode 操作,而且关了模拟就会恢复。说实话,这套流程对非开发者来说几乎不可用。

越狱插件:不越狱就没法用。但 iOS 越狱的门槛越来越高,而且越狱本身的安全风险也需要考虑。

App Store 上的”虚拟定位”类 App:这类 App 大多只能伪装一次性的位置,或者通过修改系统的时区、语言等间接方式来影响定位结果,效果不稳定,而且经常被 App Store 下架。

修改 DNS 或代理定位 API:这种方案能影响部分 App,但很多 App 会直接使用 GPS 硬件定位,DNS 层面根本拦不住。

wloc 的优势在于:

  • 不需要越狱:只需要一个支持 MITM 的代理工具就行
  • 不需要电脑:选点页面直接在手机上操作
  • 不需要手动输入坐标:在地图上选点,一键设置
  • 恢复方便:关闭模块或运行清理脚本,定位立刻恢复正常

当然,它也有一个硬性限制——只修改网络定位,不影响 GPS 硬件定位。这意味着如果你在户外,GPS 信号足够强的时候,iOS 可能会直接用 GPS 坐标而忽略网络定位的结果。所以这个方案在室内场景(WiFi 定位为主)效果最好。

iOS 虚拟定位方案对比方案需要越狱需要电脑易用性Xcode 模拟定位越狱插件App Store 类 App修改 DNS / APIwloc★★★★★否(优势)是(劣势)

实际使用体验

项目提供了五种代理工具的订阅地址,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 跳转)也能正确解析。这种细节处理体现了作者对实际使用场景的深入理解。

GCJ-02 → WGS-84 坐标系转换GCJ-02 坐标系(火星坐标)偏移坐标高德 / 腾讯地图Worker自动换算WGS-84 坐标系(标准坐标)真实坐标Apple Maps / GPS偏移量:约 100 ~ 600 米中国大陆区域偏移,境外坐标自动跳过换算地图分享链接wloc Worker 解析正确坐标写入

隐私设计:解析地图链接的 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 开源项目的功能和使用体验,仅供技术交流。请遵守相关法律法规,不要用于任何违法违规用途。