🐰
macOSアプリがサンドボックス化されているかどうかをランタイムで判定する方法
環境変数にAPP_SANDBOX_CONTAINER_ID
をキーとしたコンテナIDが含まれていると、そのバンドル(アプリ)はサンドボックス化されていると判定できます。
let sandboxEnvironmentIdKey = "APP_SANDBOX_CONTAINER_ID"
let isSandboxed = (ProcessInfo.processInfo.environment[sandboxEnvironmentIdKey] != nil)
補足
通常App Storeに上げるアプリはサンドボックス化が必須であるため、その場合サンドボックスの状態を知る必要性はほぼありませんが、MacアプリはiOSとは違って、Appleの公証(Notarization)を通せばアプリをストア外でも安全に野良配布できる手段があるため、サンドボックス化を判定したい場面でこのコードが有用になることがあります。
例えば、一部のアクセシビリティ系APIはサンドボックス環境下ではシステムによってブロックされるので、実行アプリが非サンドボックスであるかどうかをエラー判定したい等のユースケースが考えられます。
Discussion