Xcode 13创建带第三方依赖的自定义Framework通过CocoaPods导入报符号缺失错误
问题解决步骤
- 校验依赖版本一致性
你编译testSDK时使用的Alamofire版本必须和podspec中声明的版本完全匹配,建议将podspec中Alamofire依赖的范围符~>删除,锁死精确版本:
- 校验依赖版本一致性
s.dependency 'Alamofire', '5.4.1'
避免用户项目中其他依赖拉高Alamofire版本导致API符号不匹配。
- 开启BUILD_LIBRARY_FOR_DISTRIBUTION配置
打包testSDK之前,在你的Framework项目的Build Settings中找到Build Libraries for Distribution,将值设置为YES。这个配置是Swift Framework实现二进制兼容的必需项,未开启的情况下,不同Xcode版本编译的产物会出现符号不匹配问题,本地同环境编译正常但跨环境集成就会报错。
- 开启BUILD_LIBRARY_FOR_DISTRIBUTION配置
- 校验Framework链接类型
确认你打包testSDK时,对Alamofire等第三方依赖的链接方式:
- 如果你是动态链接Alamofire(没有把Alamofire符号打进testSDK),podspec中声明Alamofire依赖是正确的,同时要确保打包时没有设置
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES为YES,避免符号重复。 - 如果你是静态链接Alamofire(已经把Alamofire符号打进testSDK),需要删除podspec中的Alamofire依赖声明,否则用户集成时会重复引入Alamofire导致符号冲突。
- 校验Framework链接类型
- 修正架构配置
删除podspec中如下两段配置:
- 修正架构配置
s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
该配置是旧版Xcode适配M1芯片的临时方案,Xcode 14及之后版本已经原生支持模拟器arm64架构,强制排除会导致架构不匹配引发符号缺失问题,替换为如下配置即可:
s.pod_target_xcconfig = { 'ONLY_ACTIVE_ARCH' => 'NO' }
- 清理缓存重新集成
用户集成前执行如下操作清空缓存:
- 清理缓存重新集成
- 清空Xcode Derived Data目录
- 执行
pod deintegrate删除旧的Pod配置 - 执行
pod cache clean --all清空本地Pod缓存 - 重新执行
pod install集成
内容的提问来源于stack exchange,提问作者Tolga İskender
相关产品推荐
相关产品推荐

