Swift Package Manager - исключить зависимость - PullRequest
0 голосов
/ 28 апреля 2020

У меня вторая мысль об использовании нескольких продуктов в SPM. Вот в чем дело.

Я предоставлю два продукта в упаковке. Один - «Инструмент», а другой - «Сеть инструментов». У первого есть несколько быстрых классов, ничего особенного, вообще никаких зависимостей. Второй также имеет некоторые быстрые логики c, но зависит от Alamofire lib.

Вот конфигурация:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
  name: "Tool",
  platforms: [.iOS(.v11)],
  products: [
    .library(name: “Tool", targets: [“Tool"]),
    .library(name: “ToolNetworking", targets: [“ToolNetworking"])
  ],
  dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", .exact("5.1.0"))
  ],
  targets: [
    .target(
      name: "Tool",
      path: "Sources",
      exclude: ["Networking"]
    ),
    .target(
      name: "ToolNetworking",
      dependencies: [“Tool", "Alamofire"],
      path: "Sources",
      sources: ["Networking"]
    )
  ],
  swiftLanguageVersions: [.v5]
)

Когда я хочу установить пакет, я могу выбирать между двумя. Если я выберу ToolNetworking, он также установит зависимость Alamofire.

Для продукта Tool Я хочу, чтобы SPM устанавливал только мой код, без зависимостей. Вот мой вопрос Как исключить Alamofire при установке только продукта Tool, поскольку я не определил поле dependencies?

Спасибо

1 Ответ

1 голос
/ 28 апреля 2020

Первым шагом будет обновление до Swift 5.2. Диспетчер пакетов Swift, поставляемый с Swift 5.2, начинает реализовывать именно это поведение (как описано в SE-0226 ).

Однако, поскольку он еще не полностью реализован, возможно, Xcode будет все еще проверь Alamofire. Это не должно связывать это в конце, все же. Поэтому, если вы используете только продукт Tool, в полученном двоичном файле не будет никаких следов Alamofire: -)

...