Я использую Cocoapods для управления зависимостями для моего проекта Swift. Я наткнулся на этот пакет, который не указан в Cocoapods. Вместо этого предлагается использовать Swift Package Manager. Тем не менее, всякий раз, когда я пытаюсь использовать диспетчер пакетов Swift, чтобы сделать что-то в принципе, он полностью разрушает весь мой проект.
Итак, чтобы выяснить, как использовать Swift Package Manager, я играю с ним в тестовом проекте.
Вот что я пробовал:
- Создайте новый проект из Xcode
Файл → Создать → Проект → Приложение Cocoa
Наименование продукта: basic-ssh-test
Это создает базовое приложение, которое загружает пустое окно, когда я нажимаю "Выполнить". Просто для удовольствия я добавил print("test")
к функции applicationDidFinishLaunching
в своем AppDelegate
поэтому окно отладки говорит "тест", когда я запускаю программу.
Теперь я хочу добавить пакет Shout
в качестве зависимости.
-
swift package init --type executable
Это создает следующие файлы:
Creating executable package: basic-ssh-test
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/basic-ssh-test/main.swift
Creating Tests/
Теперь я собираюсь добавить зависимость "Shout" к моему новому файлу Package.swift
:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "basic-ssh-test",
dependencies: [
.package(url: "https://github.com/jakeheis/Shout", from: "0.2.0")
],
targets: [
.target(
name: "basic-ssh-test",
dependencies: ["Shout"]),
]
)
И я буду зависеть от зависимостей:
-
swift package resolve
Это приводит к тому, что зависимости .build
каталог .build
:
Fetching https://github.com/jakeheis/Shout
Fetching https://github.com/jakeheis/CSSH
Fetching https://github.com/IBM-Swift/BlueSocket
Cloning https://github.com/IBM-Swift/BlueSocket
Resolving https://github.com/IBM-Swift/BlueSocket at 0.12.91
Cloning https://github.com/jakeheis/CSSH
Resolving https://github.com/jakeheis/CSSH at 1.0.3
Cloning https://github.com/jakeheis/Shout
Resolving https://github.com/jakeheis/Shout at 0.3.0
Теперь я восстанавливаю файл xcodeproj
:
-
swift package generate-xcodeproj
Теперь, когда я открываю файл xcodeproj
есть новая группа под названием " Sources
которой есть один basic-ssh-test
с единственным быстрым файлом в нем main.swift
с print("Hello, world!")
.
Код, который мне действительно интересен, теперь находится в синей папке с именем basic-ssh-test
. Все необходимые файлы все еще там, но вместо запуска моего приложения Xcode запускает файл main.swift
. Я могу сказать, потому что вывод отладки - "Привет, мир!". вместо "теста".
Я прочитал несколько руководств, в которых утверждается, что Swift Package Manager переместит мои исходные файлы и продолжит строить то же самое, что и раньше, но это явно не так.
В моих настройках сборки больше нет опции "Основной интерфейс", поэтому я не могу выбрать "MainMenu.xib" в качестве начальной точки приложения.
Это по сути то же самое, что происходит, когда я пытаюсь использовать Swift Project Manager с моим существующим проектом. Он тянет зависимости, но в основном игнорирует весь мой существующий проект и просто запускает код "hello world".
Как использовать диспетчер пакетов Swift для добавления зависимости к существующему проекту без игнорирования существующей кодовой базы?