如何确定是否启用了沙盒

How to determine if is sandboxing enabled or not

如何在 OSX 应用 运行 时检查沙盒是否启用?

我需要它来对我的库进行一些断言测试,这些测试可以在不同的环境中 运行。

This might help

  1. In Finder, look at the contents of the ~/Library/Containers/ folder.

    If the Quick Start app is sandboxed, there is now a container folder named after your app. The name includes the company identifier for the project, so the complete folder name would be, for example, com.yourcompany.AppSandboxQuickStart.

    The system creates an app’s container folder, for a given user, the first time the user runs the app.

  2. In Activity Monitor, check that the system recognizes the app as sandboxed.

    • Launch Activity Monitor (available in /Applications/Utilities).

    • In Activity Monitor, choose View > Columns. Ensure that the Sandbox menu item is checked.

    • In the Sandbox column, confirm that the value for the Quick Start app is Yes.

    To make it easier to locate the app in Activity monitor, enter the name of the Quick Start app in the Filter field.

  3. Check that the app binary is sandboxed.

codesign -dvvv --entitlements :- executable_path

最后我选择了这个解决方法(因为它很简单):

func isSandboxingEnabled() -> Bool {
    let environment = NSProcessInfo.processInfo().environment
    return environment["APP_SANDBOX_CONTAINER_ID"] != nil
}