参考:
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开发中,实现系统点击事件的模拟是一项关键技能,特别是在自动化测试、远程控制或特殊交互设计中。本文将深入探讨如何使用iOS的系统点击源码来实现iPhone手机上的系统点击事件。 首先,我们需要理解iOS事件...
本文将深入探讨iOS中的触摸事件处理,以及如何实现屏幕点击及图片移动效果,主要围绕Cocos2d-x框架进行讨论,因为压缩包中的文件名暗示了我们可能正在使用这个2D游戏引擎。 ### 一、iOS Touch事件处理基础 iOS系统...
在iOS开发中,有时我们需要对应用进行自动化测试或者远程控制,这时“代码模拟点击反控iOS页面”的技术就显得尤为重要。这个技术主要依赖于苹果提供的自动化测试框架,如UIAutomation,以及私有API来实现。下面我们...
在本项目中,"CSS3+jQuery 模拟 iOS passbook" 的目标是利用现代Web技术,即CSS3和jQuery,来创建一个视觉上与苹果iOS设备上的Passbook应用相似的网页元素。Passbook是iOS系统中的一款应用程序,用于存储各种电子...
那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版本,因为经过测试的结果是可以使用的。具体在ios中模拟点击使用的细节大家也可以...
模拟iOS的触摸事件[用户模式] 仅在应用程序中启用,系统触摸模拟库: : 只需构建它,然后将此框架添加到您的项目中即可。 然后就可以使用它了。 附件来自kif。 使用案例 单击屏幕上的一个点 NSInteger ...
iOS录屏的基本操作可以通过系统内置的“屏幕录制”功能实现,用户只需在控制中心找到屏幕录制按钮并点击即可开始录制。然而,当需要进行更复杂的自动化操作时,比如在应用程序测试或数据分析中,就需要利用到iOS自动...
在iOS系统中,3D Touch是一项独特且强大的功能,它允许用户通过按压屏幕的不同力度来触发不同的操作。然而,Android设备并未广泛支持类似的技术,如Force Touch或3D Touch。针对这一情况,开发者们创建了一个开源...
3. **App Limits**:为了帮助用户更好地管理屏幕时间,iOS 12引入了“屏幕使用时间”功能,可监控并限制应用的使用。 4. **通知改进**:新的通知分组功能使用户可以更有效地管理通知,减少通知干扰。 5. **Siri ...
5. 点击发送按钮,如果一切配置正确,你的iOS设备应该会接收到模拟的通知。 在开发过程中,确保通知的正确发送和接收是至关重要的。有时,问题可能出现在证书配置、Device Token获取或者服务器端的推送代码。使用像...
在iOS系统中,用户可以通过点击屏幕顶部的状态栏来快速回到应用内容的顶部,这是一个非常方便的设计。本项目针对这一功能进行了仿制,并对原有代码进行了修改,以解决之前版本中存在的问题,即在点击返回或者回到...
【标题】:“VS2022 Maui实现Android手机模拟屏幕操作,截屏、点击、滑动” 【描述】:“在VS2022 测试是可以的”表明在Visual Studio 2022环境下,我们可以成功地对Android应用程序进行自动化测试,包括模拟屏幕...
在模态控制器的某个事件(如登录按钮点击)中,调用`dismiss(animated:completion:)`方法来关闭模态对话框。 5. **自定义模态动画**: - 如果需要更复杂的动画效果,可以自定义`UIPresentationController`子类,...
4. **触摸事件模拟**:对于触屏设备,模拟屏幕浏览器可能支持模拟点击、滑动等触摸操作,验证交互设计的正确性。 5. **网页缩放与布局调整**:在不同分辨率下,网页的布局和元素可能会发生变化,工具应能展示这些...
这个“ios demo”示例专注于两个核心功能:按钮点击后的延时操作以及动态创建弹出式菜单。这两个功能都是iOS应用中常见的需求,下面将详细介绍它们的实现原理和步骤。 首先,延时执行是一个常用的功能,它允许我们...
总的来说,这个“ios-模拟购物功能.zip”项目涵盖了iOS应用中商品信息展示与交互的关键部分,涉及到了UI设计、数据管理、事件处理和用户体验优化等多个技术点。通过深入学习和实践,开发者可以进一步提升自己的iOS...
NRTouchPoints, 在屏幕上,模拟用户触摸的UIWindow子类 NRTouchPoints我希望能够为我的应用程序的用户录制一个教程。 当我有越狱时,这是可以能的,但是有一个非狱电的电话,这变得复杂了。 我发现的解决方案是使用...
5. **运行应用**:选择目标设备(这里是运行iOS 16.3的设备),然后点击运行按钮。Xcode会编译代码并将其推送到设备上,同时启动应用。 6. **调试**:在设备上操作应用时,Xcode的控制台会显示相应的输出信息。你...