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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:01