Как сделать фреймворк в CocoaPods, который имеет несколько целей? - PullRequest
1 голос
/ 24 октября 2019

Я пишу фреймворк и мне нравится делить фреймворк на маленькие отдельные подмодули (цели). Apple предоставляет классное описание того, чего я хочу достичь с помощью CocoaPods:

Цели являются основными строительными блоками пакета. Цель может определить модуль или набор тестов. Цели могут зависеть от других целей в этом пакете и от продуктов в пакетах, от которых зависит этот пакет.

Я мог бы легко сделать это с помощью Swift Package Manager:

    targets: [
        .target(name: "Network"),
        .target(name: "Service", dependencies: ["Network"])
    ],

Iможно использовать import Network в цели Service, и это здорово, потому что они являются отдельными модулями, логика ясна.

Как этого добиться в CocoaPods и Carthage (я пишу фреймворк, а не финальныйприложение)?

Что я пробовал:

Подспец

Я пытался использовать Подспец :

  s.subspec 'Service' do |ss|
    ss.dependency 'MyFramework/Network'
    ss.source_files = 'Sources/Service/**/*.swift'
  end

  s.subspec 'Network' do |ss|
    ss.source_files = 'Sources/Network/**/*.swift'
  end

Это не работает так, как я хочу, потому что CocoaPods просто объединяет все файлы в одну структуру (просто разделяет его на отдельные папки), поэтому:

  1. Я получаю коллизии пространства имен.
  2. Неустранимая ошибка, когда я пытаюсь import Network внутри Service, потому что после pod install нет цели Network. Так что я не могу использовать тот фреймворк со Swift Package Manager. CocoaPods просто объединяет все в одну цель MyFramework, как я упоминал ранее.

Отдельные репозитории / pods

Это решение, но очень трудно поддерживать несколько отдельных репозиториев git и создавать отдельныесовершать и толкать. Я хочу держать все в одном репо.

...