
一、开篇:为什么你需要这个工具?
iOS 开发者最头疼的场景之一:定位功能回归测试。你在开发一个基于位置的服务(LBS),需要在不同坐标、不同坐标系、不同网络环境下验证 App 行为。手动跑到目标地点不现实,模拟器又常常跑不动完整定位链路;而 iOS 系统的定位缓存、坐标系差异(WGS-84 与 GCJ-02)、以及 Apple 定位服务的私有接口,让「改一个坐标」这件事变得异常复杂。市面上的通用工具要么动辄收费,要么依赖 Network Extension 在免费签名下失效,要么只能改单 App 的代码,无法覆盖完整测试链路。
如果你是 iOS 定位功能的开发者、QA 工程师,或是研究 iOS 定位服务行为的从业者,那么今天介绍的这个 497 Star 开源项目,可能正好补上你工具链里缺的那一块。
二、项目简介:一句话说明它是什么
Location Spoofer 是一个面向 iOS 定位服务行为研究和开发测试的开源工具,基于 Swift + Go 1.23 构建,提供原生地图选点、Apple 定位服务响应测试环境模拟、本地与第三方代理双运行模式、WGS-84 / GCJ-02 双坐标管理以及环境检测和日志诊断能力,最新版本 v1.0.5。

三、核心功能深度解析
1. 原生地图选点与双坐标管理
项目使用 MapKit 渲染地图与系统蓝点,支持搜索、点击、拖动地图中心、缩放、收藏位置和恢复上次选点。选点时同时展示国际坐标(WGS-84)和国内坐标(GCJ-02),可分别复制。MapKit 不公开 API 标明当前返回标准,项目通过固定锚点查询和蓝点变化做受控刷新,并把完整的 WGS-84 / GCJ-02 坐标对写入持久化边界,避免重复转换造成位置偏移。这个细节对国内地图适配测试至关重要。
2. 定位服务响应模拟
核心能力是对 Apple 定位服务(gs-loc.apple.com / gs-loc-cn.apple.com/clls/wloc)的请求进行代理和响应改写。开发者不需要修改目标 App 的任何代码,只需要在 App 内选点,代理层就会在测试环境中返回选定的坐标数据。这与「修改源码打桩」和「抓包改响应」的方式相比,部署成本最低,且对真实定位链路侵入最小。
3. 双运行模式:本地代理与第三方代理
- APP 模式:设备内运行 Go 代理(wloccore),通过当前 Wi-Fi 的手动 HTTP 代理让指定请求过本地代理。不创建 Network Extension,不显示或占用系统 VPN,仅覆盖当前 Wi-Fi,需要安装并信任 App 生成的本机 CA。免费自签环境也能跑。
- 第三方代理模式:App 不启动内置 Go 代理,也不使用自签 CA,而是通过
https://gs-loc.apple.com/wloc-settings/save这套 GET 配置接口(支持query/save/clear三种操作),把坐标推送给已支持的第三方代理客户端(Shadowrocket 已通过真机测试,Surge / Quantumult X / Loon / Stash / Egern 已提供配置),由客户端负责 MITM、VPN 和规则执行,能力可覆盖 Wi-Fi、4G、5G。
两种模式互斥,不能同时启用,避免代理链路互相干扰。

4. 环境检测与开发调试
APP 模式检测本地代理、证书信任和请求链路;第三方代理模式检测 WLOC 配置接口和模块响应,失败时提供对应的配置或诊断入口。运行日志保存在设备 App Group 容器中,自动保留近三天;提供日志复制、清理、坐标标准变化记录和脱敏问题报告生成(包含 iOS 版本、App 版本、运行模式、第三方客户端、复现情况、问题描述和脱敏日志),方便提交 GitHub Issue。
四、技术亮点与性能数据
- 技术栈:iOS 15+ / Swift 5.9(SwiftUI + MapKit)+ Go 1.23+,Go 代理承担证书服务与定位响应处理,Swift 端负责界面、地图、定位和运行流程。
- 架构亮点:APP 模式不依赖 Network Extension,免费自签也能工作;坐标持久化边界同时保存 WGS-84 / GCJ-02 对,使用时按当前地图标准选取,避免重复转换偏移;CA 私钥保存在 Keychain,问题报告需用户主动复制,隐私边界清晰。
- 生态兼容:第三方代理模式已覆盖主流 iOS 网络工具客户端,提供可订阅的模块文件,并支持社区投稿教程分区审核。
- 可测性:项目自带 XCTest 和 Shell contract tests,构建脚本
./build.sh --test可一键运行 Simulator 测试。

