You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode验证报错:已沙箱化签名的macOS捆绑可执行文件提示App sandbox未启用

macOS应用归档验证失败:嵌入式辅助工具的App Sandbox配置问题

验证错误信息

App sandbox not enabled. The following executables must include the "com.apple.security.app-sandbox" entitlement with a Boolean value of true in the entitlements property list: [("<redacted app bundle path>/Contents/Resources/<tool-1>",   "<redacted app bundle path>/Contents/Resources/<tool-2>")] Refer to App Sandbox page at https://developer.apple.com/documentation/security/app_sandbox for more information on sandboxing your app. (ID: 1cc710f6-18a3-4038-b355-fe37c39c165f)

上下文信息

  • 主应用目标已通过.entitlements文件启用App Sandbox(com.apple.security.app-sandbox = true);
  • 两个捆绑的辅助二进制文件为静态构建,放置在应用包内,通过Process/NSTask执行;
  • 每个辅助二进制文件均已使用相同Team ID进行代码签名,应用本身签名及构建均正常。

问题解答

1. 如何正确配置捆绑可执行文件以满足要求,消除此验证错误?

嵌入式辅助工具必须单独启用App Sandbox权限,即使主应用已配置。具体操作:

  • 为每个辅助工具创建独立的.entitlements文件,文件内添加com.apple.security.app-sandbox = true;
  • 若在Xcode中为辅助工具创建了独立目标,在目标的Code Signing Entitlements配置项中,指向对应的.entitlements文件;
  • 若未创建独立目标,需通过自定义构建脚本为辅助工具签名时指定权限文件:
    codesign --force --sign "你的Team ID" --entitlements tool1.entitlements path/to/tool-1
    codesign --force --sign "你的Team ID" --entitlements tool2.entitlements path/to/tool-2
    
  • 确保签名使用与主应用一致的Team ID,且权限文件与对应工具正确关联。

2. 若需为tool-1和tool-2配置专属权限文件,正确的配置方式是什么?

每个辅助工具的权限文件需独立配置,步骤如下:

  • 分别创建tool1.entitlements和tool2.entitlements文件,采用标准plist格式:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <!-- 添加该工具专属权限,如文件访问、网络权限等 -->
        <key>com.apple.security.files.user-selected.read-write</key>
        <true/>
    </dict>
    </plist>
    
  • 若辅助工具是Xcode独立目标,在目标的Signing & Capabilities面板中添加App Sandbox能力,按需勾选对应权限(Xcode会自动更新.entitlements文件);
  • 若使用构建脚本签名,需在codesign命令中明确指定对应工具的权限文件,如上述第1点的脚本示例。

3. 辅助工具是否需要独立于应用的权限文件和签名?若是,沙箱化macOS应用中嵌入式可执行文件的规范配置方式是什么?

是,嵌入式辅助工具需要独立的权限文件和签名,规范配置方式分为两种场景:

场景1:创建独立Xcode目标(推荐)

  • 在Xcode中为每个辅助工具创建独立的命令行工具目标;
  • 为每个目标启用App Sandbox能力,配置专属权限;
  • 在主应用目标的Build Phases中添加Copy Files阶段,将编译后的辅助工具复制到主应用包的Contents/Resources目录;
  • 确保所有目标使用相同的Team ID和签名配置,Xcode会自动处理签名与权限关联。

场景2:手动签名(无独立目标时)

  • 提前编译好静态辅助工具;
  • 创建对应权限文件,添加必要的沙箱权限;
  • 在主应用的Build Phases中添加Run Script阶段,执行签名脚本:
    TOOL1_PATH="${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Resources/tool-1"
    TOOL2_PATH="${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Resources/tool-2"
    codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --entitlements "${PROJECT_DIR}/tool1.entitlements" "${TOOL1_PATH}"
    codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --entitlements "${PROJECT_DIR}/tool2.entitlements" "${TOOL2_PATH}"
    

验证配置

归档后,可通过以下命令验证工具的签名与权限:

codesign -d --entitlements - path/to/tool-1

确认输出中包含com.apple.security.app-sandbox = true及其他配置的权限。

内容的提问来源于stack exchange,提问作者rezivor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:25:15