Многоцелевая библиотека отлично работает с SPM, но не работает «без такого модуля» при сборке с помощью CocoaPods.
Я добавляю поддержку CocoaPods в библиотеку Swift, ранее доступную только через SPM. Библиотека состоит из двух целей, одна из которых зависит от другой.
В
MyLibrary
исходные файлы, я
import MyLibraryProtocols
, и он отлично работает, когда библиотека интегрирована с использованием SPM. Однако проверка подспецификации CocoaPods (
pod spec lint
) происходит сбой со следующей ошибкой:
- ERROR | [MyLibrary/MyLibrary] xcodebuild: MyLibrary/Sources/MyLibrary/<REDACTED>.swift:9:8: error: no such module 'MyLibraryProtocols'
Кажется, что отдельные подспецификации, когда они интегрированы и построены, попадают в единую цель, поэтому явное выражение не требуется и, более того, не поддерживается. (Я могу ошибаться в этом, поскольку я не эксперт по 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
1 ответ
Решение, которое я нашел до сих пор, состоит в том, чтобы явно проверить, построена ли библиотека с использованием CocoaPods, с директивой компилятора и включать только
import
s, если это не так:
#if !COCOAPODS
import MyLibraryProtocols
#endif
В
COCOAPODS
Флаг добавляется в сборку автоматически.