Mac Catalyst版TestFlight分发时FFmpegkit库缺失崩溃求助
问题:Mac Catalyst版本TestFlight分发后FFmpegKit库加载崩溃
应用的iOS版本在TestFlight上运行正常,Xcode本地构建Mac Catalyst版本也无问题,但将Mac Catalyst版本分发至TestFlight后,FFmpegKit库加载失败导致崩溃。崩溃报告显示无法从@rpath/ffmpegkit.framework/ffmpegkit路径加载该库。
终止原因:Namespace DYLD,代码1 库缺失
未加载库:@rpath/ffmpegkit.framework/ffmpegkit
引用自:<9162F8B0-7112-310B-8EDA-59766087927F> /Applications/MyApp.app/Contents/MacOS/MyApp
原因:尝试路径'/System/Library/Frameworks/ffmpegkit.framework/ffmpegkit'(不存在,不在dyld缓存中),(安全策略不允许@路径扩展)
(启动时终止;忽略回溯)
已尝试的无效方案
- 尝试Eugene Dudnyk的解决方案,仍出现相同错误
- 检查TestFlight中的包内容,路径与
/System/Library/Frameworks/ffmpegkit.framework/ffmpegkit匹配 - 在Xcode中以Release scheme运行应用,构建和运行均正常
- 手动加载Mac Catalyst签名证书,仍报错
- 删除所有派生数据
- 删除并重装Xcode,尝试过旧版本
- 彻底删除项目
- 尝试过Stack Overflow相关帖子中的多数方案,无济于事
可行解决方案尝试
1. 修正框架嵌入与签名配置
- 打开Xcode项目,选中
ffmpegkit.framework,在General标签的Frameworks, Libraries, and Embedded Content区域,确保Mac Catalyst目标的设置为Embed & Sign,而非Do Not Embed。 - 确认框架的
Code Signing Identity和Provisioning Profile与主应用的Mac Catalyst分发配置完全一致。
2. 调整@rpath路径设置
- 进入项目目标的Build Settings,搜索
Runpath Search Paths,为Mac Catalyst目标添加@executable_path/../Frameworks(这是Mac Catalyst应用框架的标准加载路径),确保该路径处于列表首位且未被其他配置覆盖。 - 检查
Dynamic Library Install Name设置,确认ffmpegkit.framework的安装名称为@rpath/ffmpegkit.framework/ffmpegkit,未被错误修改为系统框架路径。
3. 验证打包后框架的完整性与签名
- 通过Xcode归档后,右键归档文件选择
Show in Finder,再次右键归档文件选择Show Package Contents,进入Products/Applications/MyApp.app/Contents/Frameworks,确认ffmpegkit.framework存在且内部结构完整(包含二进制文件、Info.plist等核心文件)。 - 使用终端命令
codesign -dv --verbose=4 MyApp.app/Contents/Frameworks/ffmpegkit.framework验证框架签名有效性,确保无签名损坏或配置错误。
4. 检查Mac Catalyst分发的安全配置
- 在Build Settings中搜索
Enable Hardened Runtime,确保Mac Catalyst目标的该选项设置为YES,同时在Signing & Capabilities中添加Hardened Runtime权限,检查是否存在权限限制导致框架加载被阻止。 - 若启用了
App Sandbox,可暂时关闭该配置进行测试,确认是否是沙箱策略限制了框架加载。
5. 重新编译适配Mac Catalyst的FFmpegKit
- 若使用预编译的FFmpegKit框架,可能存在Mac Catalyst适配缺陷。尝试从官方源码重新编译,编译时指定Mac Catalyst的目标架构(x86_64和arm64),确保编译产物完全适配Mac Catalyst环境。
内容的提问来源于stack exchange,提问作者STerrier
相关产品推荐
相关产品推荐

