🎯 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.comgs-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.comgs-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 再重启一次,可清除系统仍在复用的缓存位置。