Appearance
iOS 定位修改 · 小白保姆级教程(Shadowrocket 小火箭)
本教程教你用 Shadowrocket(小火箭) 把 iPhone 的定位改到世界任何地方,无需越狱、无需电脑、无需开发者账号。跟着一步步做即可。改完后可以使用上苹果的满血地图和外版设备iOS27的苹果AI
原理一句话:iPhone 靠周围 Wi-Fi、基站问苹果服务器"我在哪",本模块在苹果回坐标的半路上把坐标改成你指定的地方,iPhone 就以为自己在那里。
开始前你需要
- 一台 iPhone/iPad
- Shadowrocket(小火箭)App(App Store 付费应用,需先买好装好)
- 能正常联网
此方法适用于包括 iOS 27 beta 在内的各系统版本。改坐标后按第六步"关开定位、多试几次"即可生效。
第一步:导入模块
打开 Shadowrocket
底部点 「配置」
找到 「模块」,点右上角 「+」

选 「来自 URL」,粘贴下面这个地址(需要科学上网):
https://raw.githubusercontent.com/mekos2772/ios-location-spoofer/main/ios-location-spoofer.sgmodule保存。回到模块列表,确认这条 「iOS Location Spoofer」前面是勾选/启用状态(右侧有个 ✓)
✅ 模块导入完成。
第二步:打开 HTTPS 解密
进入 「HTTPS 解密」 页面。不同 Shadowrocket 版本入口可能不同:
- Shadowrocket iOS 2.2.88(3308) 实测路径:底部点 「配置」 → 找到当前正在使用的配置文件 → 点右侧 「ⓘ」 → 进 「HTTPS 解密」
- 旧版 / 部分界面:底部点 「设置」 → 进 「HTTPS 解密」
如果在「设置」里找不到「HTTPS 解密」,不代表没有这个功能,优先按第一条从配置文件右侧「ⓘ」进入。
把 「HTTPS 解密」 开关打开(变蓝)
注意:有的版本这里只有一个开关,那是正常的,它本身就是中间人解密。旧教程截图里多出的"HTTP/2 MitM"开关是可选项,没有不影响。
看中间的 「域名」 列表,确认包含这四个(导入模块后通常会自动出现):
gs-loc.apple.com, gs-loc-cn.apple.com, bluedot.is.autonavi.com, bluedot.is.autonavi.com.gds.alibabadns.com如果没有,点绿色 「+」,把上面这串用逗号分隔粘进去,再点右上角 ✓ 保存。
✅ 解密开关和域名就绪。
第三步:安装并信任证书(最关键,别漏)
这一步分三个小步骤,少一步定位就改不了。
3.1 生成并安装证书
- 还在 HTTPS 解密页面,点 「证书」
- 点 「生成 CA 证书」 → 再点 「安装证书」 → 点 「确认」
- 弹出"已下载描述文件"对话框,点 「允许」
注意:必须点 「生成 CA 证书」(不是「生成新的 CA 证书」),否则不会出现下载描述文件弹窗,后续所有步骤都看不到 Shadowrocket 描述文件及证书。证书装好后,「生成 CA 证书」选项会消失。
3.2 去系统里安装描述文件
- 打开 iPhone 设置 App
- 进 设置 → 通用 → VPN 与设备管理
- 找到 Shadowrocket 的描述文件 → 点进去 → 点 「安装」(输入锁屏密码)
3.3 信任证书 ⚠️(90% 的人漏这步)
- 进 设置 → 通用 → 关于本机 → 证书信任设置
- 把 Shadowrocket 那个证书的开关打开(启用完全信任)
✅ 三步都做完,解密才能真正工作。
第四步:开启代理
- 回到 Shadowrocket 首页
- 把顶部的总开关打开(显示"已连接")
- 第一次会弹"是否允许添加 VPN 配置",点 允许
✅ 代理已开启,上方状态栏会出现 VPN 图标。
第五步:设置你想去的坐标
默认定位是苹果总部(美国库比提诺)。改成你想要的地点:
- Shadowrocket → 配置 → 模块 → 点开 「iOS Location Spoofer」
- 找到
argument=那一行,改里面这两个数字:latitude=→ 你的纬度longitude=→ 你的经度
- 保存
几个常用坐标可直接抄:
| 地点 | latitude(纬度) | longitude(经度) |
|---|---|---|
| 北京天安门 | 39.9087 | 116.3975 |
| 上海外滩 | 31.2397 | 121.4900 |
| 广州塔 | 23.1066 | 113.3245 |
| 东京塔 | 35.6586 | 139.7454 |
怎么查任意地点的坐标:用电脑或手机打开 Google 地图 / 高德地图,找到目标位置,右键或长按 → 复制坐标,会得到两个数字。顺序是 纬度在前、经度在后。
顺手把海拔等参数也调一下(建议,别只改经纬度)
argument= 里除了经纬度,还有几个参数一起构成"完整的一次定位"。只改经纬度、海拔却停在默认的 530 米,跑到上海(近海平面)或拉萨(3600 米)时就会明显对不上、容易露馅。建议按目标地点顺手调一下:
| 参数 | 默认值 | 含义 | 建议 |
|---|---|---|---|
altitude | 530 | 海拔(米),支持负数 | 改成目标地点的真实海拔(下面教你查)。上海≈4、北京≈44、拉萨≈3650、吐鲁番可为负 |
horizontalAccuracy | 39 | 水平精度(米),越小越"精准" | 想更像 GPS 可设 5~15;保持 39 也正常 |
verticalAccuracy | 1000 | 垂直精度(米) | 配了真实海拔后可调小到 10~30,让海拔显得更可信 |
怎么查目标地点海拔:浏览器搜"地名 海拔",或用高德/Google 地图;也可以打开这个免费接口直接看(把经纬度换成你的):
https://api.open-meteo.com/v1/elevation?latitude=31.2397&longitude=121.4900返回里的
elevation就是海拔(米)。
改法和经纬度一样:在 argument= 那行找到对应参数改数字,保存即可。其余参数(motionActivityType 等运动状态)一般不用动。
第六步:让定位生效
改完坐标不会立刻生效,需要"逼" iPhone 重新向苹果请求定位。方法很简单:
- 打开 设置 → 隐私与安全性 → 定位服务
- 整个关掉,等 10 秒以上,再打开
- 打开 地图 或 天气 App 查看定位
- 没变就重复关/开定位几次,多试几遍就会生效
苹果对定位有缓存,需要重新发请求才会被拦截修改,所以有时要多关开几次、多试几遍才命中。生效后通常会稳定保持,不用一直关开。
补充触发技巧:还可以彻底杀掉地图/天气 App 再重开,或用 Apple 自带「地图」点右下角定位箭头强制重新定位。
进阶(可选):用网页地图选点,告别手动改参数
前面第五步是手动去模块里改 latitude / longitude / altitude 数字——偶尔换一次没问题,但经常换、还要每次查海拔就很烦。
项目自带一个网页地图选点工具(location-picker/server.js),把这些全自动化了:
- 手指点地图哪里,定位就到哪里,不用手查经纬度
- 海拔按地形自动获取(点哪自动填哪的真实海拔),不用自己查
- 水平精度 / 垂直精度在网页上直接调,点「保存」即可
- 支持高德 / 卫星 / 国外地图切换,自动处理国内地图偏移
- 搜索地名能列出多个候选,像真地图一样选
- 一键"恢复真实定位":不用去关模块,网页点一下就让脚本放行、回到真实位置(再点一下恢复伪造)
用它需要什么
- 一台能长期运行的服务器 / VPS / NAS(用来跑这个小工具)
- 有一点点动手能力(会用 SSH、systemd)
如果你没有服务器、只是偶尔改一次定位 → 不用装这个,按第五步手动改数字就够了。 如果你经常换地方、想"点地图就搞定" → 值得装。
怎么装
- 把项目里的
location-picker/server.js上传到你的服务器运行(文件开头的注释写了启动命令,支持自带 https 复用已有证书) - 在 Shadowrocket 模块的
argument=末尾追加(前面的参数都保留):&configUrl=https://你的域名:端口/loc.json?token=你的密码 - 之后改定位就是:打开网页 → 点地图 → 按第六步关开定位生效
详细部署步骤(systemd 常驻、证书、端口、Cloudflare 等)都写在
location-picker/server.js文件顶部的注释里,跟着做即可。
配置环境变量(必读)
server.js 通过环境变量控制,TOKEN 不设进程会直接退出,不会用弱口令兜底——这是防呆设计,避免你部署完忘了改默认密码被人扫。
| 变量 | 是否必设 | 默认值 | 说明 |
|---|---|---|---|
TOKEN | 必设 | 无 | 网页端和模块 configUrl 里的 token= 必须一致。建议 openssl rand -hex 24 生成 |
PORT | 否 | 8080 | 监听端口;1024 以下需 root |
CERT | 否 | 空 | HTTPS 证书 fullchain 路径;与 KEY 同时设置才走 https |
KEY | 否 | 空 | HTTPS 私钥路径;与 CERT 同时设置才走 https |
启动示例:
bash
# http(先跑通流程,再用 https)
TOKEN=$(openssl rand -hex 24) PORT=8080 node server.js
# https(复用 acme.sh 证书,续期无需重启,进程每 12 小时自动热加载)
TOKEN=$(openssl rand -hex 24) PORT=8443 \
CERT=/root/cert/example.com/fullchain.pem \
KEY=/root/cert/example.com/privkey.pem \
node server.js然后模块 argument= 末尾的 configUrl 写成:
&configUrl=https://example.com:8443/loc.json?token=上面那个TOKEN⚠️ URL 末尾必须带
?token=<TOKEN>,且这个 TOKEN 必须和服务器启动时环境变量TOKEN的值完全一致。否则:
- 没带
?token=→ 服务端返回 401missing token?token=写错 → 服务端返回 403bad token同样的规则适用于浏览器访问
/、/set、/enable端点。
数据文件 loc.json 自动落在 server.js 同目录,记录当前坐标 / 海拔 / 精度;已写入 .gitignore,不会污染仓库。
⚠️ 不要把
TOKEN直接写在命令行里——推荐用 systemd 的Environment=或.env+direnv,避免history和ps aux泄露出去。⚠️ iPhone 的 Shadowrocket 第一次访问
configUrl时会弹一次"是否信任证书",点信任。
常见问题排查
Q:定位一直不变? 按这个顺序查:
- 证书信任设置里的开关有没有真的打开(第 3.3 步,最常见原因)
- 模块是不是在「模块」里且已启用(右侧有 ✓)
- HTTPS 解密开关是否打开、四个苹果域名是否都在
- 有没有多试几次关/开定位(苹果有缓存,往往要重复几遍才生效)
- 把模块
argument=里的debug=false改成debug=true,去 Shadowrocket「数据/日志」看有没有拦截到wloc请求——能看到说明拦截成功
Q:模块导入后域名没自动出现? 手动在 HTTPS 解密页面把那四个域名加进去,记得点右上角 ✓ 保存。
Q:找不到「HTTPS 解密」入口? 如果你使用的是 Shadowrocket iOS 2.2.88(3308),实测入口在「配置」页中:找到当前正在使用的配置文件,点击右侧「ⓘ」,再进入「HTTPS 解密」。旧版或部分界面可能仍在底部「设置」里。
Q:可以恢复真实定位吗? 可以。关掉模块(取消 ✓)或关掉 Shadowrocket 总开关,然后按第六步刷新一次定位即可恢复。
Q:Apple News / 依赖区域的服务还是判定我在原位置? Apple News 等部分应用不只读定位,还依赖 iOS 系统服务的多个开关。请打开 设置 → 隐私与安全性 → 定位服务 → 系统服务,把里面所有开关全部打开(特别是「基于位置的 Apple 广告」「重要地点」「iPhone 分析」「路由与流量」「提升地图准确性」等)。全部打开后再关开一次定位,Apple News 通常就能识别到新区域了。
操作顺序速查
导入模块 → 开HTTPS解密+加域名 → 装证书并信任 → 开代理 → 改坐标保存
→ 关定位等10秒再开(没变就多试几次) → 打开地图验证祝配置顺利。卡在哪一步,对照上面"常见问题排查"逐条检查即可。