19

サンドボックス化された MacOS とサンドボックス化されていない MacOS の両方で実行することを目的としたアプリケーションがあります。ユーザーが MacOS 10.6 からそれ以降の OS にアップグレードする場合、安全なブックマークでブックマークできるように、ユーザーにフォルダーを再選択してもらう必要があります。

アプリケーションがサンドボックス化をサポートする OS 上にあることを検出するにはどうすればよいですか?

4

4 に答える 4

25

APP_SANDBOX_CONTAINER_ID私が知っている唯一の方法は、環境変数を探すことです。アプリがサンドボックスコンテナ内で実行されている場合に存在します。

NSDictionary* environ = [[NSProcessInfo processInfo] environment];
BOOL inSandbox = (nil != [environ objectForKey:@"APP_SANDBOX_CONTAINER_ID"]);
于 2012-08-29T13:02:20.203 に答える
6
BOOL isSandboxed = NO;

SecStaticCodeRef staticCode = NULL;
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];

if (SecStaticCodeCreateWithPath((__bridge CFURLRef)bundleURL, kSecCSDefaultFlags, &staticCode) == errSecSuccess) {
    if (SecStaticCodeCheckValidityWithErrors(staticCode, kSecCSBasicValidateOnly, NULL, NULL) == errSecSuccess) {
        SecRequirementRef sandboxRequirement;
        if (SecRequirementCreateWithString(CFSTR("entitlement[\"com.apple.security.app-sandbox\"] exists"), kSecCSDefaultFlags,
                                       &sandboxRequirement) == errSecSuccess)
        {
            OSStatus codeCheckResult = SecStaticCodeCheckValidityWithErrors(staticCode, kSecCSBasicValidateOnly, sandboxRequirement, NULL);
            if (codeCheckResult == errSecSuccess) {
                isSandboxed = YES;
            }
        }
    }
    CFRelease(staticCode);
}
于 2017-02-15T08:45:34.000 に答える