Xcode中macOS客户端与DriverKit驱动连接异常问题及解决
DriverKit客户端与驱动通信异常:IOServiceGetMatchingServices返回成功但iterator为空
问题场景
在macOS应用的Xcode项目中,采用DriverKit(搭配HIDDriverKit)框架,通过IOKit实现客户端与驱动的连接:
- 本地调试时,调用
IOServiceGetMatchingServices能正常获取iterator,可正常与驱动通信 - TestFlight分发的版本在部分系统中,该函数返回
kIOReturnSuccess(ret=0),但iterator为空(值为0),导致无法建立连接 - 已确认:通过
systemextensionsctl list检查驱动处于启用且激活状态(Enabled和Active均标星),AppSandbox已开启,SIP处于启用状态
相关代码片段:
ret = IOServiceGetMatchingServices(kIOMainPortDefault, IOServiceNameMatching(dextIdentifier), &iterator); if (ret != kIOReturnSuccess) { goto fail; } while ((service = IOIteratorNext(iterator)) != IO_OBJECT_NULL) { ret = IOServiceOpen(service, mach_task_self(), 0, &connection); if(ret == kIOReturnSuccess) { break; } else { syslog(LOG_WARNING, "Error"); } IOObjectRelease(service); }
解决方案
在应用的entitlements文件中添加com.apple.security.temporary-exception.iokit-user-client-class权限,即可解决该问题。
感谢@pmdj提供的解决方案。
内容的提问来源于stack exchange,提问作者Jafar Heidary
相关产品推荐
相关产品推荐

