mirror of
https://github.com/xweiba/location-spoofer.git
synced 2026-09-21 22:30:46 +08:00
docs: refresh installation and feature previews
This commit is contained in:
@@ -2,261 +2,384 @@
|
||||
|
||||
# 📍 Location Spoofer
|
||||
|
||||
### iOS 虚拟定位 · 钉钉定位 · 微信定位 · Apple Watch 国区功能解锁 · Fake GPS
|
||||
### iOS Location Service Research & Testing Framework
|
||||
|
||||
**无需越狱;通过 APP 模式的本机 Wi‑Fi HTTP 代理,或第三方代理模式(Wi‑Fi/4G/5G)改写 Apple 定位服务响应。**<br>
|
||||
适用于钉钉、微信、Apple 地图等读取系统定位的 App。地图选点、收藏、模式配置、环境检测和问题诊断集中在一个 App 中。
|
||||
一个用于 **iOS 定位服务研究、软件开发测试和 QA 验证** 的开源项目。
|
||||
|
||||
项目通过本机代理或第三方代理客户端,对 Apple 定位服务的指定响应进行测试环境模拟,帮助开发者验证应用在
|
||||
不同地理位置和定位场景下的行为。
|
||||
|
||||
[](project.yml)
|
||||
[](project.yml)
|
||||
[](Core/go.mod)
|
||||
[](project.yml)
|
||||
[](Core/go.mod)
|
||||
[](docs/CHANGELOG.md)
|
||||
[](#工作原理)
|
||||
|
||||
[功能介绍](#核心功能) · [快速开始](#快速开始) · [工作原理](#工作原理) · [English](README.en.md) · [更新日志](docs/CHANGELOG.md)
|
||||
|
||||
<img src="images/主界面.jpg" alt="Location Spoofer iOS 虚拟定位 Fake GPS 主界面" width="380">
|
||||
[功能概览](#功能概览) ·
|
||||
[工作原理](#工作原理) ·
|
||||
[快速开始](#快速开始) ·
|
||||
[构建项目](#构建项目) ·
|
||||
[English](README.en.md)
|
||||
|
||||
</div>
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 本项目仅用于学习、安全研究和自有设备测试。APP 模式需要安装本机生成的 CA,并为当前 Wi‑Fi 配置 HTTP 代理;第三方代理模式的证书、MITM 及代理/VPN 连接由所选客户端负责。实际效果受 iOS、网络、定位缓存和目标 App 策略影响,请遵守当地法律、网络管理规则及相关服务条款。
|
||||
> 本项目用于学习研究、自有设备测试、软件开发和 QA 验证。
|
||||
>
|
||||
> 请仅在你拥有或获得授权的设备、网络和软件环境中使用,并遵守当地法律法规、网络管理规定以及相关服务条
|
||||
> 款。
|
||||
>
|
||||
> 本项目不保证兼容所有 iOS 版本或第三方应用,也不承诺绕过第三方应用的安全策略、业务限制或服务规则。
|
||||
|
||||
## 致谢
|
||||
## 项目定位
|
||||
|
||||
核心定位响应改写思路与 Go 实现来源于 [Yu9191/wloc](https://github.com/Yu9191/wloc)。本项目在此基础上增加 SwiftUI 界面、MapKit 选点、证书与代理引导、环境验证、收藏和诊断能力。
|
||||
Location Spoofer 是一个面向 iOS 定位服务行为研究和开发测试的工具。
|
||||
|
||||
## 为什么选择 Location Spoofer?
|
||||
它提供:
|
||||
|
||||
很多 iOS 虚拟定位工具依赖电脑常驻、开发者调试或越狱。本项目把选点和控制流程放在 iPhone 上,并提供两条互斥的运行路径:由 App 在本机启动 Go 代理,或把坐标同步给已有的第三方代理客户端。
|
||||
- 原生地图选点和位置场景切换;
|
||||
- Apple 定位服务响应的测试环境模拟;
|
||||
- 本地代理和第三方代理两种运行模式;
|
||||
- 坐标标准识别与 WGS-84 / GCJ-02 双坐标管理;
|
||||
- 环境检测、运行日志和问题诊断;
|
||||
- 收藏位置和上次地图状态恢复。
|
||||
|
||||
| 特性 | 说明 |
|
||||
|---|---|
|
||||
| 🔀 **双运行模式** | APP 模式无需第三方客户端、适用于 Wi‑Fi;第三方代理模式可随客户端覆盖 Wi‑Fi、4G 和 5G |
|
||||
| 📱 **无需越狱** | 支持自行签名安装,最低部署目标为 iOS 15 |
|
||||
| 🗺️ **原生地图体验** | 使用 Apple 地图同款蓝点,搜索、点击、拖动选点体验与 Apple 地图一致 |
|
||||
| 📍 **系统定位响应改写** | 可影响钉钉、微信、Apple 地图、高德等读取系统定位的 App,兼容性以真机结果为准 |
|
||||
| 🔍 **可见缩放范围** | 左侧缩放控件显示当前可视范围,地点名称随级别自动适配 |
|
||||
| 🧭 **坐标一致性** | 自动处理 MapKit 地图坐标与 WGS-84,收藏、恢复和第三方同步使用明确的坐标来源 |
|
||||
| 🧪 **按模式检测** | APP 模式检查本地代理、CA 信任和 Wi‑Fi 链路;第三方模式验证模块是否真正拦截请求 |
|
||||
| 🧾 **问题诊断** | 日志可搜索、逐条或整体复制,并可生成已脱敏的 GitHub Issue 报告 |
|
||||
项目不修改目标 App 的源代码,也不提供远程控制或数据采集服务。
|
||||
|
||||
## 效果预览
|
||||
## 功能概览
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>应用主界面</th>
|
||||
<th>钉钉</th>
|
||||
<th>微信</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="images/主界面.jpg" alt="iOS 虚拟定位应用主界面" width="180"></td>
|
||||
<td><img src="images/钉钉.jpg" alt="钉钉虚拟定位打卡" width="180"></td>
|
||||
<td><img src="images/微信.jpg" alt="微信虚拟定位" width="180"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Apple 地图</th>
|
||||
<th>高德地图</th>
|
||||
<th>Apple Watch</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="images/Apple%20Map.jpg" alt="Apple Maps 定位效果" width="180"></td>
|
||||
<td><img src="images/高德地图.jpg" alt="高德地图定位效果" width="180"></td>
|
||||
<td><img src="images/高血压.jpg" alt="Apple Watch 地区功能验证" width="180"></td>
|
||||
</tr>
|
||||
</table>
|
||||
- **原生地图交互**
|
||||
- 使用 MapKit 显示地图和系统蓝点;
|
||||
- 支持搜索、点击选点、拖动地图中心和缩放;
|
||||
- 支持收藏位置和恢复上次选点;
|
||||
- 当前选点同时显示国内坐标和国际坐标,可分别复制。
|
||||
|
||||
## 核心功能
|
||||
- **定位服务响应模拟**
|
||||
- 通过代理层处理指定的 Apple 定位服务请求;
|
||||
- 在测试环境中返回选定的坐标数据;
|
||||
- 不需要修改目标 App 代码。
|
||||
|
||||
- **iOS 虚拟定位 / Fake GPS**:将当前选点写入 APP 模式代理,或同步给第三方 WLOC 模块。
|
||||
- **原生地图与实时位置**:使用 MapKit 蓝点,支持搜索、点击、拖动地图中心、缩放以及快速打开 Apple 地图。
|
||||
- **并发安全选点**:拖动、点击、搜索、收藏和异步定位按用户最新意图处理,旧结果不会覆盖新选点。
|
||||
- **地点名称分级**:近距离显示 POI、门牌或道路;拉远后显示社区、区县、城市或省份。
|
||||
- **地图范围显示**:缩放控件中显示 `180 m`、`2.5 km`、`126 km` 等当前可视范围。
|
||||
- **收藏与状态恢复**:保存、重命名和切换常用位置,记住最后图钉与地图范围。
|
||||
- **坐标系自动处理**:启动时确认地图坐标标准,内部保留 WGS-84 与地图坐标配对,减少中国大陆地图偏移。
|
||||
- **分模式首次引导**:APP 模式配置本机代理和 CA;第三方模式选择客户端、复制订阅地址并检测连接。
|
||||
- **本机代理保活**:APP 模式启动虚拟定位后使用静音音频维持后台运行,并响应网络切换重新检测环境。
|
||||
- **结构化诊断**:运行日志自动轮转,仅保留近 3 天;支持过滤、复制、清空和生成 Issue 报告。
|
||||
- **第三方代理模式(测试)**:向模块查询、保存或清除 WGS-84 坐标;坐标由代理客户端持久化,关闭本 App 后仍可能继续生效。
|
||||
- **双运行模式**
|
||||
- APP 模式:在设备内运行 Go 代理,仅支持当前 Wi-Fi 网络;
|
||||
- 第三方代理模式:通过支持的代理客户端覆盖 Wi-Fi、4G 或 5G,具体能力取决于客户端。
|
||||
|
||||
## 快速开始
|
||||
- **环境检测**
|
||||
- APP 模式检测本地代理、证书信任和请求链路;
|
||||
- 第三方代理模式检测 WLOC 配置接口和模块响应;
|
||||
- 失败时提供对应的配置或诊断入口。
|
||||
|
||||
### 1. 安装 App
|
||||
|
||||
#### 自签安装
|
||||
|
||||
Release 附件是未签名 IPA,需要使用自签工具安装到 iPhone:
|
||||
|
||||
1. **开启自签支持**:iOS 16 及以上版本前往“设置 → 隐私与安全性 → 开发者模式”,开启后按系统提示重启并确认;iOS 15 没有此开关,可跳过本步。
|
||||
2. **下载 IPA**:前往本项目的 [Releases](https://github.com/xweiba/location-spoofer/releases),下载最新的 `PaopaoLocationSpoofer-unsigned.ipa`。
|
||||
3. **准备自签软件**:前往 [Impact Releases](https://github.com/claration/Impactor/releases/latest) 下载对应系统版本的 Impact;也可以使用爱思助手等支持 IPA 自签安装的软件。
|
||||
4. **连接并安装**:使用 USB 数据线连接 iPhone 与电脑,在手机上选择“信任此电脑”,然后在自签软件中选择刚下载的 IPA,根据软件提示完成签名与安装。
|
||||
|
||||
> Impact 支持 Windows、macOS 和 Linux;Windows 若无法识别设备,请先安装 iTunes 提供 Apple 设备驱动。爱思助手属于第三方软件,请从其官方渠道获取,并自行评估账号、证书和隐私风险。
|
||||
|
||||
安装完成后,若 iOS 阻止打开 App,请前往“设置 → 通用 → VPN 与设备管理”信任对应的开发者 App。免费 Apple ID 自签通常只有 7 天有效期,到期后需要重新签名安装。
|
||||
|
||||
本项目自身不包含 VPN、Network Extension 或 Packet Tunnel Provider,但签名工具仍需保留 App 的标识和声明能力。
|
||||
|
||||
需要自行构建时执行:
|
||||
|
||||
```bash
|
||||
./build.sh
|
||||
```
|
||||
|
||||
输出文件为 `dist/PaopaoLocationSpoofer-unsigned.ipa`,随后按上面的自签步骤安装到设备。完整构建要求见[构建说明](docs/BUILD.md)。
|
||||
|
||||
签名时不要修改以下标识,也不要移除 App Group 和 Wi-Fi 信息能力:
|
||||
|
||||
| 组件 | 标识 |
|
||||
|---|---|
|
||||
| 主 App Bundle ID | `com.paopaolabs.location-spoofer` |
|
||||
|
||||
签名有效期是 Apple 的侧载限制,不是 WLOC CA 失效。CA 私钥保存在 iOS 钥匙串中:相同 Bundle ID 和钥匙串访问范围下重装通常可以复用,但卸载、系统清理或签名能力变化后不保证保留。
|
||||
|
||||
### 2. 选择运行模式
|
||||
|
||||
#### APP 模式(本机 Wi‑Fi)
|
||||
|
||||
首次打开后选择 APP 模式,再按 App 内引导配置代理和 CA。此模式会在设备内启动 `wloccore`,不依赖第三方代理客户端,但流量入口只覆盖当前 Wi‑Fi。
|
||||
|
||||
##### 配置当前 Wi‑Fi 代理
|
||||
|
||||
首次打开后,先在当前 Wi‑Fi 的“配置代理”中选择“手动”:
|
||||
|
||||
```text
|
||||
服务器:127.0.0.1
|
||||
端口:8888
|
||||
鉴定:关闭
|
||||
```
|
||||
|
||||
返回 App 后运行环境检测;若设备尚未信任 CA,App 会进入完整的证书初始化流程。
|
||||
|
||||
##### 安装并信任 CA
|
||||
|
||||
按首次引导下载描述文件,然后依次完成:
|
||||
|
||||
```text
|
||||
设置 → 通用 → VPN 与设备管理 → 安装 WLOC CA
|
||||
设置 → 通用 → 关于本机 → 证书信任设置 → 完全信任
|
||||
```
|
||||
|
||||
#### 第三方代理模式(测试)
|
||||
|
||||
此模式由 App 负责地图选点、收藏以及查询、同步和清除 WGS-84 坐标;WLOC 拦截、MITM 与坐标持久化由第三方代理客户端负责。它不会启动本机 Go 代理,不使用 App 生成的 CA,也不要求配置 `127.0.0.1:8888`。网络覆盖范围取决于代理客户端,可包括 Wi‑Fi、4G 和 5G。
|
||||
|
||||
首次引导或“设置 → 运行模式”切换后,选择客户端。App 提供官方订阅地址复制和客户端跳转按钮;在对应客户端的模块、重写或覆写订阅入口粘贴地址并导入。仓库和 App 包内仍保留以下模块配置快照,用于版本归档和离线核对:
|
||||
|
||||
| 客户端 | 状态 | 模块 |
|
||||
|---|---|---|
|
||||
| Shadowrocket(小火箭) | **当前可测试** | [wloc.module](https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module) |
|
||||
| Surge | 配置已提供,尚未验证 | [wloc.sgmodule](https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.sgmodule) |
|
||||
| Quantumult X | 配置已提供,尚未验证 | [wloc.conf](https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.conf) |
|
||||
| Loon | 配置已提供,尚未验证 | [wloc.lpx](https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.lpx) |
|
||||
| Stash | 配置已提供,尚未验证 | [wloc.stoverride](https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.stoverride) |
|
||||
| Egern | 配置已提供,尚未验证 | 直接使用 Surge 模块 |
|
||||
|
||||
Shadowrocket 还需为 `gs-loc.apple.com` 开启 HTTPS 解密。Stash 应直接订阅 `.stoverride`,无需通过 Script Hub 转换;Egern 复用 Surge 配置。导入后仍需按客户端自己的流程启用模块、MITM、证书和代理/VPN 连接,这些状态不由本 App 管理。“检测连接”只有在接口返回有效模块 JSON 时才会通过,普通 HTTP 200 不会被误判为成功。
|
||||
|
||||
> 第三方代理模式目前是测试模式。内置模块快照来源及版本记录见 [第三方模块说明](docs/THIRD_PARTY_MODULES.md);模块引用的运行脚本仍由第三方客户端按配置访问。上游更新可能改变行为;当前仅计划使用 Shadowrocket 做真机验证。
|
||||
|
||||
### 3. 选点并启用
|
||||
|
||||
1. 搜索、点击或拖动地图选择位置;点击定位按钮可回到当前 MapKit 蓝点,也可以保存为收藏。
|
||||
2. APP 模式点击“开始虚拟定位”并等待环境检测;第三方代理模式点击“同步到第三方代理”。
|
||||
3. 按 App 内“生效说明”刷新飞行模式、Wi‑Fi 和定位服务状态。
|
||||
4. 打开 Apple 地图或目标 App 验证结果。
|
||||
|
||||
### 4. 恢复真实位置
|
||||
|
||||
APP 模式下先停止虚拟定位,再关闭当前 Wi‑Fi 的手动代理;第三方代理模式下使用“清除第三方代理坐标”,必要时再停用对应模块或代理连接。随后按 App 内“失效说明”刷新系统定位缓存;若仍保留旧位置,请重启设备后再检查。
|
||||
- **开发调试**
|
||||
- 运行日志;
|
||||
- 日志复制和清理;
|
||||
- 坐标标准变化记录;
|
||||
- 脱敏问题报告生成。
|
||||
|
||||
## 工作原理
|
||||
|
||||
### APP 模式为什么不需要 VPN?
|
||||
### APP 模式
|
||||
|
||||
APP 模式在设备内运行本地 Go 代理,并通过当前 Wi-Fi 的手动 HTTP 代理让指定请求经过本地代理。
|
||||
|
||||
```text
|
||||
iPhone 定位请求
|
||||
│ 当前 Wi‑Fi HTTP 代理:127.0.0.1:8888
|
||||
iOS 定位请求
|
||||
│
|
||||
│ 当前 Wi-Fi 手动 HTTP 代理
|
||||
▼
|
||||
本机 wloccore(Go)
|
||||
│ 仅处理目标 Apple 定位服务请求
|
||||
├──────────────► Apple 定位服务
|
||||
◄──────────────┘
|
||||
│ 改写目标响应中的坐标
|
||||
设备内 wloccore Go 代理
|
||||
│
|
||||
│ 处理指定 Apple 定位服务请求
|
||||
▼
|
||||
系统与应用读取定位结果
|
||||
Apple 定位服务响应
|
||||
│
|
||||
│ 测试坐标响应
|
||||
▼
|
||||
系统和应用读取定位结果
|
||||
```
|
||||
|
||||
APP 模式不使用 Network Extension 创建 VPN 隧道,因此不会显示 VPN 连接,也不会占用系统 VPN。**它仍然需要当前 Wi‑Fi 的手动 HTTP 代理以及已完全信任的本机 CA。**
|
||||
APP 模式:
|
||||
|
||||
- 不创建 Network Extension;
|
||||
- 不显示或占用系统 VPN;
|
||||
- 只覆盖当前 Wi-Fi 网络;
|
||||
- 需要配置当前 Wi-Fi 的手动 HTTP 代理;
|
||||
- 需要安装并信任 App 生成的本机 CA;
|
||||
- 代理只处理项目定义的 Apple 定位服务和环境验证请求,不是通用网络抓包工具。
|
||||
|
||||
### 第三方代理模式
|
||||
|
||||
第三方代理模式不启动 App 内置 Go 代理,也不使用 App 生成的 CA。
|
||||
|
||||
```text
|
||||
地图选点(WGS-84) → WLOC 配置接口 → 第三方代理模块保存坐标
|
||||
│
|
||||
系统定位请求 → 第三方客户端代理/VPN + MITM ─┘→ 改写定位响应
|
||||
地图选点
|
||||
│
|
||||
│ WGS-84 坐标
|
||||
▼
|
||||
WLOC 配置接口
|
||||
│
|
||||
▼
|
||||
第三方代理客户端保存配置
|
||||
│
|
||||
▼
|
||||
第三方代理客户端处理定位服务请求
|
||||
```
|
||||
|
||||
第三方模式由所选客户端管理代理/VPN、证书和 MITM,可覆盖蜂窝网络。两种模式不要同时拦截 WLOC 请求。
|
||||
在该模式下:
|
||||
|
||||
## 数据与安全说明
|
||||
- App 负责地图选点、收藏、坐标同步和清除;
|
||||
- 第三方客户端负责代理/VPN、MITM、证书和规则执行;
|
||||
- 坐标持久化由第三方客户端负责;
|
||||
- 是否支持 Wi-Fi、4G 或 5G 取决于客户端;
|
||||
- App 关闭后,第三方客户端中的配置可能继续生效。
|
||||
|
||||
- APP 模式的 CA 和私钥在设备本地生成,私钥存入 iOS 钥匙串;安装到系统的是 CA 描述文件。
|
||||
- 第三方代理模块及运行脚本来自上游项目,导入前请自行检查;仓库内快照用于版本留档,不代表已验证所有客户端。
|
||||
- 运行日志位于 App Group 容器,自动轮转并仅保留近 3 天;可在 App 内复制或清空。可导出的实时定位诊断默认不记录精确坐标。
|
||||
- 使用自签 CA 或第三方 MITM 都会改变设备的 HTTPS 信任/代理链路;不用时应关闭代理或模块,并按需移除证书。
|
||||
不要同时启用 APP 模式代理和第三方代理模式,避免两个代理链路互相干扰。
|
||||
|
||||
## 兼容性
|
||||
## 运行模式
|
||||
|
||||
| 项目 | 要求 |
|
||||
### APP 模式
|
||||
|
||||
适用于:
|
||||
|
||||
- 只使用 Wi-Fi 的设备测试;
|
||||
- 不依赖第三方代理客户端的本地验证;
|
||||
- 需要在 App 内完成代理、证书和环境检测的场景。
|
||||
|
||||
使用条件:
|
||||
|
||||
- iOS 设备;
|
||||
- 当前 Wi-Fi 支持手动 HTTP 代理;
|
||||
- 安装并信任本机 CA;
|
||||
- 在 App 内完成代理配置和环境检测。
|
||||
|
||||
### 第三方代理模式
|
||||
|
||||
适用于:
|
||||
|
||||
- 需要 Wi-Fi、4G 或 5G 网络覆盖的测试;
|
||||
- 已经使用支持模块或脚本的代理客户端;
|
||||
- 希望由第三方客户端继续保持代理配置的场景。
|
||||
|
||||
当前客户端状态:
|
||||
|
||||
| 客户端 | 状态 |
|
||||
|---|---|
|
||||
| iOS | 15.0+ |
|
||||
| 构建 | macOS、Xcode、XcodeGen |
|
||||
| Swift | 5.9 |
|
||||
| Go | 1.23+ |
|
||||
| 网络 | APP 模式:可手动配置 HTTP 代理的 Wi‑Fi;第三方代理模式(测试):取决于客户端,可覆盖 Wi‑Fi/4G/5G |
|
||||
| 安装 | 自行签名或使用 Releases 构建产物 |
|
||||
| Shadowrocket | 当前用于真机测试 |
|
||||
| Surge | 已提供配置,尚未完整验证 |
|
||||
| Quantumult X | 已提供配置,尚未完整验证 |
|
||||
| Loon | 已提供配置,尚未完整验证 |
|
||||
| Stash | 已提供配置,尚未完整验证 |
|
||||
| Egern | 使用 Surge 模块,尚未完整验证 |
|
||||
|
||||
效果会受到 iOS 版本、网络、系统定位缓存和目标 App 自身策略影响,不承诺兼容所有系统或第三方 App。
|
||||
相关模块快照和来源记录:
|
||||
|
||||
## 构建与项目结构
|
||||
- [第三方模块说明](docs/THIRD_PARTY_MODULES.md)
|
||||
- [Yu9191/wloc](https://github.com/Yu9191/wloc)
|
||||
|
||||
构建要求为 macOS、Xcode Command Line Tools、Go 1.23+ 和 XcodeGen。执行:
|
||||
第三方客户端、证书、MITM 和代理开关由客户端自身负责。导入任何第三方模块前,请先审查其配置和脚本内容。
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 安装应用
|
||||
|
||||
你可以使用:
|
||||
|
||||
- 自己的 Apple Developer 签名环境;
|
||||
- 适合个人测试的自签工具;
|
||||
- 项目 Releases 中的未签名 IPA;
|
||||
- 在 macOS 上按[构建说明](docs/BUILD.md)自行构建。
|
||||
|
||||
免费自签环境可能无法使用 Network Extension,因此 APP 模式采用设备内本地代理和 Wi-Fi 手动代理,不依赖
|
||||
VPN 组件。
|
||||
|
||||
#### 自签安装说明
|
||||
|
||||
Release 附件是未签名 IPA,需要使用自签工具安装到 iPhone:
|
||||
|
||||
1. **开启自签支持**:iOS 16 及以上版本前往“设置 → 隐私与安全性 → 开发者模式”,开启后按系统提示重启并
|
||||
确认;iOS 15 没有此开关,可跳过本步。
|
||||
2. **下载 IPA**:前往本项目的 [Releases](https://github.com/xweiba/location-spoofer/releases),下载最新的
|
||||
`PaopaoLocationSpoofer-unsigned.ipa`。
|
||||
3. **准备自签软件**:前往 [Impactor Releases](https://github.com/claration/Impactor/releases) 下载对应系统
|
||||
版本的 Impactor;也可以使用爱思助手等支持 IPA 自签安装的软件。
|
||||
4. **连接并安装**:使用 USB 数据线连接 iPhone 与电脑,在手机上选择“信任此电脑”,然后在自签软件中选择
|
||||
刚下载的 IPA,根据软件提示完成签名与安装。
|
||||
|
||||
Impactor 支持 Windows、macOS 和 Linux;Windows 若无法识别设备,请先安装 iTunes 提供的 Apple 设备驱动。
|
||||
爱思助手属于第三方软件,请从其官方渠道获取,并自行评估账号、证书和隐私风险。
|
||||
|
||||
安装完成后,若 iOS 阻止打开 App,请前往“设置 → 通用 → VPN 与设备管理”信任对应的开发者 App。免费
|
||||
Apple ID 自签通常只有 7 天有效期,到期后需要重新签名安装。
|
||||
|
||||
### 2. 首次启动
|
||||
|
||||
首次启动时:
|
||||
|
||||
1. 选择 APP 模式或第三方代理模式;
|
||||
2. 按照 App 内引导完成对应配置;
|
||||
3. 执行环境检测;
|
||||
4. 在地图中搜索、点击或拖动选择测试位置;
|
||||
5. 启用测试位置并在目标测试环境中验证结果。
|
||||
|
||||
### 3. 恢复真实位置
|
||||
|
||||
APP 模式:
|
||||
|
||||
1. 停止测试位置;
|
||||
2. 关闭当前 Wi-Fi 的手动 HTTP 代理;
|
||||
3. 按 App 内提示刷新定位环境。
|
||||
|
||||
第三方代理模式:
|
||||
|
||||
1. 使用 App 清除 WLOC 坐标;
|
||||
2. 在第三方客户端中关闭对应模块或代理;
|
||||
3. 按客户端要求恢复 HTTPS 解密和代理设置。
|
||||
|
||||
如果系统或目标应用仍显示旧位置,可能需要等待定位缓存刷新,必要时重启设备后再次验证。
|
||||
|
||||
## 坐标处理
|
||||
|
||||
项目内部保存两种坐标表示:
|
||||
|
||||
- WGS-84:国际标准,WLOC 写入使用此坐标;
|
||||
- GCJ-02:国内地图标准,用于需要国内地图坐标的场景。
|
||||
|
||||
MapKit 不提供公开 API 直接返回当前是否使用 GCJ-02 或 WGS-84。项目通过固定锚点查询判断 MapKit 当前返回
|
||||
标准,并在运行期间根据蓝点变化和用户操作进行受控刷新。
|
||||
|
||||
坐标写入边界会保存完整的 WGS-84 / GCJ-02 坐标对,使用时根据当前地图标准选择对应字段,避免重复转换造成
|
||||
位置偏移。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```text
|
||||
App/ SwiftUI 界面、MapKit、定位和运行流程
|
||||
Core/ Go 代理、证书服务和定位响应处理
|
||||
Shared/ 坐标、收藏、日志、配置和共享模型
|
||||
Resources/ Info.plist、Entitlements 和资源文件
|
||||
Config/ 构建配置
|
||||
Scripts/ 构建、打包和验证脚本
|
||||
Tests/ XCTest 和 Shell contract tests
|
||||
docs/ 构建、模块和版本文档
|
||||
```
|
||||
|
||||
## 构建项目
|
||||
|
||||
源码构建需要 macOS 环境:
|
||||
|
||||
- macOS;
|
||||
- Xcode;
|
||||
- Xcode Command Line Tools;
|
||||
- XcodeGen;
|
||||
- Go 1.23 或更高版本。
|
||||
|
||||
当前项目不支持在 Windows 上直接构建 iOS 应用。
|
||||
|
||||
```bash
|
||||
./build.sh # 构建未签名 IPA
|
||||
./build.sh --test # 构建后额外运行 iOS Simulator 单元测试
|
||||
git clone https://github.com/xweiba/location-spoofer.git
|
||||
cd location-spoofer
|
||||
|
||||
./build.sh
|
||||
```
|
||||
|
||||
构建产物默认位于:
|
||||
运行构建并执行 Simulator 测试:
|
||||
|
||||
```bash
|
||||
./build.sh --test
|
||||
```
|
||||
|
||||
构建脚本会生成未签名 IPA:
|
||||
|
||||
```text
|
||||
dist/PaopaoLocationSpoofer-unsigned.ipa
|
||||
```
|
||||
|
||||
```text
|
||||
App/ SwiftUI、MapKit、定位和配置流程
|
||||
Core/ Go 本机代理与定位响应改写
|
||||
Shared/ 收藏、设置、日志和共享模型
|
||||
Resources/ Info.plist、Entitlements 与图标
|
||||
Config/ 构建配置
|
||||
Scripts/ 构建、签名和检查脚本
|
||||
Tests/ XCTest 与 Bash 契约测试
|
||||
docs/ 构建、第三方模块和版本发布文档
|
||||
```
|
||||
之后需要使用你自己的签名和安装流程部署到测试设备。
|
||||
|
||||
## 文档与反馈
|
||||
## 隐私与安全边界
|
||||
|
||||
- 项目不包含遥测或远程控制服务;
|
||||
- 项目不会自动上传用户位置数据;
|
||||
- 运行日志保存在设备 App Group 容器中,并自动保留近三天;
|
||||
- 问题报告需要用户主动复制后提交到 GitHub;
|
||||
- APP 模式会访问本机代理和环境验证地址;
|
||||
- 第三方代理模式可能访问上游模块地址和 WLOC 配置接口;
|
||||
- App 生成的 CA 私钥保存在设备 Keychain 中;
|
||||
- 第三方客户端模块、MITM 和证书链路由用户选择的客户端负责。
|
||||
|
||||
请不要把真实位置、认证信息、证书私钥或完整敏感日志提交到公开 Issue。
|
||||
|
||||
## 限制
|
||||
|
||||
- iOS 系统版本变化可能影响定位服务行为;
|
||||
- MapKit 的坐标返回标准可能随系统、地区和定位环境变化;
|
||||
- 系统定位存在缓存,切换位置后不一定立即生效;
|
||||
- 第三方代理客户端的兼容性和规则行为需要分别验证;
|
||||
- 不保证所有应用都使用同一种定位 API;
|
||||
- 不保证所有应用或服务都接受测试坐标;
|
||||
- 不保证在所有网络环境、设备型号和 iOS 版本上表现一致。
|
||||
|
||||
## 贡献
|
||||
|
||||
欢迎提交:
|
||||
|
||||
- Bug Report;
|
||||
- Feature Request;
|
||||
- 兼容性测试结果;
|
||||
- 性能改进;
|
||||
- 文档改进;
|
||||
- 测试补充。
|
||||
|
||||
提交 Issue 时建议包含:
|
||||
|
||||
- iOS 版本;
|
||||
- 设备型号;
|
||||
- 使用的运行模式;
|
||||
- 复现步骤;
|
||||
- 脱敏后的运行日志;
|
||||
- 是否使用第三方代理客户端。
|
||||
|
||||
## 文档
|
||||
|
||||
- [构建说明](docs/BUILD.md)
|
||||
- [第三方模块说明](docs/THIRD_PARTY_MODULES.md)
|
||||
- [更新日志](docs/CHANGELOG.md)
|
||||
- [English README](README.en.md)
|
||||
- [英文文档](README.en.md)
|
||||
- [GitHub Issues](https://github.com/xweiba/location-spoofer/issues)
|
||||
|
||||
反馈问题时,请附上复现步骤、iOS 版本、设备型号及已脱敏的运行日志。
|
||||
## 功能预览
|
||||
|
||||
## 友链
|
||||
以下截图用于展示主界面和部分真机测试场景。实际结果会受到 iOS 版本、网络环境、系统缓存和目标应用定位策略
|
||||
影响,不代表对所有应用或版本作出兼容性保证。
|
||||
|
||||
**LinuxDo** — [https://linux.do](https://linux.do/)
|
||||
<table>
|
||||
<tr>
|
||||
<th>应用主界面</th>
|
||||
<th>Apple 地图测试</th>
|
||||
<th>高德地图测试</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="images/主界面.jpg" alt="Location Spoofer 地图选点主界面" width="220"></td>
|
||||
<td><img src="images/Apple%20Map.jpg" alt="Apple 地图定位测试场景" width="220"></td>
|
||||
<td><img src="images/高德地图.jpg" alt="高德地图定位测试场景" width="220"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>微信测试</th>
|
||||
<th>钉钉测试</th>
|
||||
<th>Apple Watch 场景测试</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="images/微信.jpg" alt="微信定位测试场景" width="220"></td>
|
||||
<td><img src="images/钉钉.jpg" alt="钉钉定位测试场景" width="220"></td>
|
||||
<td><img src="images/高血压.jpg" alt="Apple Watch 地区功能测试场景" width="220"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## 致谢与友链
|
||||
|
||||
核心定位响应处理思路、Go 实现和第三方模块参考自:
|
||||
|
||||
- [Yu9191/wloc](https://github.com/Yu9191/wloc)
|
||||
|
||||
友链:
|
||||
|
||||
- [LINUX DO](https://linux.do/)
|
||||
|
||||
感谢开源社区中参与 iOS 定位服务研究、网络代理和移动端测试工具建设的贡献者。
|
||||
|
||||
Reference in New Issue
Block a user