wloc 修改 iPhone 定位的方案比较方便的地方在于:不需要越狱、不需要电脑,也不用开发者账号,配置完成后直接通过地图和快捷指令就可以切换位置。
参考项目:Github/Yu9191/wloc
大概是什么原理
这里不展开研究 iOS 定位的完整机制,只说和这套方案有关的部分。
iPhone 在定位过程中会向 Apple 的定位服务请求位置相关信息,wloc 做的事情就是通过 Shadowrocket 的模块和 HTTPS 解密,在这类请求经过时修改返回的坐标。
所以配置的核心其实只有三件事:
- 在 Shadowrocket 中导入
wloc模块; - 对 Apple 定位相关域名开启 HTTPS 解密;
- 安装并信任 Shadowrocket 的 CA 证书,让前面的解密规则真正生效。
全部配置完成之后,就可以用快捷指令把地图里的某个坐标写进去,系统定位也会跟着切过去。
准备工作
需要的东西很少:
- 一台 iPhone;
- Shadowrocket。
后面的操作基本都在手机上完成。
第一步:导入 wloc 模块
先打开 Shadowrocket,进入底部的 配置 页面,然后找到 模块。
点击右上角的 +,选择 来自 URL,填入下面这个地址:
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module
保存之后回到模块列表,应该可以看到:
Apple WLOC 定位修改 ✔
到这里模块本身就导入好了,不过现在它还不能直接工作,因为我们还需要让 Shadowrocket 能够处理 Apple 定位服务的 HTTPS 请求。
第二步:配置 HTTPS 解密
进入 Shadowrocket:配置 → 当前使用的配置文件 → 右侧 ⓘ → HTTPS 解密
先把 HTTPS 解密 开关打开,然后在中间的域名列表里加入下面两个域名:
gs-loc.apple.com
gs-loc-cn.apple.com
添加完成后点击右上角保存。
这两个域名是后面 wloc 处理定位请求的关键。如果这里只打开了解密,但是没有把对应域名加进去,模块也不会按预期接管定位请求。
第三步:安装并信任 CA 证书
这一步是整个配置里比较容易漏掉的地方。Shadowrocket 虽然已经开启了 HTTPS 解密,但 iOS 还需要信任它生成的 CA 证书,否则前面的解密规则实际上跑不起来。
生成并安装证书
仍然停留在 HTTPS 解密 页面,点击 证书。
选择:生成新的 CA 证书 → 安装证书,系统弹出已经下载描述文件的提示之后,先点确定。
安装描述文件
接着打开 iPhone 的 设置,进入:通用 → VPN 与设备管理
找到刚刚由 Shadowrocket 生成的描述文件,点进去完成安装。
完全信任证书
进入:设置 → 通用 → 关于本机 → 证书信任设置
找到 Shadowrocket 对应的证书,将它的 完全信任 开关打开。
这里三步要全部做完:生成证书、安装描述文件、开启完全信任。 少任何一步,后面都有可能出现“模块看起来都开了,但是定位完全没变化”的情况。
第四步:开启 Shadowrocket
回到 Shadowrocket 首页,把顶部的总开关打开。
第一次使用时,iOS 可能会询问是否允许添加 VPN 配置,选择允许即可。然后可能还需要加入一个订阅节点,建议直接选择你想要修改到的目标地点的节点,这里就不赘述了。
正常连接之后,Shadowrocket 会显示已经连接,状态栏里也会出现 VPN 标志。
到这里,wloc 需要的网络环境基本就准备完成了。
第五步:通过快捷指令修改定位
实际切换位置时,不需要再去 Shadowrocket 里手动填经纬度。我现在直接配合两个快捷指令使用,一个负责设置位置,一个负责恢复。复制到手机上点开,保存到快捷指令中。
设置地理位置
https://www.icloud.com/shortcuts/a82717d8fdad4e6280866fcf911173f7
清理并恢复位置
https://www.icloud.com/shortcuts/f42632d406504f24a2cd163af4fe012f
两个快捷指令添加好以后,平时改定位就比较简单了。
如果使用高德地图:选点 → 分享 → 更多 → wloc 设置地理位置
快捷指令会读取你分享出来的位置,然后把坐标交给 wloc。
检查定位是否已经生效
设置完位置之后,我一般会把 iPhone 的定位服务关闭再重新打开一次,让系统重新请求位置。
然后打开 Apple 地图或者高德地图,看当前位置是否已经移动到刚才选择的地方。
如果位置正常切过去,说明整套配置已经生效。需要恢复真实定位时,运行恢复的快捷指令。
然后同样重新开关一次定位服务,再打开地图检查即可。
如果定位没有变化
如果快捷指令已经正常运行,但是地图里的位置完全没变,可以优先重新检查前面的几个地方:
- 模块是否处于启用状态;
- HTTPS 解密是否已经开启;
gs-loc.apple.com和gs-loc-cn.apple.com是否已经加入解密域名;- Shadowrocket 的 CA 描述文件是否真正安装;
- 证书信任设置里是否开启了完全信任;
- Shadowrocket 首页的代理是否处于连接状态。
这套配置本身步骤不多,真遇到问题时,大部分还是 HTTPS 解密或者证书这里漏了一步。
写在最后
wloc 对我来说最大的用处就是省事。
以前提到修改 iPhone 定位,很容易想到电脑连接、开发者模式等工具;而这套方式在 Shadowrocket 里配置一次之后,后面基本就是地图选点 → 分享给快捷指令,切换位置很快。