Многоцелевая библиотека отлично работает с 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, с директивой компилятора и включать только imports, если это не так:

      #if !COCOAPODS
import MyLibraryProtocols
#endif

В COCOAPODS Флаг добавляется в сборку автоматически.

Другие вопросы по тегам