我想构建一个自动 iOS 应用测试框架。我可以通过 IOHIDFamily 记录触摸事件,那么有什么方法可以重播呢?
我试过这样的 GSEvent
void sendclickevent(){
mach_port_t thePortOfApp = GSCopyPurpleNamedPort("com.fuckyou.fuck");
GSEventRecord header;
GSHandInfo click;
GSPathInfo pathInfo = {2,2,2,1,1,{50,50}, NULL};
bzero(&header, sizeof(header));
bzero(&click, sizeof(click));
header.type = kGSEventHand;
header.subtype = kGSEventSubTypeUnknown;
header.location.x = 50;
header.location.y = 50;
header.windowLocation.x = 50;
header.windowLocation.y = 50;
header.infoSize = sizeof(GSHandInfo)+sizeof(GSPathInfo);
header.timestamp = mach_absolute_time();
click.type = kGSHandInfoTypeTouchDown;
click.deltaX = 1;
click.deltaY = 1;
click.pathInfosCount = 1;
struct
{
GSEventRecord record;
GSHandInfo hand;
GSPathInfo path;
} record = {header, click, pathInfo};
GSSendEvent(&record, thePortOfApp);
}
thePortOfApp 返回非零值。但是在这个功能结束时,比如按下一个按钮,什么都没有发生。那么有什么问题吗?或者我需要另一种方式将触摸事件发送到 iOS UI?
Best Answer-推荐答案 strong>
查看与在应用外发送事件相关的其他一些问题:
Use GSEvent to send touch event,but it's invalid
Using GraphicsServices.h/GSEvent as well as compiling CLI iPhone tools with Xcode
How to send a touch event to iPhone OS?
Simulating System Wide Touch Events on iOS
备注
1) 我认为您应该先发送 touchDown 然后再发送 touchUp 以获得点击。
2) 我在这个主题上看到的大部分代码都使用了 GSGetPurpleSystemAppPort(),它允许发送系统范围的事件(与 GSCopyPurpleNamedPort 相比)。
我相信 GSCopyPurpleNamedPort 只是做通常的 bootstrap_look_up 端口。所以,它会找到一个端口,即使它不是紫色端口(对于“com.fuckyou.fuck”来说很可能是这样)
关于ios - 在 iOS 6 上发送全局触摸事件,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/15701155/
|