五、适用场景与人群
- iOS LBS 开发者:需要验证 App 在不同地理位置(出差场景、跨城测试、海外定位)下的定位读取、地图渲染、距离计算、反地理编码逻辑。
- QA 工程师:需要在不离开工位的前提下覆盖 Wi-Fi、4G、5G 多网络环境下的定位回归测试,配合第三方代理客户端可一次完成。
- iOS 定位服务研究者:研究 Apple 定位服务请求链路、坐标系差异、缓存策略、第三方应用定位 API 使用方式。
- 不适合:希望「一键改任意 App 真实定位用于日常使用」的用户——这不是它的设计目标,且项目明确声明不保证兼容所有 iOS 版本或第三方应用,不承诺绕过第三方应用的安全策略。
六、竞品对比
| 维度 | Location Spoofer | 通用网络代理改写工具 | 修改源码打桩 |
|---|---|---|---|
| 是否需要改目标 App 代码 | 否 | 否 | 是 |
| 是否支持 Wi-Fi + 4G/5G | 是(第三方代理模式) | 视客户端而定 | 与网络无关 |
| 免费自签可用 | 是(APP 模式无 NE) | 部分需要 Network Extension | 与签名无关 |
| WGS-84 / GCJ-02 双坐标 | 内建管理 | 一般需手动处理 | 需自行维护 |
| 环境检测与诊断日志 | 内建 | 通常没有 | 视项目而定 |
| 适配第三方代理客户端生态 | Shadowrocket / Surge / QX / Loon / Stash / Egern | 视工具而定 | 不适用 |
七、如何快速上手
- 获取 IPA:前往 Releases 下载最新的
PaopaoLocationSpoofer-unsigned.ipa,或按docs/BUILD.md在 macOS + Xcode + XcodeGen + Go 1.23+ 环境下执行./build.sh --test自构建。 - 自签安装:iOS 16+ 先开启「开发者模式」,用 Impactor 或爱思助手对未签名 IPA 自签,通过 USB 安装到 iPhone,并在「VPN 与设备管理」中信任。免费 Apple ID 自签通常 7 天有效。
- 首次启动:选择 APP 模式或第三方代理模式,按 App 内引导完成配置,运行环境检测,地图选点,启用测试位置并在目标 App 中验证。
- 恢复真实位置:APP 模式停止测试位置并关闭 Wi-Fi 手动 HTTP 代理;第三方代理模式用 App 清除 WLOC 坐标并在客户端中关闭对应模块。系统定位缓存可能需要等待或重启设备刷新。

八、总结与行动建议
Location Spoofer 的核心价值在于:用一套开源、清晰、双模式的代理框架,把 iOS 定位服务响应测试环境模拟这件事标准化了——不依赖 Network Extension、不修改目标 App 代码、内建 WGS-84 / GCJ-02 双坐标和诊断日志、并向主流第三方代理客户端开放适配。
使用建议:在自有或获授权的设备和软件环境中使用;导入第三方模块前先审查配置和脚本;提交 Bug 时优先用 App 内「设置 → 支持 → 报告 Bug」生成脱敏报告;不要把真实位置、认证信息、证书私钥或完整敏感日志提交到公开 Issue。
项目地址:github.com/xweiba/location-spoofer。如果你正在为 iOS 定位功能搭测试脚手架,不妨试试它。
