关于 进程间通信 xpc 使用的问题

目前我使用的是XPC 来进行app和deamon 进行进程之间通信
我发现大部分app 和我的 daemon 用xpc都能连接, 但是部分app作为client 连接daemon时候, 立马直接报下面的错误

Received reply object: <error: 0x1b2a16bc0> { count = 1, transaction: 0, voucher = 0x0, contents =
“XPCErrorDescription” => <string: 0x1b2a16e18> { length = 18, contents = “Connection invalid” }
}

请教一下,这是为什么呢 , 应该怎么解决呢?

这个地方 就比较讲究了。
如果是你回复服务端发过来的消息你应该用 xpc_dictionary_create_reply 来生成 xpc_object_t
大概类似这样

xpc_object_t reply = xpc_dictionary_create_reply(some_object);
 if (reply) {
  xpc_dictionary_set_string(reply, "message", "Pong");
  HBLogDebug(@"XPC connection sending reply: %s", xpc_copy_description(reply));
  xpc_connection_send_message(xpc_dictionary_get_remote_connection(some_object), reply);
}

我上面这个

Received reply object: <error: 0x1b2a16bc0> { count = 1, transaction: 0, voucher = 0x0, contents =
“XPCErrorDescription” => <string: 0x1b2a16e18> { length = 18, contents = “Connection invalid” }
}

是client 收到的, 我客户端代码如下:

// Send message to mach service, and wait for a response
xpc_object_t object = xpc_dictionary_create(NULL, NULL, 0);
xpc_dictionary_set_string(object, "message", "Ping");
NSLog(@"Sending object: %s\n", xpc_copy_description(object));

xpc_object_t reply = xpc_connection_send_message_with_reply_sync(connection, object);
NSLog(@"Received reply object: %s\n\n", xpc_copy_description(reply));

其实server端 没有收到客户端发到消息, 客户端直接报错了, 不知道为什么

我的猜测:
1.是不是跟app的权限文件entitlements有关
2.该app是不是有别的xpc服务, 导致我把他当成xpc客户端不行

不知道, 反正我的工作的很美好:yum:

好吧… 这个问题困扰了我几天了 :cold_sweat:

实在不行就 webscoket 配合 pb 也能玩的很爽呀

webscoket 也可以本地进程 双向通信吗? 有教程文章吗 前辈

ws 不是可以建聊天室?

我还没用过 websocket 所以不是很清楚 :disappointed_relieved:

我也遇到这个问题了,但是我前一天是能正常使用,第二天莫名其妙的就不行了,最后你解决了吗

有没有安装RocketBootstrap?App应该只有发送权限