python模拟ios_使用Xcode + Python进行IOS运动轨迹模拟!
前言
在某些app中,需要根据用户的实时位置来完成某些事件
例如跑步打卡软件(步道乐跑)、考勤打卡软件(叮叮)、某些基于实时位置的游戏(Pokemon Go、一起来捉妖)
一般解决办法是通过使用安卓模拟器,通过改变模拟器的位置属性来实现模拟位置
但是某些软件会通过比对常用设备的uuid,设备序列号等
一旦出现不匹配或者无法识别就可能会被列为怀疑对象,且安卓模拟器较难实现连续的拟人化的路径
Python资源共享群:484031800
因此,为了减少被判定作弊的可能,只能通过在常用设备上连续的改变实时位置来模拟跑步行为
硬件环境:
MacBook Pro (15-inch, 2017)
iPhone 8 Plus
软件环境:
macOS Mojave 10.14.5
iOS 12.4
Xcode 10.2.1
Python 3.7.0
sublime text 3.1.1
具体步骤
1.使用Xcode创建一个IOS项目
打开Xcode -> Preferences 添加Apple ID
在Xcode上创建新项目
打开Xcode -> create a new Xcode project
选择ios菜单 -> Single View App
填写项目名 推荐非中文
在事先准备好的文件夹内存放 文件夹推荐非中文
此时将iPhone连接mac 左上角显示连接设备
出现如下结果即为成功:
2.使用Xcode创建一个含有gpx的文件
GPX(GPS eXchange Format,GPS交换格式)是一个XML格式,为应用软件设计的通用GPS数据格式,专门用来存储地理信息
一个GPX文件内包含一些经纬度点组成的轨迹,包含了时间、名字等信息
回到Xcode 打开Xcode -> File -> New -> File...
在IOS菜单下选择GPX File
选择一个位置并命名GPX文件 例:fake_loc.gpx
自动生成如下gpx文件即为成功
分析该gpx文件,格式类似标签语言风格
在标签内包含经纬度(lat、lon)、该点名称以及时间
第一段注释内容大意为:
“提供一个或多个包含纬度/经度对的点
如果提供一个点,Xcode将模拟那个特定的点
如果提供多个点,Xcode将依次模拟每一个点”
第二段注释内容大意为:
“可以选择为每一个坐标点添加一个时间标签 可,Xcode可以根据时间标签的顺序依次移动到每一个坐标点,并根据时间点来插入速度X
如果不提供一个时间标签,那么Xcode将使用一个固定的速度
航路点必须按时间升序排序 ”
因此,可以通过输入一系列点来模拟位置,让Xcode来依次定为每一个点来模拟人的跑动行为
3.使用Python来自动生成一系列轨迹点
mac下python与sublime text3的环境配置在第一篇随笔中有记录
分析gpx文件结构可以得到目标gpx文件结构应该为:
#......
#以此类推
我们选择西安市某211高校作为实验地点:
该网站提供多个公司的定位标准下的经纬度信息
由于每一家公司的定位标准不同,经纬度就会存在偏差,这时候就要看用来模拟的APP使用哪家的地图了
我们以某跑步打卡APP 步道乐跑 作为实验对象
在该高校实现水平移动与竖直移动
经过验证该APP使用的是 谷歌地球标准
通过该网站首先得到一段直线的首尾经纬度点:
开始点:
lat:34.3752989239
lon:108.9080291565
中间点:
lat:34.3740193255
lon:108.9085977848
结束点:
lat:34.3733728774
lon:108.9064091023
在该网站可以通过经纬度获得距离信息:http://www.hhlink.com/经纬度/
计算得到距离约为78米
后续可根据需求,通过测距来得到相应距离 从而计算得到水平与竖直移动速度
可以得出结论:
在该高校相对从北到南 经度减少,纬度增加
在该高校相对从东到西 经度减小,纬度减小
在符合跑步打卡APP步道乐跑的配速要求:3~9 min/km
例如从北到南生成100个点
经度依次减少 纬度依次增加,并使得这100个点散布在路径上
每个点之间减少或者增加的距离可以通过乘以指定范围内的随机数,使得点之间呈现左右略为摇摆的路径
在点数量较多的情况下近似为人的跑动轨迹
根据该高校的位置情况编写相应的python程序:
import random
#初始点信息
a1 = 34.3752989239;
b1 = 108.9080291565;
#中间点信息
a2 = 34.3740193255;
b2 = 108.9085977848;
for i in range( 1,1000 ):
while( a1 >= a2 ): # 循环条件 经度未到达中间点时执行
xa = round( random.uniform(0.2, 7) ) # 随机数,用于模拟人跑动
xb = round( random.uniform(12, 15) )
# 竖直移动
a1 = round( a1 - 0.0000072 * xa , 10 )
b1 = round( b1 + 0.0000008 * xb , 10 )
# 输出信息
print( '' )
print( '' )
for i in range( 1,1000 ):
xa = round( random.uniform(2, 8) )
xb = round( random.uniform(1, 3) )
# 水平移动
a2 = round( a2 - 0.000003 * xa, 10 )
b2 = round( b2 - 0.000025 * xb, 10 )
print( '' )
print( '' )
得到输出(节选):
将该输出复制并粘贴在gpx文件里
并 command + s 保存
可以在xcode项目目录内找到并打开该文件:
4.开始位置模拟
确保手机连接上电脑,并解锁保持屏幕常亮
点击Xcode右上角开始图标:
第一次会提示iPhone未信任开发者
在设置 -> 通用 -> 设备管理 点击该开发者并选择信任
再次在Xcode上点击右上角图标
一分钟左右手机上会多出一个灰色的app图标
点击后按home键退出,进入步道乐跑
在Xcode下方多出一栏功能,点击位置图标并选择你的fake_loc
此时APP就已经按照gpx文件内的路径开始移动了
5.总结
在模拟时没有考虑速度的因素,按照默认的Xcode对gpx的点的更新速度来实现的
在控制整体的移动速度时完全是按照点的密集程度,即点的位置变化程度来实现的
后期可以根据时间标签来改进获得更精确的速度
根据步道乐跑后台数据,检测作弊主要依靠平均配速、每公里的步数、设备uuid、设备序列号来检测的
文章的方法可以解决平均配速、uudi、序列号等问题(因为就是使用真机来实现的)
但是对于步数只能依靠在模拟时通过摇晃手机来实现
python模拟ios_使用Xcode + Python进行IOS运动轨迹模拟!相关推荐
- python 模拟ios提交网络_使用Xcode + Python进行IOS运动轨迹模拟
前言 在某些app中,需要根据用户的实时位置来完成某些事件 例如跑步打卡软件(步道乐跑).考勤打卡软件(叮叮).某些基于实时位置的游戏(Pokemon Go.一起来捉妖) 一般解决办法是通过使用安卓模 ...
- python round()_使用Xcode + Python进行IOS运动轨迹模拟!
前言 在某些app中,需要根据用户的实时位置来完成某些事件 例如跑步打卡软件(步道乐跑).考勤打卡软件(叮叮).某些基于实时位置的游戏(Pokemon Go.一起来捉妖) 一般解决办法是通过使用安卓模 ...
- ios跑 python_使用Xcode + Python进行IOS运动轨迹模拟
摘要: 085977848结束点: lat:34.3733728774 lon:108.9064091023 在该网站可以通过经纬度获得距离信息:http://www.hhlink.com/经纬度/ ...
- python模拟按键_python 模拟按键放在模拟器Python初学者的17个技巧
Python初学者的17个技巧,有需要的朋友可以参考下. W WW.002pc .COM认为此文章对<python 模拟按键放在模拟器Python初学者的17个技巧>说的很在理. 交换变量 ...
- python 同花顺thstrader_GitHub - yanjlee/THSTrader: 量化交易。同花顺免费模拟炒股软件客户端的python API。(Python3)...
THSTrader 量化交易.同花顺免费模拟炒股软件客户端的python API.(Python3) 为什么有这个项目 本来看到了这个easytrader这个项目,不过这个客户端已经过时了(被强制更新 ...
- python 同花顺thstrader_GitHub - fswzb/THSTrader: 量化交易。同花顺免费模拟炒股软件客户端的python API。(Python3)...
THSTrader 量化交易.同花顺免费模拟炒股软件客户端的python API.(Python3) 为什么有这个项目 本来看到了这个easytrader这个项目,不过这个客户端已经过时了(被强制更新 ...
- python绘制动态模拟图-Python实现模拟时钟代码推荐
语言:Python IDE:Python.IDE 一.编写时钟程序,要求根据时间动态更新 代码思路 需求:5个Turtle对象, 1个绘制外表盘+3个模拟表上针+1个输出文字 Step1:建立Turt ...
- Python基础项目实践之:面向对象方法实现模拟银行管理系统
Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...
- python爬虫模拟浏览器的两种方法_python爬虫模拟浏览器访问-User-Agent过程解析
这篇文章主要介绍了python爬虫模拟浏览器访问-User-Agent过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 模拟浏览器访问-Use ...
最新文章
- python+OpenCv+dlib实现人脸68个关键点检测
- 《机器学习》 —— 第一章:绪论 学习笔记
- ROS学习笔记-ROS语音识别与语音输出[1]
- C# 多线程操作样例
- fedora15下GNOME3使用笔记
- 图解DbgView使用
- 【STM32】 色环电阻
- 《WebRTC 1.0: Real-Time Communication Between Browsers》学习
- 设计模式之原型模式【选用鸣人影分身阐述】
- 微信小程序--优购页面制作
- excel合并两列内容_合并多个Excel文件内容到一个Excel中
- 易乐游装在云服务器_五大网吧无盘系统环境下绝地求生吃鸡卡运行出错
- 将信将疑,将中台进行到底
- 看了这4点,shopee店铺出单从此变简单
- 笔记本电脑计算机乱跳,笔记本屏幕的鼠标指针乱跳解决方法
- 计算机快捷键和rec,【2人回答】在CAD键盘快捷键中,rec是指的哪个键?-3D溜溜网...
- 【无线传感器网络简明教程】课堂笔记
- [精品毕设] 基于Uniapp+SSM实现的安卓的掌上校园系统
- windows10 wls 配置流程a
- 无法获得锁统一解决方法
热门文章
- Ubuntu22.04 安装禅道
- 今日份安利:视频变声的软件有哪些?
- Vue中利用moment.js(时间格式化插件)做一个倒计时组件
- “人生苦短,我用Python“——身份认证攻击
- 《算法0基础100讲》(第7讲)素数判定——866.回文素数
- Win11安装cad缺少net组件怎么办?
- Win11字体怎么调大?Win11调整字体大小的方法
- AndroidManifest--详细理解
- 清北学堂 2017-10-06
- 讴 mysql 首字母_MYSQL索引