Swift 像 CocoaPods 一样包含子模块的包
Swift package with submodules like in CocoaPods
我正在尝试将我正在创建的 Pod 转换为 Swift 包管理器 (SPM),但不知道如何将 subspec
功能从 CocoaPods 转换为 SPM。我知道 SPM 提供了多个目标,但据我所知,这与 subspec
功能不同。
假设我有以下 podspec:
Pod::Spec.new do |s|
s.name = 'Example'
...
# main spec
s.subspec 'Main' do |ss|
ss.source_files = 'Source/Main/**/*.swift'
ss.pod_target_xcconfig = {
'SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]' => 'DEBUG'
}
# dependencies
ss.dependency 'CocoaLumberjack/Swift'
end
# coredata
s.subspec 'CoreData' do |ss|
ss.source_files = 'Source/CoreData/**/*.swift'
ss.pod_target_xcconfig = {
'SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]' => 'EXAMPLE_WITH_COREDATA',
'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'EXAMPLE_WITH_COREDATA'
}
# dependencies
ss.dependency 'Example/Core'
ss.dependency 'MagicalRecord', '> 2.3'
end
end
如果开发者依赖于 CoreData
子规范,它会自动包含 Main
子规范,但也会为 pod 设置一些标志。这样,Main
pod 就知道有额外的功能可用,并将其集成。 Main
子规范中的代码快速示例:
func someFunction() {
// ... some code ...
#if EXAMPLE_WITH_COREDATA
callExtraCoreDataRelatedMethod()
#endif
// ... some code ...
}
Swift 包管理器尚不支持此功能(根据其他目标的使用方式自定义目标的行为)。
如果你有一个你想要这样做的包,现在你必须通过某种运行时注册来完成它,其中 CoreData
模块将向 Main
模块注册事实它需要其他一些行为。
我正在尝试将我正在创建的 Pod 转换为 Swift 包管理器 (SPM),但不知道如何将 subspec
功能从 CocoaPods 转换为 SPM。我知道 SPM 提供了多个目标,但据我所知,这与 subspec
功能不同。
假设我有以下 podspec:
Pod::Spec.new do |s|
s.name = 'Example'
...
# main spec
s.subspec 'Main' do |ss|
ss.source_files = 'Source/Main/**/*.swift'
ss.pod_target_xcconfig = {
'SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]' => 'DEBUG'
}
# dependencies
ss.dependency 'CocoaLumberjack/Swift'
end
# coredata
s.subspec 'CoreData' do |ss|
ss.source_files = 'Source/CoreData/**/*.swift'
ss.pod_target_xcconfig = {
'SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]' => 'EXAMPLE_WITH_COREDATA',
'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'EXAMPLE_WITH_COREDATA'
}
# dependencies
ss.dependency 'Example/Core'
ss.dependency 'MagicalRecord', '> 2.3'
end
end
如果开发者依赖于 CoreData
子规范,它会自动包含 Main
子规范,但也会为 pod 设置一些标志。这样,Main
pod 就知道有额外的功能可用,并将其集成。 Main
子规范中的代码快速示例:
func someFunction() {
// ... some code ...
#if EXAMPLE_WITH_COREDATA
callExtraCoreDataRelatedMethod()
#endif
// ... some code ...
}
Swift 包管理器尚不支持此功能(根据其他目标的使用方式自定义目标的行为)。
如果你有一个你想要这样做的包,现在你必须通过某种运行时注册来完成它,其中 CoreData
模块将向 Main
模块注册事实它需要其他一些行为。