2012-02-10 10 views
5

Necesito agregar eventos táctiles a los dispositivos iOS system wide sin usar jailbreak; ¿Cómo hago esto?Simulación de System Wide Touch Events en iOS

Preferiblemente, me gustaría utilizar una API privada para ejecutar esto en una aplicación en segundo plano. Soy consciente de que esto impide la disponibilidad de mi aplicación en la tienda de aplicaciones; Sin embargo, esta es una aplicación privada, por lo que no es un problema.

+0

@Nate nos ha encontrado ningún reemplazo, ahora en el momento de iOS9, para todas esas viejas buenas API de GSEvent no hay más disponible (desde iOS7, supongo)? – JBA

+0

@JBA, hasta la fecha, no lo he hecho. No he buscado * superduro *. Pero, estoy de acuerdo. Serían muy útiles para tener de nuevo. :( – Nate

+0

Gracias ... Sí, realmente eso es un gran problema. También he estado buscando dentro de SpringboardServices sin mucha suerte ... – JBA

Respuesta

-1

Sin jailbreaking no hay una manera real de enganchar un reconocedor de gestos en todas las vistas de todo el sistema. En primer lugar, su aplicación ejecutándose en segundo plano no tiene la capacidad de ejecutar este código.

+0

¿Estás seguro? He estado buscando en la API privada de GSEvent recientemente (https://github.com/rpetrich/iphoneheaders/blob/master/GraphicsServices/GSEvent.h) y pude 'presionar' el botón de bloqueo mientras mi aplicación estaba en segundo plano, no he podido simular un toque utilizando GSEvent independientemente de si mi aplicación se ejecuta en segundo plano o no (puedo hacer eventos de acelerómetro). – user293895

1

Es posible. Exactamente cómo lo mencionó, utilizando GSEvents y enviándolos al puerto con nombre morado de la aplicación que está tratando de controlar/simular. Por supuesto, necesita GSEvent.h de KennyTM para lograr esto. He hecho esto para iOS 4.3, simplemente cambiando algunos de los valores que tenía Kenny (como kGSHandInfoTypeTouchDown), pero ahora estoy tratando de hacerlo para iOS 5 y no está funcionando, hasta ahora.

EDITAR: Ahora está funcionando para iOS 5.1.

+0

¿Me puede mostrar un ejemplo con código? – user293895

+0

Le sugiero que traduzca cada UIEvent que su aplicación recibe en GSEvent para su análisis. Incluso puede tratar de recibir un GSEvent por un toque y luego volver a enviarlo. Luego, comience a construir su propia estructura y cambie los campos en consecuencia. La API de KennyTM es un buen comienzo, y en realidad funciona ks con iOS 4.3 (solo tienes que rellenar los valores de los campos, pero como he dicho, algunos son constantes y no tienen explicación alguna, como PathProximity, que es 2 para eventos TouchDown y 1 para TouchUp. PathIndex siempre es 2, pathMajorRadious y pathPressure siempre 1.0, etc.) –

+0

@JorgeAguirre ¿Podrías decirme cómo funcionará para iOS 7? Para iOS 7 GSEvent API ha quedado obsoleta. – Developer

3

Lo que debe hacer primero es crear los eventos que desea, y luego enviarlos a SpringBoard sobre el "puerto morado", por ejemplo. puerto mach Para hacer que sean de todo el sistema, debe reenviarlos a cada aplicación sobre el puerto. Eso significa que necesita hacer realmente lo que hace el gestor de ventanas y ver qué aplicación está activa, bloqueada, etc.

Hay una mano llena de API de infraestructura privada que funcionan (IOSurface, GraphicServices, SpringBoardServices, etc.) para conseguirte las piezas que necesitas

Deberá cargar estos marcos privados en tiempo de ejecución usando algo como dlopen().

Esto es 100% posible sin jailbreak iOS 6.1.4 a partir de (ATM actual), pero se le cargando marcos privados que no está permitido por la manzana para el AppStore;)

+0

¿Podrías decirme cómo funcionará para iOS 7? Para iOS 7 GSEvent API ha quedado obsoleta – Developer