Enviar SMS programáticamente en el dispositivo jailbreak

Estoy usando un iOS 6 iphone 4S y quiero poder enviar los mensajes sms desapercibidos. Entonces, usar el controlador de vista estándar no funcionará en este caso. Intenté usar

- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3; 

pero no envía nada y devuelve NO. Usé nil para arg2.

¿Alguien puede sugerir una forma de hacerlo en iOS 6? (Para dispositivos jailbreak)

- (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3; por qué - (BOOL)sendSMSWithText:(id)arg1 serviceCenter:(id)arg2 toAddress:(id)arg3; no funciona desde iOS 6.

Esta API está protegida por el derecho com.apple.CommCenter.Messages-send . Simplemente firme su aplicación con este derecho establecido en verdadero. Es mucho mejor que mi otra respuesta aquí (método XPC) debido a las dos razones principales:

  1. sendSMSWithText te dice si el mensaje se envió con éxito
  2. Los mensajes enviados usando sendSMSWithText no se guardan en la base de datos de SMS y no se pueden ver en ningún lado. Por otro lado, los mensajes enviados usando el método XPC se guardan en la base de datos de SMS y se pueden ver en la aplicación Mensajes.

Entonces, gana. Recomiendo encarecidamente eliminar el método XPC también porque está usando una API de muy bajo nivel que puede cambiar fácilmente en la nueva versión de iOS. sendSMSWithText se puede encontrar incluso en iOS 7 y no creo que se sendSMSWithText plazo.

ACTUALIZAR

Para usar esta API en iOS 7 y superior, debe agregar otra autorización con el valor bool establecido en verdadero: com.apple.coretelephony.Identity.get .

Directamente desde ChatKit.framework

 dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc_connection_queue", DISPATCH_QUEUE_SERIAL); xpc_connection_t connection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, 0); xpc_connection_set_event_handler(connection, ^(xpc_object_t){}); xpc_connection_resume(connection); dispatch_release(queue); xpc_object_t dictionary = xpc_dictionary_create(0, 0, 0); xpc_dictionary_set_int64(dictionary, "message-type", 0); NSData* recipients = [NSPropertyListSerialization dataWithPropertyList:[NSArray arrayWithObject:@"12212"] format:NSPropertyListBinaryFormat_v1_0 options:0 error:NULL]; xpc_dictionary_set_data(dictionary, "recipients", recipients.bytes, recipients.length); xpc_dictionary_set_string(dictionary, "markup", "SMS text"); xpc_connection_send_message(connection, dictionary); xpc_release(dictionary); 

recipients contiene una lista de propiedades serializadas con un conjunto de números de teléfono a los que desea enviar su mensaje de texto: 12212 es solo un ejemplo de número de teléfono. En lugar de SMS text debe poner texto de texto real. Desafortunadamente, no pude encontrar una forma de verificar si el SMS se envió con éxito.

Para enviar un mensaje utilizando este código, sus derechos de aplicación deben tener com.apple.messages.composeclient key con valor booleano establecido en verdadero. De lo contrario, recibirá un error en la consola que indica que la aplicación carece de derechos.