「AutoTouch」的な何かを作りたかった
かなり前から「AutoTouch」的なTweakを作りたく、いろいろ調べた所IOKitあたりで出来ることがわかり、IOKitのヘッダーを読んだもののワケワカメ!ってことで諦めていましたが、@Adolfoi氏から「SimulateTouch」というライブラリを教えてもらったので使ってみました。
導入方法
詳しい導入方法は公式リポジトリのレドメを読めばわかります。(雑
https://github.com/iolate/SimulateTouch
rocketboostrapが別途必要だったりします。
API
APIもご丁寧にリファレンスを見ればわかりますね。
画面が横になっている時用に座標変換のAPIまで用意してあってよさ気です。
http://api.iolate.kr/simulatetouch/
気になったこと
かなりの速度でタッチダウン、タッチアップを呼び出すと
連打状態になり、しかもその状態が永遠につづくというかなり致命的なバグが起きることがあるので注意。
ユーザーからの入力で操作するときはタイマーなどで制限をかければ回避可能。
また、backboarddをフックしているせいなのか、SpringBoardをkillしまくると稀にブートループに陥ることがある。(iOS9特有の可能性あり)
ブートループになった時はNon Substrate Modeに入れ、一度dylibを無効化すると解決する(詳細不明)
backboarddフックしててbackboarddがクラッシュするとSubstrate Safemodeに入れないから辛い(´・ω・`)
↑rocketbootstrapが逝く時もあるしちょっと怖い
作例
標準機能と組み合わせるなり何なりでいろいろ遊べますが。
個人的にはまってたのはBluetoothキーボードとつなげて遊んでましたw
なんか面白い pic.twitter.com/vCYJhkh81m
— すり身焼き㌠ (@ChikuwaJB_blog) 2016年4月29日
結構、Bluetoothキーボードの遅延が少ないのでゲームコントローラー的なものも出来そうです。
ムズい pic.twitter.com/NbTz5kuWA9
— すり身焼き㌠ (@ChikuwaJB_blog) 2016年4月29日
UIKeyCommandだと長押しとかが検知できないのでBluetoothのライブラリとかを使ったほうが実用性が高いです。
まとめ
前からタッチのエミュレートはやってみたかったので個人的には満足です(^^)
教えていただいた@Adolfoi氏に感謝 :)