问题描述
我将 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
标志会自动添加到构建中。