我刚开始使用IOKit,并且已经注意到我认为沙箱会使它失败。
下面是我正在尝试的测试(在Pascal中),它在沙箱外运行良好,但是当我启用它时,IOServiceOpen每次都返回错误kIOReturnNotPermitted。
对于某些服务,IOKit在沙箱中不安全吗?我试图获得一些风扇速度/cpu温度,我看到在AppStore (沙箱)有一些应用程序这样做,所以我相信这是可能的。我能确认的唯一一个例子似乎是将XPC服务与应用捆绑在一起,作为一个助手,所以也许这是让IOKit工作的一个线索?我基本上尝试了所有的权利,但似乎都没有任何帮助。
谢谢你的想法。
procedure TestIOKit;
var
err: kern_return_t;
masterPort: mach_port_t;
iterator: io_iterator_t;
device: io_object_t;
matchingDictionary: CFMutableDictionaryRef;
conn: io_connect_t;
begin
IOMasterPort(0, masterPort);
matchingDictionary := IOServiceMatching('AppleSMC');
err := IOServiceGetMatchingServices(masterPort, matchingDictionary, iterator);
if err <> kIOReturnSuccess then
writeln('IOServiceGetMatchingServices: ', err);
device := IOIteratorNext(iterator);
IOObjectRelease(iterator);
if device = 0 then
writeln('no smc found');
err := IOServiceOpen(device, mach_task_self_, 0, conn);
if err <> kIOReturnSuccess then
writeln('IOServiceOpen: ', err);
end;发布于 2014-10-27 17:41:26
我发现了同样的问题,试图读取SMC键,以便从OSX的“今日扩展”中获取传感器、温度和风扇速度。扩展需要沙箱,而且每当我尝试读取临时感应器和风扇感应器时,我都会得到kIOReturnNotPermitted错误。
我让它工作的唯一方法是创建一个XPC服务来管理所有的SMC内容,配置为一个启动代理。这样,沙箱应用程序(“今天”扩展)要求XPC服务提供所有相关数据,而不是直接处理IOKit。
到目前为止,它似乎运行正常。
发布于 2016-02-01 18:57:31
您不需要XPC (不确定我是否理解这个答案,因为它也需要沙箱)。
你可以使用这个临时的权利,虽然我没有任何希望苹果批准它的MAS -你需要提出你的理由,试图证明它的使用在iTunes连接。我也有类似的问题,到目前为止,这是我找到的唯一“解决方案”:
com.apple.security.temporary-exception.sbpl string (allow iokit-open)发布于 2015-09-25 09:35:24
我看不出Luis的回答提供了一个解决方案,但提供了错误的信息。
事实上,目前无法从一个沙箱应用程序中访问这个I/O工具包功能,苹果也不会批准它的应用商店。如果您从Luis处选中该应用程序的沙箱状态,就会发现它根本没有沙箱。另外,它在assume中不可用,我想这就是原因所在。
航站楼:
codesign --display --entitlements - VitalStats.app最近在开发者论坛上进行了一次讨论,来自苹果的人证实了这是不可能的。
https://stackoverflow.com/questions/23244349
复制相似问题