使用Developer ID分发含FFmpeg的App时出现Hardened Runtime签名错误
解决Developer ID分发时FFmpeg二进制的Hardened Runtime签名问题
方法一:重新编译FFmpeg(推荐方案)
直接从源码编译FFmpeg并启用Hardened Runtime,是最稳妥的解决方式:
- 下载FFmpeg官方源码,解压后进入源码目录
- 执行configure命令时添加Hardened Runtime及macOS适配参数(按需调整架构、功能选项):
./configure --prefix=/usr/local --enable-hardened-runtime --disable-shared --enable-static --target-os=darwin --arch=x86_64 --arch=arm64 - 编译并安装:
make && make install - 将编译生成的FFmpeg二进制替换到项目的Resources文件夹中,重新归档应用后再尝试分发
方法二:手动给现有FFmpeg二进制签名
如果无法重新编译,可通过终端命令手动给FFmpeg二进制添加Hardened Runtime签名:
- 打开终端,找到FFmpeg二进制的实际路径(可以是项目Resources里的文件,也可以是归档包内的路径)
- 执行codesign命令,替换其中的签名身份和文件路径:
注:签名身份可在钥匙串访问中查看「Developer ID Application」类型的证书详情获取codesign --force --options runtime --sign "Developer ID Application: 你的名称 (你的TeamID)" /path/to/your/ffmpeg - 验证签名是否生效,执行:
输出中若包含codesign -dv --verbose=4 /path/to/your/ffmpegRuntime Version=10.14.0和Hardened Runtime相关字段,说明已成功启用 - 签名完成后,重新归档应用并提交分发
注意事项
- 手动签名时确保FFmpeg二进制未被其他签名锁定,使用
--force参数可强制覆盖原有签名 - 若使用Universal架构的FFmpeg,需确保签名同时支持x86_64和arm64架构
- 重新编译FFmpeg时,可根据需求添加其他编解码器、功能参数,仅需保留
--enable-hardened-runtime即可开启Hardened Runtime支持
内容的提问来源于stack exchange,提问作者soundflix
相关产品推荐
相关产品推荐

