在iOS 6上发送全球触控事件

在iOS 6上发送全球触控事件,ios,iphone-privateapi,Ios,Iphone Privateapi,我想建立一个自动的iOS应用程序测试框架。我可以通过IOHIDFamily录制触摸事件,有没有办法重播 我试过这样做 void sendclickevent(){ mach_port_t thePortOfApp = GSCopyPurpleNamedPort("com.fuckyou.fuck"); GSEventRecord header; GSHandInfo click; GSPathInfo pathInfo =

我想建立一个自动的iOS应用程序测试框架。我可以通过IOHIDFamily录制触摸事件,有没有办法重播

我试过这样做

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);     
}

应用程序的端口返回非零。但在这个功能结束时,例如按下一个按钮,什么也没发生。出什么事了?或者我需要另一种方式将触控事件发送到iOS UI?

看看其他一些与在应用程序之外发送事件相关的问题:

注释

1) 我认为你应该先发触地得分,然后再发触地得分来获得点击

2) 我在本主题中看到的大多数代码都使用了GSGetPurpleSystemAppPort(),它允许发送系统范围的事件(vs gsCopyPurpleNamePort)

我相信GSCopyPurpleNamedPort只是执行通常的引导查找端口。所以,它会找到一个端口,即使它不是紫色端口(这很可能适用于“com.fuckyou.fuck”)