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

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的沙箱配置已正确生效

  1. 打开项目的Info.plist,确保已添加com.apple.security.app-sandbox键,值设为true,同时根据你的视频压缩需求添加必要的权限(比如文件读写权限com.apple.security.files.user-selected.read-write)。
  2. 在Xamarin Mac项目属性的「沙箱」面板中,确认「启用App沙箱」已勾选,并且所需权限都已选中(对应你截图里的设置,要确保修改后保存并重新构建)。

二、为嵌入的FFmpeg可执行文件配置沙箱权限

因为这两个ffmpeg是独立的可执行文件,需要单独配置签名和权限:

  1. 创建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>
    
  2. 关联Entitlements到FFmpeg文件
    你需要告诉Xamarin在构建时用这个Entitlements文件给两个ffmpeg文件签名:

    • 方法一:通过项目属性配置
      右键项目 → 选项 → 构建 → Mac Build → 在「额外的mtouch参数」中添加两行命令:
      --codesign-entitlements:"FFmpeg.entitlements" --codesign "/Contents/Resources/FFMPE3/ffmpeg"
      --codesign-entitlements:"FFmpeg.entitlements" --codesign "/Contents/Resources/ffmpeg"
      
      注意路径要和错误提示里的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:50:47