2

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 に送信する別の方法が必要ですか?

4

1 に答える 1

1

アプリの外部にイベントを送信することに関連するその他の質問をいくつか見てみましょう。

GSEvent を使用してタッチ イベントを送信しますが、無効です

GraphicsServices.h/GSEvent を使用し、Xcode で CLI iPhone ツールをコンパイルする

タッチ イベントを iPhone OS に送信する方法は?

iOS でのシステム全体のタッチ イベントのシミュレート

ノート

1) クリックを得るには、最初に touchDown を送信し、2 番目に touchUp を送信する必要があると思います。

2) このテーマで私が見たコードのほとんどは、システム全体のイベントを送信できる GSGetPurpleSystemAppPort() を使用していました (対 GSCopyPurpleNamedPort)。

GSCopyPurpleNamedPort は通常の bootstrap_look_up ポートを実行するだけだと思います。したがって、紫色のポートでなくても、ポートを見つけます (これは「com.fuckyou.fuck」に当てはまる可能性が最も高い)。

于 2013-03-29T15:39:44.167 に答える