Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 沙箱中不允许使用IOKit?_Macos_Iokit_Appstore Sandbox - Fatal编程技术网

Macos 沙箱中不允许使用IOKit?

Macos 沙箱中不允许使用IOKit?,macos,iokit,appstore-sandbox,Macos,Iokit,Appstore Sandbox,我刚开始使用IOKit,并且注意到我认为是沙箱导致它失败 下面是我正在尝试的测试(使用Pascal),它在沙箱外部运行良好,但当我启用它时,每次IOServiceOpen都返回错误kioreTurnNotAllowed 对于某些服务,IOKit在沙箱中是否不安全?我试图获得一些风扇速度/cpu温度,我看到AppStore(沙盒)中有一些应用程序正在这样做,所以我相信这是可能的。我能确认的唯一一个似乎有一个XPC服务捆绑在应用程序中作为助手,所以这可能是使IOKit工作的一个线索?我基本上尝试了所

我刚开始使用IOKit,并且注意到我认为是沙箱导致它失败

下面是我正在尝试的测试(使用Pascal),它在沙箱外部运行良好,但当我启用它时,每次IOServiceOpen都返回错误kioreTurnNotAllowed

对于某些服务,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;
procedure-TestIOKit;
变量
错误:kern\u return\t;
主端口:马赫端口;
迭代器:io_迭代器\u t;
设备:io_对象\u t;
matchingDictionary:CFMutableDictionaryRef;
连接:io连接;
开始
IOMasterPort(0,主端口);
matchingDictionary:=IOServiceMatching('AppleSMC');
err:=IOServiceGetMatchingServices(主端口、匹配字典、迭代器);
如果错误导致成功,那么
writeln('IOServiceGetMatchingServices:',err);
设备:=IOIteratorNext(迭代器);
IOObjectRelease(迭代器);
如果设备=0,则
writeln(“未找到smc”);
错误:=IOServiceOpen(设备、机器、任务、自身、0、连接);
如果错误导致成功,那么
writeln('ioservice:',err);
结束;

我在试图读取SMC键以从OSX Yosemite“今日扩展”中获取传感器温度和风扇速度时发现了相同的问题。扩展需要沙盒,每次尝试读取温度和风扇传感器时,我都会收到KioreTurnNotAllowed错误

我让它工作的唯一方法是创建一个XPC服务来管理所有SMC内容,配置为启动代理。通过这种方式,沙盒应用程序(“今日”扩展)向XPC服务请求所有相关数据,而不是直接干扰IOKit


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

我看不出路易斯·格雷兹的答案提供了解决方案,但信息错误

事实上,目前无法从沙盒应用程序访问此I/O工具包功能苹果也不会批准其用于应用商店。 如果您从Luis Glez检查应用程序的沙盒状态,您将看到它根本没有沙盒。此外,它在应用商店不可用,我想这就是原因

终端:

codesign --display --entitlements - VitalStats.app
最近在开发者论坛上进行了一次讨论,苹果公司的一位人士证实这是不可能的

您不需要XPC(我不确定我是否理解这个答案,因为它也需要沙盒)

你可以使用这项临时权利,尽管我不希望苹果批准它作为MAS——你需要证明自己的理由,以证明它在iTunes connect中的使用是合理的。我有一个类似的问题,这是迄今为止我发现的唯一“解决方案”:

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

解决方案非常简单。您需要在文件权限中添加几行

<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>
com.apple.security.temporary-exception.sbpl

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

因1.1.6-安全原因被拒绝

谢谢你的意见。在我们的审查过程中,我们发现您的应用不适合应用商店

我们鼓励您回顾您的应用程序概念,并评估您是否 可以合并不同的内容和功能以将其纳入 遵守应用商店审查指南


对于那些仍在寻找答案的人来说,在Catalina,问题可能是应用程序首先需要获得输入监控权限,如果它没有被授予或拒绝的话——你肯定会得到KioreTurnNotAllowed error

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


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

如果您还没有,请弹出
控制台
应用程序并搜索
沙盒
。每次发生沙盒冲突时,您都会收到一条带有回溯的消息。我认为这可能是答案,但在确定之前,我不想承诺学习XPC服务。谢谢我们不需要将XPC服务沙盒化吗?我已经尝试了您的答案,但当XPC服务中存在沙盒启用时,IOServiceOpen()不起作用。那么,如果我在XPC服务中禁用了沙盒,苹果会批准我的应用程序吗?还是我遗漏了什么?是的,据我所知,一定是沙盒。为了让它工作,我必须在XPC服务授权文件中添加一个临时异常:(com.apple.security.temporary-exception.mach-lookup.global-name:(String)‘您的XPC服务标识符’)。如果您不使用Mac应用商店进行分发,它可以正常工作。不过,我不确定MAS分发是否允许这样做。所以没有办法用沙箱获取传感器温度和风扇速度?是否有任何其他方法可以获取您知道的这些值?…苹果不会批准这些值用于MAS分发。是的,我无法生成一个符合app store规定的用于读取、监控和控制风扇速度和温度的概念。