让 IOS 设备模拟自己在操场跑步

  • 背景
  • 我的解决方案:
  • 其他解决方案:
  • 具体步骤
  • 1. 在 Xcode 上新建一个含GPX文件的 IOS 项目
  • 2. Google 地图密集 标一圈操场,获得位置信息
  • 3. Google Map 坐标转换
  • 3. 防反作弊识别
  • 4. 缺点
  • 5. 改进


背景

新学期学校日常体育锻炼打卡形式改变,成了使用 APP 每周在学校的操场跑 2 次 3.5 公里以上。一来自己新学期的锻炼形式变成了在健身房锻炼,防霾 + 保护膝盖;二来3.5公里实在太长,虽然实际跑的话可能 2.7 公里就会判定为 3.5 公里;三来每天要定时定点去跑,打乱了自己的安排;四来最初使用阶段,pyq 经常有吐槽软件不好使用。
于是我就去谷歌 IOS 设备能不能模拟 GPS,让 APP 误以为是你在跑。

我的解决方案:

IOS 模拟 GPS 跑圈

其他解决方案:

模拟传感器摇动 / 摇步器 —— ugly
解析 APP,找到数据上传接口,直接上传数据 —— too hard

具体步骤

1. 在 Xcode 上新建一个含GPX文件的 IOS 项目

GPX 文件可以在 IOS 设备连接 mac,并处于开发者模式 IOS 进行模拟定位
具体如何创建 gpx 文件可参考:http://pingguohe.net/2017/10/13/GPX-mock.html

遇到问题:如何模拟跑圈?
解决办法:

2. Google 地图密集 标一圈操场,获得位置信息

大概标了40个点,沿操场一圈,虽然(费时间 + 丑陋),但是没有找到好的方便方法

ios 模拟跑步轨迹作弊 ios虚拟跑步_Google


大致思路就是每两个点之间走直线,但是因为标点密集,最后可以近似为沿操场走

3. Google Map 坐标转换

Google map 中提取的坐标似乎无法直接在 GPX 中使用,需要转换过格式
试了几个在线转换的工具,发现下面这个可以比较好的进行转化:
https://mapstogpx.com/index.php# 这个网站可以直接将 Google Map 里分享的路线转化为 GPX 可用的代码
但是这里我只要位置信息,所以需要另写一个脚本,单独提取位置信息(直接坐标转化的我试了几个都不行,发现这个可以我就懒得再找了)

遇到问题:gpx 默认的速度很快,如何控制速度?
解决办法:参考 https://stackoverflow.com/questions/9439495/when-using-gpx-in-xcode-to-simulate-location-changes-is-there-a-way-to-control 中的第二条回答

3. 防反作弊识别

思路:跑每圈的时候,每个标定点坐标、两点之间时间随机偏移;每次使用都重新生成一个新的 gpx 文件,避免跑步数据重合

4. 缺点

必须把手机连接 mac,且因为使用非官版连接线,连接可能会断掉,需要在运行的时候偶尔留意一下是否在正常跑了

断开连接后,IOS 设备的位置信息可能会一直停在那里(iphone xs max无),想要恢复正常定位,需要(删掉软件+重启) or 在 Xcode 上把模拟 GPS 关掉再重新跑一遍

5. 改进

路线机器识别没有问题,但是人眼识别还是过于整齐,路线的首尾单独设计可能效果更好

自动化


Charlie
10.8
海宁