考虑到应用程序的pid,有没有办法以编程方式检测该应用程序是否在OSX沙箱环境中运行?
理想情况下,我想知道某个地方是否有API调用,最好是C,而不是Objective-C(对于一个守护进程,所以不使用Cocoa),但如果没有,是否还有其他方法可以检查?
答案 0 :(得分:3)
@Linuxios对于CoreFoundation调用是正确的。事实上,有一些组合时,可以用来解决这个问题,它基于对 SecStaticCodeCheckValidityWithErrors的调用
对于任何可能需要或需要以编程方式测试沙盒应用的人,可以按照this blog。
此外,文章的完整代码已添加到Github here。
答案 1 :(得分:1)
首先,您必须从pid获取应用程序的路径,然后您可以使用命令codesign --display --entitlements - app_path
查看所有权利。如果应用程序将权利com.apple.security.app-sandbox设置为true,那么它将被沙箱化。
你可以看看here。
答案 2 :(得分:0)
要检测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.";
}