Aplicación de background de iPhone para actualizar la pantalla cuando se recibe una llamada telefónica.

Estamos en el process de escribir una aplicación de iPhone (que estará en segundo plano) que será notificada cuando llegue una llamada entrante. La aplicación realiza algunos trabajos en segundo plano: va a un server que recupera algunos datos mientras la session del teléfono está en curso y luego notifica al usuario.

Después de search, descubrí que puedo usar los Private Telephony Headers/Framework para saber realmente quién está llamando en mi aplicación. Sin embargo, no puedo actualizar la pantalla del marcador con la información recuperada del server. También encontré que la aplicación debe estar ejecutándose cuando llegue la llamada telefónica. ¡¡Yak!!

Sé que esto no se aprobará en la tienda de Apple, sin embargo, estoy buscando 2 cosas:

  1. ¿Cómo pongo esta aplicación en segundo plano?
  2. ¿Cómo muestro cierta información mientras la llamada está en curso? La notificación local está bien, pero debe mostrarse de inmediato.

Incluso si tenemos que hacer jailbreak, me gustaría saber cómo hacerlo. Esta aplicación es para funcionarios encargados de hacer cumplir la ley, testing de concepto.

Como dijo YllierDev, podría ver un tweak de MobileSubstrate para mostrar la información. Pero, para algo que tal vez sea un poco less desalentador para alguien nuevo, podría intentar esto:

  1. Primero, crea un demonio de lanzamiento . Esto puede ejecutarse en segundo plano y hacer lo que quiera. Se iniciará cuando se inicie el teléfono, por lo que el usuario no necesita ejecutar primero alguna aplicación y luego ponerla en segundo plano. Encontré que este es un buen ejemplo de creación de LaunchDaemon.

  2. Parece que ya sabe cómo usar las características no documentadas del marco de Core Telefonía para recibir notifications de una nueva llamada. Esta será la responsabilidad de su demonio. Para ver la integridad, vea esta respuesta , o esta otra respuesta sobre cómo el demonio puede escuchar las llamadas con las notifications de Darwin.

  3. Cuando la llamada es interceptada, su demonio puede comunicarse con su server.

  4. Entonces, puede crear una window emergente simple con algo como esto :

 CFOptionFlags responseFlags = 0; CFUserNotificationDisplayAlert(20.0, 3, NULL, NULL, NULL, CFSTR("Hello"), CFSTR("Hello World"), CFSTR("OK"), NULL, NULL, &responseFlags); 

Aquí hay algunos documentos de Apple en CFUserNotifications

Probablemente deba vincularse con el marco CoreFoundation , y tal vez include este encabezado en su proyecto, para que CFUserNotificationDisplayAlert() esté disponible.

Pero, eso debería darle una window emergente con sus datos de llamadas dinámicas.