Một trong những hệ thống giao tiếp giữa các quá trình trong MacOS là XPC. Lớp hệ thống này đã được phát triển để liên lạc giữa các quá trình dựa trên việc chuyển các cấu trúc nguyên bản bằng libSystem và launchd. Trên thực tế, nó là một giao diện cho phép quản lý các quy trình thông qua việc trao đổi các cấu trúc như từ điển. Do di truyền, iOS 5 cũng sở hữu cơ chế này.
Bạn có thể đã hiểu những gì tôi muốn nói qua phần giới thiệu này. Đúng, có các dịch vụ hệ thống trong iOS bao gồm các công cụ để liên lạc XPC. Và tôi muốn làm gương với công việc bằng một daemon để gửi SMS. Tuy nhiên, cần đề cập rằng khả năng này đã được sửa trong iOS 6, nhưng có liên quan đến iOS 5.0. Jailbreak, Private Framework và các công cụ bất hợp pháp khác là không cần thiết để khai thác. Chỉ cần tập hợp các tệp tiêu đề từ thư mục / usr / include / xpc / * là cần thiết.
Một trong những yếu tố để gửi SMS trong iOS là dịch vụ hệ thống com.apple.chatkit, các nhiệm vụ bao gồm tạo, quản lý và gửi tin nhắn văn bản ngắn. Để dễ kiểm soát, nó có cổng giao tiếp có sẵn công khai com.apple.chatkit.clientcomposeserver.xpc. Sử dụng hệ thống con XPC, bạn có thể tạo và gửi tin nhắn mà không cần sự chấp thuận của người dùng.
Chà, hãy thử tạo một kết nối.
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);
Bây giờ chúng tôi có kết nối XPC myConnection được đặt thành dịch vụ gửi SMS. Tuy nhiên, cấu hình XPC cung cấp cho việc tạo các kết nối bị treo mà chúng tôi cần thực hiện thêm một bước nữa để kích hoạt.
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);
Kết nối được kích hoạt. Ngay tại thời điểm này, iOS 6 sẽ hiển thị một thông báo trong nhật ký điện thoại rằng loại giao tiếp này bị cấm. Bây giờ chúng ta cần tạo một từ điển tương tự xpc_dipedia với dữ liệu cần thiết cho việc gửi tin nhắn.
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!");
Còn lại một chút: gửi tin nhắn đến cổng XPC và đảm bảo rằng nó được gửi.
xpc_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});
Đó là tất cả. SMS đã được gửi.