Swift Package Manager, как добавить пакет как зависимость разработки? - PullRequest
1 голос
/ 09 июля 2020

Есть ли способ добавить пакет spm в качестве зависимости разработки?

Например, есть ли способ сделать что-то вроде developmentDependencies: { somePackage }.

(как мы может быть легко достигнуто в других менеджерах пакетов, таких как npm, pub, et c?)

Ответы [ 2 ]

1 голос
/ 03 августа 2020

На самом деле, я могу подтвердить 1 в Swift 5.2, что это возможно. SE-0226 определяет «Целевое разрешение зависимостей», что в основном означает, что SPM будет загружать только те зависимости, которые фактически требуются для используемой вами цели (ей).

Например:

// swift-tools-version:5.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "SwiftlySearch",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        .library(
            name: "SwiftlySearch",
            targets: ["SwiftlySearch"]
        ),
    ],
    dependencies: [
        .package(url: "https://github.com/nalexn/ViewInspector.git", from: "0.4.3")
    ],
    targets: [
        .target(
            name: "SwiftlySearch",
            dependencies: []
        ),
        .testTarget(
            name: "SwiftlySearchTests",
            dependencies: ["SwiftlySearch", "ViewInspector"]
        ),
    ]
)

Будет загружен только ViewInspector для целевой SwiftlySearchTests, а не для выпущенной библиотеки SwiftlySearch.

TL; DR: просто объявите зависимости только от цели, которые их используют, SPM выяснит все остальное.

1 Я только что протестировал это с помощью встроенного диспетчера пакетов в Xcode 11.6, который вел себя так, как ожидалось.

1 голос
/ 09 июля 2020

Нет, на данный момент нет. Это то, что я видел несколько раз обсуждавшимся на форумах Swift Evolution , это то, что я хотел бы, и я действительно думал, что видел некоторые новости об этом, но, увы, нет.

«Лучший» способ получить тот же эффект, что и сейчас, - это закомментировать ваши зависимости разработчика при выполнении сборок выпуска. Существует инструмент под названием Rocket , который включает в себя скрытие зависимостей разработчиков как часть этапов выпуска. Однако я не использовал его, так как вместо этого решил написать свои собственные сценарии. Мой пример - мой проект DiceKit , где файл Package.swift не включает зависимости от разработчиков, и когда моему CI нужны эти зависимости, я запускаю include_dev_dependencies.py сценарий перед тестированием и remove_dev_dependencies.py после тестирования.

Этот подход определенно не идеален и может не сработать для вас, но я надеюсь, вы сможете что-то выяснить. Удачи!

...