iPhone定位怎么改?我这次用 Shadowrocket + WLOC 在 iPhone 上从头跑了一遍。旧模块先遇到 404,HTTPS 解密也卡过,排完这些坑以后,系统定位真的切到了 London。
WLOC改的是哪一种定位
iPhone 的“定位”本来就不只靠 GPS。Apple 的定位服务会结合 GPS、蓝牙、Wi-Fi 和蜂窝网络等信息来判断设备位置。
WLOC 这套方法动的是 Apple 网络定位返回的数据。GPS 芯片本身没有被改,也不需要越狱。你可以把它理解成:系统向 Apple 查询 Wi-Fi、基站位置时,Shadowrocket 把返回的坐标改成你指定的位置。
这也是它最大的边界。苹果地图、系统里依赖这类网络定位的数据有机会跟着变化,但某个 App 如果继续拿 GPS、自己的定位 SDK、旧缓存,定位结果就可能和系统地图不一样。我这次测试里,系统位置已经能切到 London,QQ 还是原来的位置,这时候就需要QQ重新设置一下就可以了。
旧模块404,直接换当前维护版本
我一开始踩的坑很简单:网上流传的旧 WLOC Raw 地址已经 404。
这种时候继续反复导入没有意义。我后来换成了 xweiba/location-spoofer 当前维护的 Shadowrocket 模块,导入后在“小火箭”的模块页面能看到“Apple WLOC 定位修改”。
当前 Shadowrocket 模块地址是:https://raw.githubusercontent.com/xweiba/location-spoofer/main/ThirdParty/WlocScripts/modules/direct/wloc.module?v=1.0.8
导入成功后,模块右侧要有蓝色勾选。项目当前的模块会调用 wloc.js 修改 Apple WLOC 响应,同时用 wloc-settings.js 保存和读取你设置的坐标。

真正容易卡住的是HTTPS解密
模块导入成功,只完成了一半。
我刚开始测试时,在 Safari 打开 WLOC 查询地址:https://gs-loc.apple.com/wloc-settings/save?action=query,页面直接显示 Not Found。
当时我还以为脚本失效了。回头检查 Shadowrocket 的 HTTPS 解密页面,才发现域名列表里只有 *.google.cn。也就是说,请求根本没有交给 WLOC 脚本处理,直接跑到了 Apple 服务器。
WLOC 当前需要处理的域名包括 gs-loc.apple.com、gs-loc-cn.apple.com、gsp-ssl.ls.apple.com、bluedot.is.autonavi.com、bluedot.is.autonavi.com.gds.alibabadns.com。这里不用把 *.apple.com 全部塞进去。只放需要解密的域名更稳定,也少碰无关流量。


证书装上了,还要再开一次完全信任
HTTPS 解密要工作,还需要 Shadowrocket 的 CA 证书。
证书生成并安装后,iPhone 还不会自动把它当成受信任的 SSL 根证书。进入“设置 → 通用 → 关于本机 → 证书信任设置”,找到刚才 Shadowrocket 生成的证书,把“完全信任”打开。
Apple 官方支持文档对手动安装的根证书也是这个要求。只安装描述文件,没有打开完全信任,MITM 解密依旧可能不工作。
安装证书时如果系统要求输入“身份证书”的密码,别照抄网上流传的固定密码。看 Shadowrocket 当前 HTTPS 解密页面里显示的证书密码,用当前这一组。

用查询地址判断WLOC到底通没通
证书信任、HTTPS 解密、模块都处理完以后,再打开:https://gs-loc.apple.com/wloc-settings/save?action=query。
这次只要出现 JSON,哪怕返回的是 {"success":false,"error":"无已保存的坐标"},也算好消息。它说明 Safari 请求已经被 wloc-settings.js 接住,此时问题只剩下“还没有保存目标坐标”。
我这次刚打通时,中文错误提示出现了乱码,但 JSON 结构已经出来了。这个显示问题不用折腾,只要不再是 Apple 原始的 Not Found,链路基本就对了。
把目标坐标写进去
WLOC 代理客户端模式使用 WGS-84 坐标。设置地址的格式是:https://gs-loc.apple.com/wloc-settings/save?lon=经度&lat=纬度&acc=25。
我测试时先写入了一组坐标:https://gs-loc.apple.com/wloc-settings/save?lon=116.397128&lat=39.916527&acc=25。
页面返回 success:true,就代表坐标已经存进 WLOC 的持久化数据。再访问一次 query 地址,也应该能读回同一组 longitude、latitude 和 accuracy。

改完位置没动,先处理定位缓存
坐标保存成功,不代表地图会立刻跳过去。
我这次跑下来,定位缓存确实会影响判断。已经确认模块和查询接口都正常时,别一直重复导入模块、删证书、改参数。
可以把定位服务关掉,重启 iPhone。开机后确认 Shadowrocket 已经连接、WLOC 模块仍然启用,再开启定位服务测试。
我后面就是在这套链路已经打通的情况下,把系统位置成功切到了 London。某个 App 仍显示旧位置,要单独看那个 App 的定位来源和缓存,继续改 WLOC 参数通常没有意义。
为什么QQ还是原来的位置
这个现象反而很有参考价值。
Apple 自己的说明里,iPhone 定位服务会综合 GPS、蓝牙、Wi-Fi 和蜂窝网络。App 还能按照自己的实现方式使用系统定位能力,也可能保留缓存。
WLOC 改成功,只能证明 Apple 网络定位的系统已经被改写。它不能保证 QQ、微信、游戏、打车软件都会无条件采用同一组坐标。
如果系统地图已经改变,QQ 没变,可以先关闭 QQ 的“精确位置”、杀掉后台,再重新打开就可以了。

怎么恢复真实定位
不用的时候,可以访问:https://gs-loc.apple.com/wloc-settings/save?action=clear,清掉保存的坐标,再关闭 WLOC 模块和 HTTPS 解密。
如果系统仍停在之前的位置,重启一次 iPhone,让定位缓存重新建立。
CA 证书本身具备 HTTPS 解密能力,也不建议长期没必要地开着。只给 WLOC 需要的域名做解密,用完关闭,会更干净。
我这次踩坑后最想提醒的一点
这套方法真正麻烦的地方,不在经纬度。
旧模块 404、证书没有完全信任、HTTPS 解密漏了 gs-loc.apple.com,这三个问题里随便中一个,都可能让你误以为“WLOC失效”。
判断时不要只盯着地图。先看 query 地址到底返回 Not Found,还是 WLOC 自己的 JSON;再看保存坐标有没有 success:true;系统地图能不能切换。把这三层分开查,问题会清楚很多。
核实时间为 2026 年 9 月 14 日。WLOC 属于开源方案,脚本、iOS 和 Shadowrocket 后续都可能更新。只建议用于自己的设备测试、开发和定位排障,不要拿它绕过平台规则、地区资格或安全限制。
如有错误,敬请指正。
版权声明
本文仅代表作者观点,不代表新肇数码立场。
本文系作者授权发表,未经许可,不得转载。












发表评论