wloc 使用教程:iPhone 修改 Apple 网络定位从零开始
作者:王小义 | 公众号:王小义笔记
适用人群:想在 iPhone 上测试 Apple 网络定位、代理脚本、地图坐标切换的用户
我这次整理的是开源项目 Yu9191/wloc 的上手教程。
它做的事情很明确:通过 Surge、Quantumult X、Loon、Stash、小火箭这类代理工具,拦截 Apple 的 WLOC 网络定位请求,把 WiFi/基站定位返回的坐标改成你指定的位置。
先把边界说清楚:wloc 不是万能 GPS 模拟器。它主要影响 Apple 网络定位,也就是 WiFi/基站定位结果;如果 iPhone 当前 GPS 信号很强,系统或 App 仍可能优先使用真实 GPS。
信息时间:2026 年 8 月 9 日。wloc 模块地址、快捷指令、iOS 定位缓存策略都可能变化,最终以项目 README 和你设备上的实际表现为准。
先说结论
wloc 适合这几类场景:
| 场景 | 是否适合 | 说明 |
|---|---|---|
| 室内 WiFi 定位测试 | 适合 | 网络定位权重更高,更容易看到效果 |
| App 定位权限/城市切换测试 | 适合 | 适合开发者验证基础定位逻辑 |
| 临时切换 Apple 地图附近位置 | 可以尝试 | 需要看系统是否走 WLOC |
| 户外强 GPS 场景 | 不稳定 | iPhone 可能直接采用真实 GPS |
| 打卡、风控、灰色用途 | 不建议 | 风险不可控,也不是这个教程的目的 |
我的判断是:wloc 更像一个开发者调试工具,不是“保证所有 App 都变定位”的工具。你可以拿它测试网络定位,但不要把它当成稳定商用方案。
wloc 的工作原理
不用一上来就看代码,先理解这个流程:
选点页面或快捷指令
-> 请求 gs-loc.apple.com/wloc-settings/save?lon=x&lat=y
-> 代理模块拦截请求,把坐标写入代理工具的持久化存储
-> iPhone 下次请求 Apple WLOC 网络定位
-> 代理模块拦截 /clls/wloc 响应
-> 替换响应里的经纬度
-> 系统拿到新的网络定位结果
wloc 模块里主要有两条脚本规则:
| 脚本 | 作用 |
|---|---|
wloc-settings.js | 保存你选好的经纬度 |
wloc.js | 拦截 Apple WLOC 响应并替换坐标 |
它需要 MITM 的域名是:
gs-loc.apple.com
gs-loc-cn.apple.com
这也是为什么很多人第一次失败:模块订阅了,但 MITM 没开;或者 MITM 开了,但证书没有在 iPhone 里信任。
准备工作
1. 一台 iPhone
建议先用备用机测试,不要直接拿主力机折腾。
iOS 版本要注意:
| iOS 版本 | 体验判断 |
|---|---|
| iOS 15-18 | 通常更容易即时生效 |
| iOS 26/27 及更高 | Apple 强化了 locationd 定位缓存,可能必须重启才生效 |
如果你发现日志里已经显示脚本修改成功,但地图位置没有变,大概率不是模块没工作,而是 iOS 还在复用旧定位缓存。
2. 一个支持脚本和 MITM 的代理工具
wloc 官方提供了这些订阅地址:
| 工具 | 模块地址 |
|---|---|
| Surge | https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.sgmodule |
| Quantumult X | https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.conf |
| Loon | https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.lpx |
| Stash | https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.stoverride |
| Shadowrocket 小火箭 | https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module |
Egern 可以直接使用 Surge 模块。Stash 不建议用 Script Hub 转换,直接订阅 .stoverride。
如果你是新手,我建议从自己已经会用的代理工具开始,不要为了 wloc 重新换一整套工具。这个项目真正容易卡住的是证书信任和 iOS 缓存,不是模块本身。
3. 代理节点和 MITM 证书
你需要准备:
- 代理工具能正常联网
- iPhone 设置里能看到 VPN 图标
- 代理工具已开启 MITM
- iPhone 已安装并信任 MITM 根证书
- MITM hostname 包含
gs-loc.apple.com和gs-loc-cn.apple.com
iPhone 信任证书的路径一般是:
设置 -> 通用 -> 关于本机 -> 证书信任设置
打开对应代理工具的根证书信任开关。
如果这一步漏了,表现通常是:模块看起来已经启用,但保存坐标失败,或者 WLOC 请求没有被脚本处理。
4. wloc 快捷指令
官方推荐用快捷指令,省得每次打开选点页面手动输经纬度。
| 快捷指令 | 地址 |
|---|---|
| wloc 设置地理位置 | https://www.icloud.com/shortcuts/a82717d8fdad4e6280866fcf911173f7 |
| wloc 清理恢复位置 | https://www.icloud.com/shortcuts/f42632d406504f24a2cd163af4fe012f |
安装快捷指令时,如果 iPhone 提示不允许添加,需要先打开:
设置 -> 快捷指令 -> 允许不受信任的快捷指令
不同 iOS 版本入口可能略有变化,找不到的话就在设置里搜索“快捷指令”。
方案选择:快捷指令还是选点页面
| 方案 | 优点 | 缺点 | 适合谁 |
|---|---|---|---|
| 快捷指令 | 从地图 App 分享即可设置,最快 | 依赖官方 Worker 解析地图链接 | 普通 iPhone 用户 |
| 在线选点页面 | 可搜索、粘贴链接、收藏位置 | Safari 必须走代理,公共服务有请求上限 | 想直观看地图选点的人 |
| 自部署 Worker | 隐私和稳定性更可控 | 需要 Cloudflare 和命令行 | 程序员、长期使用者 |
第一次用,我建议先走快捷指令。跑通以后,再考虑自部署 Worker。
第一步:订阅并启用 wloc 模块
下面以小火箭和 Surge 两类思路讲。不同工具的按钮名字不完全一样,但核心都是:导入模块、启用模块、开启 MITM、确认 hostname。
Shadowrocket 小火箭
- 打开 Shadowrocket。
- 进入「配置」或「模块」相关页面。
- 添加模块订阅:
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module
- 启用
Apple WLOC 定位修改。 - 进入 HTTPS 解密 / MITM 设置。
- 安装证书。
- 到 iPhone 系统设置里信任证书。
- 确认 MITM hostname 里有:
gs-loc.apple.com
gs-loc-cn.apple.com
Surge
- 打开 Surge。
- 进入模块管理。
- 添加模块:
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.sgmodule
- 启用模块。
- 打开 MITM。
- 生成并安装 CA 证书。
- 到 iPhone 系统设置里信任证书。
- 确认模块参数保持默认即可,后面用选点或快捷指令覆盖。
Quantumult X / Loon / Stash
使用对应模块地址导入即可:
Quantumult X:
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.conf
Loon:
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.lpx
Stash:
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.stoverride
重点还是一样:模块启用后,MITM 证书必须安装并信任,hostname 必须包含 Apple WLOC 域名。
第二步:安装 wloc 快捷指令
在 iPhone Safari 里打开:
https://www.icloud.com/shortcuts/a82717d8fdad4e6280866fcf911173f7
添加「wloc 设置地理位置」。
再打开:
https://www.icloud.com/shortcuts/f42632d406504f24a2cd163af4fe012f
添加「wloc 清理恢复位置」。
建议把这两个快捷指令放到同一个文件夹里,后面切换和恢复都方便。
第三步:从地图 App 选择位置
用苹果地图
- 打开苹果地图。
- 搜索你想切换到的位置。
- 长按地图上的目标点。
- 点「共享」。
- 在共享菜单里选择「wloc 设置地理位置」。
- 等快捷指令运行完成。
如果共享菜单里找不到快捷指令,滑到最右侧点「更多」,把快捷指令加进去。
用高德地图
- 打开高德地图。
- 搜索目标地点。
- 点位置详情。
- 选择「分享」。
- 点「更多」。
- 选择「wloc 设置地理位置」。
- 等快捷指令运行完成。
wloc 的 Worker 会处理高德短链跳转,并把 GCJ-02 坐标转换成 WGS84。这个细节对国内地图很重要,不然你看到的位置可能会有偏移。
第四步:验证是否生效
设置完坐标后,不要急着判断失败。按这个顺序检查:
- 确认代理工具已连接,iPhone 顶部能看到 VPN 图标。
- 确认 wloc 模块处于启用状态。
- 确认 MITM 证书已信任。
- 关闭地图 App 后重新打开。
- 切到室内 WiFi 环境测试。
- 如果是 iOS 26/27 及更高版本,重启 iPhone 后再测。
比较推荐的验证方式:
- 打开苹果地图,看蓝点是否跳到目标附近
- 打开需要定位权限的测试 App,看城市或附近地点是否变化
- 在代理工具日志里搜索
wloc、gs-loc、已修改这类关键词
我的成功证据记录:
【待补充:例如“iPhone 15 Pro / iOS 18.x / 小火箭,重开地图后蓝点切到东京银座附近”】
iOS 26/27 及更高版本的推荐流程
wloc README 里专门提醒:iOS 26 开始,Apple 强化了 locationd 定位缓存。脚本已经改了响应,系统仍可能继续使用旧坐标。
如果你是高版本系统,建议直接按这个流程来:
- 在地图里选好目标位置。
- 通过「wloc 设置地理位置」保存。
- 打开飞行模式。
- 关闭定位服务。
- 重启 iPhone。
- 关闭飞行模式。
- 关闭 WiFi,先用蜂窝网络或按你的测试场景连接代理。
- 确认代理工具已连接,VPN 图标出现。
- 打开定位服务。
- 打开地图验证。
另一个可尝试的流程:
- 先关闭定位服务。
- 设置 wloc 目标位置。
- 打开定位服务。
- 当 App 弹出定位权限时,选择「下次询问或在我共享时」。
- 打开地图或目标 App 测试。
这两套流程的核心都是:让系统重新发起 WLOC 请求,不要一直吃旧缓存。
用在线选点页面设置位置
如果你不想用快捷指令,也可以打开官方公共页面:
https://wloc-pages.pages.dev/
或者 Workers 页面:
https://wloc-spoofer.wloc.workers.dev/
使用方法:
- 确认代理工具已连接。
- 用 Safari 打开选点页面。
- 搜索地点,或者直接在地图上点选。
- 点「储存到设备」。
- 等页面提示保存成功。
- 重新打开地图或重启后验证。
注意:选点页面必须在代理模式下打开。因为它会请求 gs-loc.apple.com/wloc-settings/save,这条请求要被本机代理模块拦截,坐标才会写入代理工具持久化存储。
如果你用普通浏览器直连打开页面,很可能只是页面能显示,但设备端没有真正保存坐标。
收藏位置怎么用
在线选点页面支持收藏多个位置。
适合这类场景:
- 经常在几个测试城市之间切换
- 给 App 做城市定位回归测试
- 保存公司、家、机场、酒店等常用点位
收藏数据和生效数据是两回事:
| 数据 | 保存位置 | 作用 |
|---|---|---|
| 收藏列表 | 浏览器 localStorage | 方便页面里快速选点 |
| 生效坐标 | 代理工具持久化存储 wloc_settings | 脚本真正读取的坐标 |
所以,清理浏览器缓存可能会丢收藏,但不一定会恢复真实定位。真正影响定位的是代理工具里的 wloc_settings。
如何恢复真实定位
最简单、最稳的方式:
- 关闭 wloc 模块,或者删除 wloc 模块。
- 重启地图 App。
- iOS 26/27 及更高版本建议重启 iPhone。
如果你想保留模块,只清除已保存坐标,可以运行清理快捷指令:
wloc 清理恢复位置
也可以手动清除持久化数据,字段名是:
wloc_settings
不同工具的清理方式:
| 工具 | 清理方式 |
|---|---|
| Surge | 脚本编辑器运行 $persistentStore.write(null, "wloc_settings") |
| Quantumult X | 运行 $prefs.removeValueForKey("wloc_settings") |
| Loon | 脚本编辑器运行 $persistentStore.write(null, "wloc_settings") |
这里有个细节:如果你手动改过模块参数里的经纬度,清除 wloc_settings 后仍可能继续使用模块参数。新手建议不要改模块默认经纬度,统一通过快捷指令或选点页面保存位置。
自部署 Worker
公共 Worker 能用,但它毕竟是公共服务。长期使用或者在意隐私,我建议自己部署一份。
wloc 的 Worker 主要负责:
- 解析苹果地图链接
- 解析高德短链
- 处理坐标系转换
- 提供在线选点页面
Cloudflare Workers 手动部署
电脑上需要有 Node.js 和 npm。
git clone https://github.com/Yu9191/wloc.git
cd wloc/worker
npm install
npx wrangler login
npm run deploy
部署成功后,你会得到一个类似这样的地址:
https://wloc-spoofer.<你的子域名>.workers.dev
之后用自己的 Worker 页面选点即可。
如果你还想让快捷指令也走自己的 Worker,需要打开快捷指令编辑,把里面的公共域名:
wloc-spoofer.wloc.workers.dev
替换成你自己的 Worker 域名。
Cloudflare Pages 部署
Pages 也可以用,但 wloc README 提醒要走项目里的命令:
git clone https://github.com/Yu9191/wloc.git
cd wloc/worker
npm install
npm run pages:deploy
不要直接跑 wrangler pages deploy dist,否则可能丢掉配置里的 compatibility 设置。
踩坑记录
1. 模块启用了,但地图位置没变
我遇到这类问题时,第一反应不是改经纬度,而是看系统有没有重新请求 WLOC。
常见原因:
- iPhone 还在用旧定位缓存
- 当前 GPS 信号太强,系统没有采用网络定位
- 地图 App 没有重启
- iOS 26/27 及更高版本没有重启设备
解决方式:
- 关闭地图 App。
- 确认代理工具连接。
- 确认 wloc 模块启用。
- 重启 iPhone。
- 在室内 WiFi 环境重新测试。
2. 保存位置失败
如果选点页面点了「储存到设备」没有效果,多半是 Safari 的请求没有被代理模块拦截。
检查顺序:
- Safari 是否走代理
- VPN 图标是否出现
- MITM 是否开启
- 证书是否信任
- hostname 是否包含
gs-loc.apple.com和gs-loc-cn.apple.com
这一步不用猜,看代理工具日志最直接。
3. 国内地图坐标有偏移
国内常见地图不是统一坐标系。
大致可以这样理解:
| 来源 | 中国大陆 | 港澳台 |
|---|---|---|
| 苹果地图 / Google | 可能需要 GCJ-02 到 WGS84 换算 | 通常 WGS84 |
| 高德 / 百度 | 需要坐标换算 | 仍可能需要换算 |
wloc 的 Worker 已经处理了苹果地图和高德的主要转换逻辑。新手不要自己手抄经纬度,优先从地图 App 分享给快捷指令。
4. 清理后还没恢复真实位置
可能原因:
- 模块还在启用
wloc_settings没清掉- 模块参数里手动写了非默认经纬度
- iOS 仍在使用缓存
处理方式:
- 关闭或删除 wloc 模块。
- 运行「wloc 清理恢复位置」。
- 检查模块参数是否恢复默认。
- 重启 iPhone。
安全和限制
这部分建议认真看。
- wloc 需要 MITM Apple 的定位相关域名。只添加项目要求的 hostname,不要无脑全局 MITM。
- 它只改网络定位,不保证所有 App 都生效。
- 户外、开阔地、GPS 信号强时,效果可能不明显。
- iOS 高版本缓存更强,切换位置可能需要重启。
- 不建议用于打卡、风控对抗、账号规避等场景。
- 公共 Worker 虽然 README 说明不存储解析数据,但长期使用更建议自部署。
- 修改定位可能影响地图、天气、查找、自动化、提醒等系统功能,用完记得恢复。
常见问题
Q:wloc 能不能改所有 App 的定位?
A:不能保证。它主要影响 Apple WLOC 网络定位。如果某个 App 直接拿 GPS,或者系统判定真实 GPS 更可靠,就可能不生效。
Q:不用代理工具可以吗?
A:不行。wloc 依赖代理工具的脚本拦截、MITM 和持久化存储。
Q:为什么一定要信任证书?
A:因为 HTTPS 请求默认不能被脚本读取和修改。MITM 证书没有信任,脚本就拦不到 gs-loc.apple.com 的内容。
Q:我应该用小火箭还是 Surge?
A:已有哪个就用哪个。Surge 调试能力更强,小火箭上手成本低。wloc 本身已经提供了不同工具的模块地址,没必要为了它重新买一套工具。
Q:公共 Worker 安全吗?
A:README 写的是解析接口不写存储、不记日志、不缓存。我的建议是:短期测试可以用公共服务,长期使用或在意隐私就自部署。
Q:恢复真实定位后,要不要删除证书?
A:如果你平时不用 HTTPS 解密,可以删除或关闭证书信任。至少要关闭 wloc 模块,避免误影响后续定位。
行动清单
第一次从零开始,按这个顺序做:
- 确认你的代理工具支持脚本和 MITM。
- 导入对应的 wloc 模块。
- 开启 MITM,安装并信任证书。
- 确认 hostname 包含
gs-loc.apple.com和gs-loc-cn.apple.com。 - 安装「wloc 设置地理位置」快捷指令。
- 在苹果地图或高德地图里分享位置给快捷指令。
- 打开地图验证。
- 如果不生效,先重启 iPhone,再看代理日志。
- 用完运行「wloc 清理恢复位置」或关闭模块。
- 长期使用再考虑自部署 Worker。
总结
wloc 的设计挺聪明:不让你手动填经纬度,而是把地图选点、快捷指令、代理脚本串起来。对 iPhone 用户来说,真正的门槛不是“会不会写脚本”,而是三件事:模块订阅对不对、MITM 证书信任没信任、iOS 有没有吃旧缓存。
我的建议是:先用快捷指令跑通一次,再决定要不要折腾自部署。只要你把它当成网络定位测试工具,而不是万能定位修改器,预期就会比较稳。