Я пытаюсь перевести созданный мной Pod в Swift Package Manager (SPM), но не знаю, как перевести функцию subspec
из CocoaPods в SPM. Я знаю, что SPM предоставляет несколько целей, но, кстати, это не то же самое, что функция subspec
.
Скажем, у меня есть следующие спецификации:
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
, но также установит некоторые флаги для модуля. Таким образом, модуль Main
знает, что доступны дополнительные функции, и интегрирует их. Быстрый пример кода из подспецификации Main
:
func someFunction() {
// ... some code ...
#if EXAMPLE_WITH_COREDATA
callExtraCoreDataRelatedMethod()
#endif
// ... some code ...
}