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

Rust编译iOS/Catalyst库构建XCFramework接入CocoaPods报动静库混合错误

错误原因

你遇到的错误是CocoaPods对XCFramework的强制校验规则导致的:

Unable to install vendored xcframework FooFramework for Pod BarProject, because it contains both static and dynamic frameworks.

CocoaPods要求XCFramework内所有平台的框架切片必须是完全相同的链接类型(全静态或者全动态),只要存在一个切片是静态、另一个是动态就会抛出该错误。你将iOS和Catalyst拆分打包后正常,就是因为两个独立XCFramework内部的切片类型各自统一。


修复方案

1. 统一Xcode项目的Mach-O类型配置

你拆分的两个Xcode项目(FooFramework_iOS、FooFramework_Mac)的Mach-O类型配置不一致,才导致生成的切片类型不同:

  • 分别打开两个Xcode项目,进入对应target的Build Settings页面
  • 搜索Mach-O Type配置项,两个项目统一设置为Static Library(你底层依赖的Rust编译产物是静态库,全静态配置可以避免运行时符号丢失、冲突问题)
  • 保持BUILD_LIBRARY_FOR_DISTRIBUTION=YES的配置不变

2. 预校验所有切片类型

生成三个XCArchive之后、合并XCFramework之前,执行命令校验每个framework的类型,确认全部统一:

# 校验iOS真机切片类型
file ./FooFramework-iOS.xcarchive/Products/Library/Frameworks/FooFramework_iOS.framework/FooFramework_iOS
# 校验iOS模拟器切片类型
file ./FooFramework-Sim.xcarchive/Products/Library/Frameworks/FooFramework_iOS.framework/FooFramework_iOS
# 校验Mac Catalyst切片类型
file ./FooFramework-macOS.xcarchive/Products/Library/Frameworks/FooFramework_Mac.framework/FooFramework_Mac

输出结果包含current ar archive即为静态库,所有输出一致后再执行合并XCFramework的命令即可。

3. Podspec补充声明

在你的Podspec中明确声明静态框架属性,避免CocoaPods自动识别出错:

s.static_framework = true
s.vendored_frameworks = 'FooFramework.xcframework'

内容的提问来源于stack exchange,提问作者arik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:57:00