参考:
http://blog.csdn.net/guojin08/article/details/14525881
iOS私有头文件:
https://github.com/kennytm/iphone-private-frameworks
iOS 6.0模拟器的私有库路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/PrivateFrameworks
真机iOS7.1系统的私有库路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/PrivateFrameworks
iPod-5.1.1的私有库路径:
/Users/tangwu/Library/Developer/Xcode/iOS DeviceSupport/5.1.1 (9B206)/Symbols/System/Library/PrivateFrameworks
#include <mach/mach_time.h> #import <objc/message.h> #import <dlfcn.h> #import "SsjjSyViewController.h" #import "GraphicsServices.h" #import "GraphicsServices.h" #define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" @interface SsjjSyViewController () @end static mach_port_t getFrontMostAppPort() { mach_port_t *port; void *lib = dlopen(SBSERVPATH, RTLD_LAZY); int (*SBSSpringBoardServerPort)() = dlsym(lib, "SBSSpringBoardServerPort"); port = (mach_port_t *)SBSSpringBoardServerPort(); dlclose(lib); void *(*SBFrontmostApplicationDisplayIdentifier)(mach_port_t *port, char *result) = dlsym(lib, "SBFrontmostApplicationDisplayIdentifier"); char appId[256]; memset(appId, 0, sizeof(appId)); SBFrontmostApplicationDisplayIdentifier(port, appId); return GSCopyPurpleNamedPort(appId); } @implementation SsjjSyViewController - (void)sendTap : (CGPoint) point{ [self sendTouchStart:point]; [self sendTouchEnd:point]; } - (void)sendTouchStart: (CGPoint) point{ [self sendEventForPhase:UITouchPhaseBegan point:point]; } - (void)sendTouchEnd: (CGPoint) point{ [self sendEventForPhase:UITouchPhaseEnded point:point]; } - (void)sendEventForPhase: (UITouchPhase)phase point : (CGPoint) point{ CGPoint adjustedPoint = [self.view convertPoint:point toView:self.view.window]; // NSLog(@"point : %@ \n NSStringFromCGPoint(adjustedPoint: %@ \n", NSStringFromCGPoint(point), NSStringFromCGPoint(adjustedPoint)); uint8_t touchEvent[sizeof(GSEventRecord) + sizeof(GSHandInfo) + sizeof(GSPathInfo)]; struct GSTouchEvent { GSEventRecord record; GSHandInfo handInfo; } * event = (struct GSTouchEvent*) &touchEvent; bzero(event, sizeof(event)); event->record.type = kGSEventHand; event->record.subtype = kGSEventSubTypeUnknown; event->record.location = point; event->record.timestamp = GSCurrentEventTimestamp(); event->record.infoSize = sizeof(GSHandInfo) + sizeof(GSPathInfo); event->handInfo.type = (phase == UITouchPhaseBegan) ? kGSHandInfoTypeTouchDown : kGSHandInfoTypeTouchUp; event->handInfo.pathInfosCount = 1; bzero(&event->handInfo.pathInfos[0], sizeof(GSPathInfo)); event->handInfo.pathInfos[0].pathIndex = 1; event->handInfo.pathInfos[0].pathIdentity = 2; event->handInfo.pathInfos[0].pathProximity = (phase == UITouchPhaseBegan) ? 0x03 : 0x00; event->handInfo.pathInfos[0].pathLocation = adjustedPoint; mach_port_t port = getFrontMostAppPort(); GSEventRecord* record = (GSEventRecord*)event; record->timestamp = GSCurrentEventTimestamp(); GSSendEvent(record, port); } - (void)viewDidLoad { [super viewDidLoad]; UIButton *btn1 = [[UIButton alloc] initWithFrame:CGRectMake(40, 40, 200, 100)]; [btn1 setTitle:@"按钮1" forState:UIControlStateNormal]; [btn1 setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; [btn1 addTarget:self action:@selector(btn1TouchDown:) forControlEvents:UIControlEventTouchDown]; [btn1 addTarget:self action:@selector(btn1TouchUpInside:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn1]; UIButton *btn2 = [[UIButton alloc] initWithFrame:CGRectMake(40, 150, 200, 100)]; [btn2 setTitle:@"按钮2" forState:UIControlStateNormal]; [btn2 setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; [btn2 addTarget:self action:@selector(btn2TouchDown:) forControlEvents:UIControlEventTouchDown]; [btn2 addTarget:self action:@selector(btn2TouchUpInside:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn2]; } - (void) btn1TouchDown: (id) sender { UIButton *btn1 = (UIButton *) sender; [btn1 setHighlighted:YES]; } - (void) btn1TouchUpInside: (id) sender { UIButton *btn1 = (UIButton *) sender; [btn1 setHighlighted:NO]; CGPoint point = CGPointMake(50, 155); [self sendTap:point]; } - (void) btn2TouchDown: (id) sender { NSLog(@"btn2TouchDown\n"); UIButton *btn2 = (UIButton *) sender; [btn2 setHighlighted:YES]; } - (void) btn2TouchUpInside: (id) sender { NSLog(@"btn2TouchUpInside\n"); UIButton *btn2 = (UIButton *) sender; [btn2 setHighlighted:NO]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
相关推荐
iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟...
iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作
ios系统点击源码,实现iphone手机上的系统点击事件。可以通过发送事件,模拟系统点击。
那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版本,因为经过测试的结果是可以使用的。具体在ios中模拟点击使用的细节大家也可以...
模拟iOS的触摸事件[用户模式] 仅在应用程序中启用,系统触摸模拟库: : 只需构建它,然后将此框架添加到您的项目中即可。 然后就可以使用它了。 附件来自kif。 使用案例 单击屏幕上的一个点 NSInteger ...
NRTouchPoints, 在屏幕上,模拟用户触摸的UIWindow子类 NRTouchPoints我希望能够为我的应用程序的用户录制一个教程。 当我有越狱时,这是可以能的,但是有一个非狱电的电话,这变得复杂了。 我发现的解决方案是使用...
IOS下面也有类似于android平台adb的工具,可以用来查看手机信息,备份,恢复,手机挂在目录等,本文档介绍了常用的几种方法
简单实现类似iPhone中桌面辅助按钮功能,可以手指按住拖拽,点击展开功能,点击屏幕任意位置可以消失弹窗。
此资源是方案二的源码,具体原理分析请看这个文章:https://kunnan.blog.csdn.net/article/details/113176114 ...2.1、 点击屏幕模拟push多层VC 时间间隔 2s,持续3次 2.2、 再次点击pop页面会进行popToRoot操作。
用户可以升级他们的业务并点击主屏幕来赚取更多的钱,让他们成为最富有的人。 特征: 一款鼓励用户不断点击以增加收入的点击游戏。 用户可以升级自己的业务以获得更大的成功。 顾问奖金提供有价值的商业奖金。 将您...
它支持: 触发它的不同方式:摇动设备、多次点击或长按屏幕。 自定义调试操作。 通过电子邮件发送带有屏幕截图和一些有用信息的报告。 在您的设备中模拟内存警告通知安装使用 CocoaPods 将 SPDebugMenu 添加到您的 ...
Android 3D Touch-PeekView iOS使用作为“窥视”完整内容(例如电子邮件,图片,网络搜索等)的方式。尽管它们具有专用于此功能的硬件,但仍然有可能在较长的时间内从Android中获得类似的功能。单击,而不是专用硬件...
iOS逆向工具Cliclick:Mac 模拟鼠标点击工具。例子(定时点击特定位置,来点击保证Mac永远处于活跃状态,达到mac永不不关闭屏幕的目的) https://blog.csdn.net/z929118967/article/details/108949981
来源:github/UIDynamics-HelpeLicence:MIT平台:iOS设备:iPhone / iPad作者:MattFoley UIDynamics是iOS 7的...测试时点击一下屏幕,就会产生小圆珠坠落碰撞效果。 UIDynamics-Helpers包括两个特性: MFLAlpha
这是UIDynamics-Helpers功能源码,该源码是UIDynamics是iOS 7的新特性,能够模拟产生物理世界的很多物体运动的动画效果。UIDynamics-Helpers能够让开发者更加简单地利用UIDynamics进行编程。案例中是演示了利用UI...
4、支持自动点击、多点折线滑动手机屏幕 5、支持自动找图、找色 6、手机设备信息获取、震动控制、文字输入 7、脚本语法基于按键精灵MQ语言,上手简单 8、按键精灵官方出品,正版应用,稳定可靠 按键精灵手机...
说明:模拟鼠标点击,参数:x: 点击鼠标的X坐标; y: y坐标;flag: 0,左键单击;1,左键双击;2,右键单击;3右键双击 Long KeySim( int key1,int key2,int key3 ) 说明:模拟按键,参数:key1:按键1;key2:按键2...
它支持在Android,iOS,Linux,macOS和Windows上模拟Touchpad,TPad CAS,CX和CX CAS calc。 下载: 屏幕截图: Linux: 视窗: Android: 苹果系统: iOS: 建造 首先,您需要安装Qt5。 然后,您可以直接使用...
通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。 下面开始Appium的配置。 appPackage和APPActivity的获取 任意下载一个app 解压 但是解压出来的...
为了启动仿真器,您需要通过单击或点击“加载ROM或图像”按钮来加载ROM文件。 您需要Palm V或Palm m515的ROM文件。 选择ROM文件后,仿真器将重新加载并开始运行PalmOS。 键盘输入 除了触摸或单击设备屏幕外,您还...