Unity Cloud Build构建Mac应用签名后仍触发ITMS-90296沙箱未启用错误
问题
我用Unity Cloud Build制作了一款MacOS应用,想通过App Store Connect签名分发。下载编译后的.app文件后,用codesign给所有相关文件签名,签名运行时二进制文件也用了授权文件。通过codesign -d --entitlements :-命令确认com.apple.security.app-sandbox已设为true,但用productbuild创建.pkg文件并通过Transporter上传后,收到App Store Connect的邮件提示ITMS-90296: App sandbox not enabled,不知道怎么调试,求解决思路(需通过Unity编辑器、Unity云构建或MacOS CLI实现)。
本地codesign验证结果
Mac-mini:Downloads mini1$ codesign -d --entitlements :- MyApp.app Executable=/Users/mini1/Downloads/MyApp.app/Contents/MacOS/MyApp warning: Specifying ':' in the path is deprecated and will not work in a future release <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://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.cs.allow-unsigned-executable-memory</key> <true/> <key>com.apple.security.cs.disable-library-validation</key> <true/> <key>com.apple.security.network.client</key> <true/> </dict> </plist>
App Store Connect错误提示
ITMS-90296: App sandbox not enabled - 以下可执行文件必须在授权属性列表中包含值为true的
com.apple.security.app-sandbox授权:[[myapp.pkg/Payload/myapp.app/Contents/MacOS/myapp]],请参考App Sandbox相关文档了解更多沙箱配置信息。
解决思路
1. 检查Unity端的沙箱配置(编辑器/云构建)
- Unity编辑器中,打开
Player Settings→MacOS→Other Settings,确保Enable App Sandbox选项已勾选。同时确认这里配置的授权列表包含com.apple.security.app-sandbox,其他必要授权(比如网络权限)也需正确设置。 - 若使用Unity Cloud Build,在构建配置的
Advanced选项中同步编辑器的Player Settings配置,或直接在云构建的环境变量/配置中指定沙箱启用参数,避免本地配置与云构建不一致。 - 注意:Unity构建时会自动生成授权文件,若手动修改过授权文件,需确保Unity构建流程不会覆盖自定义配置,或直接在Unity中配置好所有授权,让构建过程自动生成正确的entitlements文件。
2. 重新签名时的细节检查(MacOS CLI)
- 签名时,确保对整个.app包而非仅二进制文件签名,命令示例:
用codesign --deep --force --sign "你的开发者证书ID" --entitlements "你的授权文件.plist" MyApp.app--deep参数递归签名包内所有嵌套的可执行文件和框架,避免遗漏子组件的签名授权。 - 签名完成后,除主二进制文件外,还要检查.app包内所有嵌套可执行文件(比如Plugins目录下的框架、辅助工具),用命令逐个验证:
确保每个可执行文件都带有正确的沙箱授权。codesign -d --entitlements :- MyApp.app/Contents/Frameworks/SomeFramework.framework/Versions/A/SomeFramework - 创建.pkg前,重新验证整个.app的签名完整性:
确认输出显示spctl -a -t exec -vv MyApp.appaccepted且包含sandbox enabled相关信息。
3. productbuild打包的正确性验证
- 用productbuild打包时,确保指定了正确的授权和签名参数,或在打包前确认.app已完全签名正确。可以用
pkgutil解压上传的.pkg文件,重新验证其中的.app文件:
排查解压后的二进制文件是否还保留沙箱授权,排除打包过程中文件损坏或签名丢失的问题。pkgutil --expand myapp.pkg extracted_pkg codesign -d --entitlements :- extracted_pkg/Payload/myapp.app/Contents/MacOS/myapp - 尝试用
xcodebuild替代productbuild生成符合App Store要求的包,命令示例:
其中ExportOptions.plist需配置正确的分发类型和授权信息。xcodebuild -create-xcframework -framework MyApp.app -output MyApp.xcframework xcodebuild -exportArchive -archivePath MyApp.xcarchive -exportPath ./ -exportOptionsPlist ExportOptions.plist
4. 证书与授权的匹配检查
- 确认使用的开发者证书是Mac App Store分发证书,而非开发证书,App Store只接受分发证书签名的包。
- 授权文件中的
com.apple.application-identifier和com.apple.developer.team-identifier必须与证书的Team ID和App ID完全匹配,避免授权与证书不匹配导致沙箱验证失败。
内容的提问来源于stack exchange,提问作者Teun Ververs
相关产品推荐
相关产品推荐

