微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多目标库与 SPM 配合良好,但在使用 CocoaPods 构建时失败并显示“没有此类模块”

如何解决多目标库与 SPM 配合良好,但在使用 CocoaPods 构建时失败并显示“没有此类模块”

我将 CocoaPods 支持添加到以前只能通过 SPM 提供的 Swift 库中。该库由两个目标组成,其中一个依赖于另一个

MyLibrary 的源文件中,我 import MyLibraryProtocols,当库使用 SPM 集成时它工作得很好。但是,CocoaPods podspec (pod spec lint) 的验证失败并显示以下错误

- ERROR | [MyLibrary/MyLibrary] xcodebuild:  MyLibrary/Sources/MyLibrary/<REDACTED>.swift:9:8: error: no such module 'MyLibraryProtocols'

似乎单独的子规范在集成和构建时最终会出现在单个目标中,因此不需要显式 import,而且也不支持。 (我可能误会了,因为我不是 CocoaPods 专家。)如果我删除import,库将毫不奇怪地停止使用 SPM。

如何将我的代码保存在不同的目标中,其中一个依赖于另一个,并添加对 CocoaPods 的支持

以下是声明目标/子规范的方式,以供参考:

targets: [
    .target(
        name: "MyLibrary",dependencies: ["MyLibraryProtocols"]
    ),.target(name: "MyLibraryProtocols"),]
s.default_subspec = "MyLibrary"

s.subspec "MyLibrary" do |library|
  library.source_files = "Sources/MyLibrary/**/*.{swift}"
  library.dependency "MyLibrary/MyLibraryProtocols"
end

s.subspec "MyLibraryProtocols" do |protocols|
  protocols.source_files = "Sources/MyLibraryProtocols/**/*.{swift}"
end

解决方法

目前我找到的解决方案是使用编译器指令明确检查库是否是使用 CocoaPods 构建的,如果不是,则只包含 import

#if !COCOAPODS
import MyLibraryProtocols
#endif

COCOAPODS 标志会自动添加到构建中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。