Objective c 检测正在运行的应用程序是否为沙盒

Objective c 检测正在运行的应用程序是否为沙盒,objective-c,c,macos,sandbox,core-foundation,Objective C,C,Macos,Sandbox,Core Foundation,给定应用程序的pid,是否有任何方法可以通过编程检测该应用程序是否在OSX沙箱环境中运行 理想情况下,我想知道是否有API调用,最好是在C中,而不是在objective-C中(对于守护进程,因此不使用Cocoa),但如果没有,是否有其他检查方法?首先必须从pid获取应用程序的路径,然后,您可以使用命令codesign--display--authentications--app_path查看所有权利。如果应用程序的权限com.apple.security.app-sandbox设置为true,则

给定应用程序的pid,是否有任何方法可以通过编程检测该应用程序是否在OSX沙箱环境中运行


理想情况下,我想知道是否有API调用,最好是在C中,而不是在objective-C中(对于守护进程,因此不使用Cocoa),但如果没有,是否有其他检查方法?

首先必须从pid获取应用程序的路径,然后,您可以使用命令
codesign--display--authentications--app_path
查看所有权利。如果应用程序的权限com.apple.security.app-sandbox设置为true,则它是沙盒


你可以看一看。

@Linuxios说得对,有一个CoreFoundation电话。事实上,有几个组合在一起可以用来解决这个问题,它基于对SecStaticCodeCheckValidityWithErrors的调用

对于任何想要或需要以编程方式测试沙盒应用程序的人,可以遵循以下步骤


此外,本文的完整代码已添加到Github中。

要在Flex/AIR/AS3中检测沙箱,您可以使用以下kludge。同样的方法也适用于objc。如果Documents文件夹完全为空,则此操作将不起作用。或者,您可以使用任何其他禁止进入沙箱的文件夹

            var file:File = File.userDirectory;
            var a:Array = file.nativePath.split("/");
            var userName:String = a[2];
            var docFolder:File = new File("/Users/" + userName + "/Documents/");
            var dirList:Array = docFolder.getDirectoryListing();
            if (dirList.length>0) {
                docDirectoryDisplay.text = "App is NOT sandboxed.";
            } else {
                docDirectoryDisplay.text = "App is sandboxed.";
            }

可能有一个CoreFoundation呼叫您可以使用。@Linuxios,我想可能是,但您知道会是什么,我还没有找到。如果我错了,请纠正我,但出于安全原因,通常不应该有办法。@Medinoc,如果请求的应用程序在沙箱中,那么我同意您的意见,但事实并非如此。例如,“活动监视器”有一个显示此信息的沙盒列,因此它必须在某个地方可用。谢谢,尽管我更喜欢函数调用,因为我不想解析系统调用的输出。如果苹果更改了授权的名称,我的守护进程将停止正常运行。我知道我也可以使用asctl命令,它打印出“在启用应用程序沙盒的情况下运行”,但出于同样的原因,我尝试不使用它。codesign也接受pid作为参数,因此无需从pid中查找路径。