繁体   English   中英

沙盒中不允许使用 IOKit?

[英]IOKit not permitted in Sandbox?

我是使用 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;

我在尝试读取 SMC 密钥以从 OSX Yosemite 'Today extension' 内部获取传感器温度和风扇速度时发现了同样的问题。 该扩展程序需要进行沙盒处理,每次尝试读取温度和风扇传感器时,我也会收到 kIOReturnNotPermitted 错误。

我让它工作的唯一方法是创建一个 XPC 服务来管理所有 SMC 的东西,配置为启动代理。 这样,沙盒应用程序(“今日”扩展)向 XPC 服务询问所有相关数据,而不是直接与 IOKit 混淆。

到目前为止,它似乎工作正常。

您不需要 XPC(不确定我是否理解该答案,因为它也需要进行沙盒处理)。

您可以使用此临时权利,尽管我不抱任何希望 Apple 批准它用于 MAS - 您需要提出您的案例来尝试证明其在 iTunes Connect 中的使用是合理的。 我有一个类似的问题,这是我迄今为止找到的唯一“解决方案”:

com.apple.security.temporary-exception.sbpl string (allow iokit-open)

我没有看到 Luis Glez 的回答提供了解决方案,而是提供了错误的信息。

事实上,目前还没有办法从沙盒应用程序访问这个 I/O Kit 功能,它也不会被 Apple 批准用于 App Store。 如果您从 Luis Glez 检查应用程序的沙箱状态,您会发现它根本没有经过沙箱处理。 此外,它在 App Store 上不可用,我认为这就是原因。

终端:

codesign --display --entitlements - VitalStats.app

最近在开发者论坛上进行了讨论,Apple 的某个人证实没有办法。

https://devforums.apple.com/message/1082393#1082393

解决方法很简单。 您需要在文件权利中添加几行

<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>

截屏

我的应用程序只是因为使用 IOKit 而被拒绝。 有没有其他人有同样的问题? 该应用程序已获准用于 60 个早期版本,但突然之间,Apple 现在似乎遇到了问题。 我使用 IOKit 读取电池信息,如当前电压等。

由于 1.1.6 - 安全而被拒绝。

感谢您提交。 在我们的审核中,我们发现您的应用不适合在 App Store 上架。

我们鼓励您审查您的应用程序概念并评估您是否可以合并不同的内容和功能以使其符合 App Store 审查指南。

对于那些可能仍在寻找答案的人,在 Catalina 中,问题可能是应用程序首先需要获得 Input Monitoring 权限,如果它没有被授予或拒绝 - 你肯定会得到 kIOReturnNotPermitted 错误。

要尝试是否是这种情况,请转到系统设置、隐私、选择输入监控并检查您的应用是否被允许。

授予权限后,错误应该消失

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM