iPhone WLOC 网络定位修改教程
🎯 WLOC 可通过 Shadowrocket 修改 Apple Wi-Fi/基站网络定位返回的坐标。它作用于网络定位服务,适合开发、地图和室内定位测试。
📌 WLOC 是什么
WLOC 用代理模块拦截 Apple 网络定位服务请求,修改 Wi-Fi 与基站定位返回的坐标。整个过程无需越狱,也无需连接电脑。
它作用于 Apple 网络定位层,硬件 GPS 仍然会返回真实坐标。室内或 Wi-Fi 定位占主导时效果更稳定;室外 GPS 信号强时,系统可能优先采用真实 GPS。
| 项目 | 说明 |
|---|---|
| 项目地址 | Yu9191/wloc |
| 代理工具 | Shadowrocket(小火箭) |
| 模块名称 | Apple WLOC 定位修改 |
| 修改对象 | Apple Wi-Fi/基站网络定位 |
| MITM 域名 | gs-loc.apple.com、gs-loc-cn.apple.com |
| 设置方式 | 地图分享快捷指令、在线选点页面 |
| 系统要求 | iPhone、可用代理节点、已信任的 MITM 证书 |
🧰 准备工具
开始前准备以下内容:
- 一台 iPhone。- 已安装 Shadowrocket,并配置可正常连接的代理节点。- WLOC 的 Shadowrocket 模块。- “设置位置”和“清理恢复位置”两个快捷指令。- Safari,用于打开在线选点页面或安装快捷指令。### Shadowrocket 模块地址
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module
两个快捷指令
wloc 设置地理位置- wloc 清理恢复位置### 在线选点页面
WLOC Pages 选点页面- WLOC Workers 选点页面公共页面存在请求限额。长期使用可按项目文档自建 Cloudflare Worker 或 Pages 实例。
🔧 导入模块并开启 HTTPS 解密
第一步:导入 Apple WLOC 模块
- 打开 Shadowrocket。- 进入“配置”。- 打开“模块”。- 点击右上角“+”。- 粘贴上面的
.module地址并下载。- 找到“Apple WLOC 定位修改”,打开右侧开关。模块包含两条脚本规则:
| 规则 | 拦截路径 | 用途 |
|---|---|---|
| Apple WLOC | /clls/wloc |
解析并修改 Apple 定位响应 |
| WLOC Settings | /wloc-settings/save |
将选中的坐标写入持久化存储 |
第二步:开启 HTTPS 解密
- 进入当前使用的 Shadowrocket 配置文件。- 打开“HTTPS 解密”。- “通过 HTTP/2 进行中间人攻击”可暂时保持关闭。- 确认 MITM 主机名包含
gs-loc.apple.com和gs-loc-cn.apple.com。### 第三步:安装并完全信任证书
已经安装过证书,且证书页面显示系统已信任时,可继续使用原证书。
首次配置时按以下顺序操作:
- 在 Shadowrocket 的 HTTPS 解密页面生成 CA 证书。- 按提示下载并安装描述文件。- 打开“设置 → 通用 → VPN 与设备管理”,确认描述文件安装成功。- 打开“设置 → 通用 → 关于本机 → 证书信任设置”。- 为 Shadowrocket CA 证书开启“完全信任”。
⚠️ 每次重新生成证书,都需要重新安装并信任。保留正常工作的证书可减少重复配置。
📍 用快捷指令设置位置
快捷指令是最方便的切换方式,可直接从地图 App 将目标位置发送给 WLOC。
Apple 地图
打开 Apple 地图。- 长按地图放置大头针。- 打开地点详情,点击“共享”。- 选择“wloc 设置地理位置”。- 等待快捷指令返回设置成功提示。### 高德地图
打开高德地图并选中目标位置。- 点击“分享”。- 选择“更多”。- 运行“wloc 设置地理位置”。高德分享地址通常是短链,坐标位于跳转信息中,并采用 GCJ-02 坐标系。WLOC 的解析服务会跟随跳转、提取坐标,再转换为 WGS84。
中国大陆的 Apple 地图链接也可能采用 GCJ-02 坐标。解析服务会按区域判断是否需要转换,境外坐标保持原样。
快捷指令使用的解析接口为:
https://wloc-spoofer.wloc.workers.dev/api/parse
该接口接收地图链接,解析后返回经纬度。项目代码已经开源,可自行部署并在快捷指令中替换为自己的 Worker 域名。
使用快捷指令的前提:代理已连接、WLOC 模块已启用,并且 MITM 证书已信任 Apple 定位域名。
🗺️ 用在线页面选点
快捷指令之外,也可在 Safari 打开在线选点页面。
保持 Shadowrocket 连接,并启用 WLOC 模块和 HTTPS 解密。- 用 Safari 打开
https://wloc-pages.pages.dev/。- 点击地图、搜索地名,或粘贴地图分享链接。- 确认经纬度后点击“储存到设备”。- 页面显示成功,说明坐标已经写入代理工具的持久化存储。- 重新触发 Apple 定位请求,并打开 Apple 地图检查结果。选点页面支持以下输入:直接点击地图- 搜索地名- Apple Maps 分享链接- Google Maps 分享链接- 高德地图分享链接- 百度地图分享链接- 经纬度文本- 浏览器当前位置### 收藏位置
在线页面可以收藏多个位置:
- 选点后点击“收藏位置”,填写最多 30 个字符的备注。- 点击收藏项可让地图快速跳转,再点击“储存到设备”完成切换。- 与设备已保存坐标一致的收藏会标记“✓ 当前生效”。- 收藏列表保存在浏览器
localStorage。- 实际生效坐标保存在代理工具的$persistentStore,键名为wloc_settings。清除浏览器缓存会移除收藏列表,已经写入设备的生效坐标仍然保留。
✅ 激活与测试
设置坐标后,回到 Shadowrocket 首页:
- 将“全局路由”设为“配置”。- 打开连接开关。- 确认状态栏出现 VPN 图标。- 确认 Apple WLOC 模块已经启用。- 确认 HTTPS 解密已经开启。- 重新打开 Apple 地图测试定位。在 iOS 15~18 上,可以先关闭定位服务约 5 秒,再重新开启,让系统重新请求网络定位。
工作流程
地图分享或在线选点
→ 请求 gs-loc.apple.com/wloc-settings/save?lon=x&lat=y
→ WLOC Settings 规则拦截请求
→ wloc-settings.js 写入 wloc_settings
→ Apple 发起下一次 WLOC 请求
→ wloc.js 读取目标坐标
→ 修改 protobuf 定位响应
默认参数如下:
| 参数 | 说明 | 默认值 |
|---|---|---|
longitude |
目标经度 | null/模块默认参数 |
latitude |
目标纬度 | null/模块默认参数 |
accuracy |
定位精度(米) | 25 |
logLevel |
日志级别 | info |
| 坐标使用优先级为:在线选点储存值 > 模块参数 > 默认值。 |
⚠️ iOS 26/27 缓存与故障排查
Apple 从 iOS 26 开始强化 locationd 定位缓存。脚本日志即使显示“已修改”,系统仍可能复用内存中的旧坐标。
iOS 26/27 的关键处理
⚠️ 重启设备才能可靠清除
locationd内存缓存。飞行模式开关和单独关闭定位服务通常无法清除这层缓存。
高版本推荐流程一
先选好目标位置并“储存到设备”。- 开启飞行模式。- 关闭定位服务。- 重启设备。- 开机后关闭飞行模式,并保持 Wi-Fi 关闭。- 连接 Shadowrocket,确认 VPN 图标出现。- 打开定位服务。- 打开地图验证。### 高版本推荐流程二
关闭定位服务。- 在选点页面设置目标位置并储存。- 打开定位服务。- 出现“允许访问位置信息”时,选择“下次询问或在我共享时”。- 打开地图验证。### 页面提示储存失败
按顺序检查:
Apple WLOC 模块开关是否启用。- Shadowrocket 代理连接是否正常。- HTTPS 解密是否开启。- CA 证书是否已安装并完全信任。- MITM 主机名是否包含
gs-loc.apple.com。- Safari 请求是否确实经过代理。### 地图仍显示真实位置转到室内或 Wi-Fi 环境测试,减少硬件 GPS 的影响。- 彻底关闭地图 App 后重新打开。- 检查 Shadowrocket 日志是否出现 WLOC 拦截记录。- iOS 26/27 执行完整重启流程。### 手动写入坐标
也可以在 BoxJS 中直接编辑 wloc_settings:
{“longitude”:121.4737,”latitude”:31.2304,”accuracy”:25}
🔄 恢复真实位置与使用边界
方法一:关闭或删除模块
- 在 Shadowrocket 中关闭 Apple WLOC 模块,或删除模块。- 关闭代理连接。- iOS 26/27 重启设备,清除系统定位缓存。模块停止拦截后,系统会恢复使用原始定位响应。
方法二:运行恢复快捷指令
运行 wloc 清理恢复位置,清除已经保存的坐标。持久化数据为空且模块参数保持默认值时,脚本进入透传模式,直接放行 Apple 的原始定位结果。
项目将默认模块参数设为:
longitude=113.94114
latitude=22.544577
这组参数同时承担“未自定义”的判断标记。若手动修改过模块参数,清除 wloc_settings 后脚本仍可能继续使用模块参数。恢复前应保留模块默认参数,或直接关闭模块。
使用限制
- WLOC 只修改 Apple 网络定位,不影响硬件 GPS。- GPS 信号较强时,部分 App 会继续显示真实位置。- 各应用采用的定位数据源和风控方式不同,效果无法统一保证。- 该工具适合开发测试、地图测试和室内网络定位验证。- 请勿用于规避平台地区限制、支付风控、账号验证、考勤规则或其他违规用途。需要在 iOS 设备上管理多个 eSIM Profile 时,可参考 eSTK.me 实体 eSIM 卡,将兼容的 eSIM Profile 写入实体卡槽,方便不同运营商环境测试。
常见问题
为什么开启模块后没有效果?
先检查代理、模块、HTTPS 解密与证书信任。iOS 26/27 还需要重启清除 locationd 缓存。
所有 App 都会显示修改后的位置吗?
各 App 的定位实现不同。直接读取 GPS 或组合多种信号的应用可能继续显示真实位置。
快捷指令和在线选点需要同时使用吗?
两者任选其一。快捷指令适合从地图分享位置,在线页面适合搜索、收藏和粘贴多种地图链接。
恢复时只关闭 VPN 可以吗?
关闭模块或清除持久化坐标更可靠。iOS 26/27 再重启一次,可清除系统仍在复用的缓存位置。