Xamarin Mac项目启用App Sandbox遇阻:含FFmpeg提交报错ITMS-90296
解决Xamarin Mac项目嵌入FFmpeg提交App Store时的ITMS-90296沙箱错误
这个问题的核心是App Store会检查App Bundle里的每一个可执行文件——不仅是你的主CvLive.app,还有嵌入的两个ffmpeg可执行文件,都必须启用App Sandbox权限。你之前的操作可能只配置了主App,忽略了这两个辅助可执行文件的权限设置,下面是具体的解决步骤:
一、确认主App的沙箱配置已正确生效
- 打开项目的
Info.plist,确保已添加com.apple.security.app-sandbox键,值设为true,同时根据你的视频压缩需求添加必要的权限(比如文件读写权限com.apple.security.files.user-selected.read-write)。 - 在Xamarin Mac项目属性的「沙箱」面板中,确认「启用App沙箱」已勾选,并且所需权限都已选中(对应你截图里的设置,要确保修改后保存并重新构建)。
二、为嵌入的FFmpeg可执行文件配置沙箱权限
因为这两个ffmpeg是独立的可执行文件,需要单独配置签名和权限:
创建FFmpeg专用的Entitlements文件
在项目中添加一个新的Entitlements文件(命名为FFmpeg.entitlements),内容如下:<?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/> <!-- 根据FFmpeg的实际使用场景添加权限,比如需要读取用户选择的视频文件就加下面的键 --> <key>com.apple.security.files.user-selected.read-write</key> <true/> </dict> </plist>关联Entitlements到FFmpeg文件
你需要告诉Xamarin在构建时用这个Entitlements文件给两个ffmpeg文件签名:- 方法一:通过项目属性配置
右键项目 → 选项 → 构建 → Mac Build → 在「额外的mtouch参数」中添加两行命令:
注意路径要和错误提示里的FFmpeg路径完全一致。--codesign-entitlements:"FFmpeg.entitlements" --codesign "/Contents/Resources/FFMPE3/ffmpeg" --codesign-entitlements:"FFmpeg.entitlements" --codesign "/Contents/Resources/ffmpeg" - 方法二:手动修改.csproj文件
打开项目的.csproj文件,找到两个ffmpeg文件的BundleResource节点,添加CodesignEntitlements属性:<ItemGroup> <BundleResource Include="Resources\FFMPE3\ffmpeg"> <CodesignEntitlements>FFmpeg.entitlements</CodesignEntitlements> </BundleResource> <BundleResource Include="Resources\ffmpeg"> <CodesignEntitlements>FFmpeg.entitlements</CodesignEntitlements> </BundleResource> </ItemGroup>
同时要确保这两个ffmpeg文件的「构建操作」设置为
BundleResource,这样它们才会被正确打包到App Bundle中。- 方法一:通过项目属性配置
三、验证配置是否生效
构建完成后,找到生成的CvLive.app,右键选择「显示包内容」,定位到两个ffmpeg文件的位置,用终端执行以下命令检查签名权限:
codesign -d --entitlements - /path/to/CvLive.app/Contents/Resources/FFMPE3/ffmpeg codesign -d --entitlements - /path/to/CvLive.app/Contents/Resources/ffmpeg
输出结果里应该能看到com.apple.security.app-sandbox = true的配置,同时主App也要用同样的命令验证一遍。
四、额外注意事项
- 确保所有可执行文件(主App+两个ffmpeg)都使用同一个开发者证书签名,避免签名不一致的问题。
- 如果使用的是预编译的FFmpeg版本,要确认它是针对macOS平台编译的,没有依赖未授权的系统框架。
- 清理项目的bin和obj目录,重新构建,避免缓存的旧配置干扰。
内容的提问来源于stack exchange,提问作者manickam
相关产品推荐
相关产品推荐

