SPM发布到CocoaPods验证podspec提示Bundle无module成员如何修复
错误原因
Bundle.module 是 Swift Package Manager 编译时自动生成的扩展属性,仅在 SPM 构建链路中存在。CocoaPods 没有默认生成该属性的逻辑,因此发布到 CocoaPods 执行构建校验时会找不到该成员。
修复方案
下面是通用兼容方案,可同时支持 SPM 和 CocoaPods 两种集成方式:
- 第一步:在你的库中新增
Bundle+Module.swift扩展文件,代码如下:
extension Bundle { static var currentModule: Bundle { #if SWIFT_PACKAGE return .module #else return Bundle(for: /* *替换为你库中任意一个公开类的.self* */) #endif } }
如果你库中没有公开类,可将
Bundle(for:)替换为Bundle(identifier: "你的资源包的Bundle ID")来获取对应包。
- 第二步:替换你项目中所有调用
Bundle.module的代码,统一改为调用Bundle.currentModule - 第三步:校验你的
.podspec配置,确保资源包声明正确,示例配置如下:# *替换YourPodName为你的库名,资源路径替换为你实际的资源存放路径* s.resource_bundles = { 'YourPodName' => ['Sources/YourPodName/Resources/**/*'] } - 第四步:本地执行验证命令确认问题修复:
pod lib lint YourPodName.podspec
验证通过后再重新执行pod trunk push即可。
可选替代方案
如果你不想新增扩展,也可以通过编译条件分支直接处理:
- 首先在
.podspec中新增编译条件配置:s.pod_target_xcconfig = { 'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => '$(inherited) COCOAPODS' } - 直接在用到
Bundle.module的地方增加分支判断:let bundle: Bundle #if COCOAPODS bundle = Bundle(for: YourClass.self) #else bundle = Bundle.module #endif
内容的提问来源于stack exchange,提问作者Amine El hajjaji
相关产品推荐
相关产品推荐

