MacOS'ta süreçler arası iletişim sistemlerinden biri XPC'dir. Bu sistem katmanı, libSystem ve launchd kullanılarak plist yapıların transferine dayanan süreçler arası iletişim için geliştirilmiştir. Aslında, sözlük gibi yapıların değişimi yoluyla süreçleri yönetmeye izin veren bir arayüzdür. Kalıtım nedeniyle, iOS 5 de bu mekanizmaya sahiptir.
Bu girişle ne demek istediğimi zaten anlayabilirsiniz. Evet, iOS'ta XPC iletişimi için araçlar içeren sistem hizmetleri var. Ve SMS gönderimi için bir cini ile çalışmayı örneklemek istiyorum. Ancak, bu yeteneğin iOS 6'da sabit olduğu, ancak iOS 5.0—5.1.1 için geçerli olduğu belirtilmelidir. Jailbreak, Private Framework ve diğer yasadışı araçlar kullanılması için gerekli değildir. Yalnızca / usr / include / xpc / * dizinindeki başlık dosyaları kümesi gereklidir.
İOS'ta SMS göndermenin unsurlarından biri, görevleri kısa metin mesajlarının oluşturulması, yönetimi ve gönderilmesini içeren com.apple.chatkit sistem hizmetidir. Kontrol kolaylığı için, com.apple.chatkit.clientcomposeserver.xpc genel kullanıma açık iletişim portuna sahiptir. XPC alt sistemini kullanarak, kullanıcının onayı olmadan mesaj oluşturabilir ve gönderebilirsiniz.
Bir bağlantı oluşturmaya çalışalım.
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);
Şimdi, SMS gönderme hizmetine ayarlanmış XPC bağlantı myConnection var. Bununla birlikte, XPC yapılandırması askıya alınmış bağlantıların oluşturulmasını sağlar; etkinleştirme için bir adım daha atmamız gerekir.
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);
Bağlantı etkinleştirildi. Şu anda iOS 6 telefon kaydında bu tür iletişimin yasak olduğunu belirten bir mesaj görüntüleyecektir. Şimdi, mesaj göndermek için gereken verilerle xpc_dictionary benzeri bir sözlük oluşturmamız gerekiyor.
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!");
Az kaldı: mesajı XPC bağlantı noktasına gönderin ve teslim edildiğinden emin olun.
xpc_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});
Bu kadar. SMS gönderildi.