我是使用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;
答案 0 :(得分:4)
我发现同样的问题是尝试读取SMC键,以便从OSX Yosemite'Woday extension'中获取传感器温度和风扇速度。扩展需要沙箱化,每当我尝试读取温度和风扇传感器时,我也会得到kIOReturnNotPermitted错误。
我实现它的唯一方法是创建一个管理所有SMC内容的XPC服务,配置为启动代理。这样,沙盒应用程序('今天'扩展名)向XPC服务询问所有相关数据,而不是直接搞乱IOKit。
到目前为止,它似乎正常运作。
答案 1 :(得分:3)
你不需要一个XPC(不确定我理解答案,因为它也需要沙盒)。
你可以使用这个临时权利,虽然我没有希望苹果批准它为MAS - 你需要让你的案例试图证明它在iTunes连接中的使用。我有一个类似的问题,它是迄今为止我发现的唯一“解决方案”:
com.apple.security.temporary-exception.sbpl string (allow iokit-open)
答案 2 :(得分:1)
我不认为Luis Glez的答案提供了解决方案,但错误的信息。
实际上目前无法从沙盒应用程序访问此I / O Kit功能也不会被Apple批准用于App Store。 如果您从Luis Glez检查应用程序的沙箱状态,您将看到它根本没有沙箱。此外,它在App Store无法使用,我认为这就是原因。
终端:
codesign --display --entitlements - VitalStats.app
最近有关开发者论坛的讨论,Apple的某人证实没有办法。
答案 3 :(得分:1)
一般来说,我的应用只是因为使用IOKit而被拒绝。还有其他人有同样的问题吗?该应用程序已被批准用于60个早期版本,但突然之间,Apple似乎现在遇到了问题。我使用IOKit读取电池信息,例如当前电压等。
由于1.1.6-安全性而被拒绝。
感谢您的提交。在审核过程中,我们发现您的应用不适合App Store。
我们鼓励您检查您的应用概念并评估您是否 可以合并不同的内容和功能以将其引入 遵守《 App Store审查指南》。
答案 4 :(得分:0)
解决方案非常简单。您需要在文件权利
中添加几行<key>com.apple.security.temporary-exception.sbpl</key>
<array>
<string>(allow iokit-open)</string>
<string>(allow iokit-set-properties (iokit-property "ConsoleUID"))</string>
<string>(allow mach-lookup (global-name "com.apple.AssetCacheLocatorService"))</string>
</array>
答案 5 :(得分:0)
对于那些仍在寻找答案的用户,问题可能是该应用首先需要获得输入监视权限(如果未授予或拒绝它)-您肯定会得到kIOReturnNotPermitted错误。
要尝试这种情况,请转到“系统设置”,“隐私”,选择“输入监视”,然后检查是否允许您的应用。
授予权限后,错误应消失