Добавление пакетов Swift 3 в Xcode 8 с помощью диспетчера пакетов Swift

Я новичок в Swift и Xcode. Я использую macOS Sierra и Swift 3.

Для моих первых набегов на Swift я разрабатываю простой инструмент командной строки. Есть несколько пакетов Swift, которые я хочу использовать, и инструкции по установке для обоих пакетов на GitHub говорят об использовании диспетчера пакетов Swift, просто добавляя их в качестве зависимостей в файл манифеста пакета.

Я не могу понять, как это сделать в Xcode. Могу ли я просто создать файл package.swift в корне моего проекта? Выполнение этого и последующий запуск проекта, похоже, не работают, поскольку необходимые пакеты, похоже, не добавлены в мой проект.

Я делаю что-то неправильно?


person Garry Pettet    schedule 26.09.2016    source источник
comment
Какие пакеты вы пытаетесь установить?   -  person Do2    schedule 26.09.2016
comment
В частности, github.com/onevcat/Rainbow   -  person Garry Pettet    schedule 26.09.2016
comment
Установите через cocoapods! Смотрите руководство по установке на сайте cocoapods.   -  person Do2    schedule 26.09.2016
comment
@ Do2 Вопрос явно в пакетах Swift. Отвечать кому-то (в комментариях, не меньше), говоря, что нужно использовать что-то еще, бесполезно.   -  person Joshua Nozzi    schedule 31.03.2018


Ответы (2)


Xcode и SPM могут работать вместе, но, насколько я могу судить, вам нужно сделать один шаг в командной строке.

Поместите файл манифеста вашего пакета в тот же каталог, что и проект Xcode, а затем вызовите swift package generate-xcodeproj

Диспетчер пакетов извлечет ваши зависимости и перепишет файл .xcodeproj, чтобы ссылаться на них.

Он сохранит любой существующий источник, но структура каталогов будет перенастроена в соответствии с предпочтительным расположением SPM:

PROJECT_DIR
├── Sources
│   └── ProjectName
│       ├── YourCode.swift
│       └── YourOtherCode.swift
├── Dependencies
│   └── SomeDependency
│       ├── DependencyCode.swift
│       └── OtherDependencyCode.swift
└── Package.swift

N.B., я не тестировал это тщательно на живом проекте; учитывая тот факт, что в документации SPM по-прежнему написано WIP, убедитесь, что вы сделали недавнюю фиксацию.

person jscs    schedule 26.09.2016
comment
Спасибо. Работает шарм. +1 и за совет по безопасности! - person Garry Pettet; 27.09.2016
comment
Есть ли способ заставить SPM не изменять структуру каталогов внутри файла .xcodeproj? Я не слишком беспокоюсь о том, что все мои файлы находятся в папке Sources, но у меня также есть группы внутри навигатора, которые указывают на папку Sources, и я бы хотел, чтобы они остались нетронутыми. - person Rehat Kathuria; 14.10.2017
comment
Примечание для всех, кто выполняет эти шаги, затем получает ошибку компилятора no module foo found. Начиная с версии 9.2 Xcode предоставил мне два рекомендуемых изменения проекта, одно из которых заключалось в установке Swift 3 @objc Inference по умолчанию. После выполнения этих изменений моя цель распознала модуль внешней зависимости для импорта. - person palmi; 10.03.2018
comment
Спасибо за обновление, @Airuop. Давненько этого не делал; Я сделал себе задачу, чтобы попробовать и убедиться, что в ответе ничего не упущено. - person jscs; 10.03.2018

В дополнение к запуску swift package generate-xcodeproj мне пришлось собрать свой проект в Xcode, прежде чем я смогу использовать установленные пакеты.

person thSoft    schedule 15.12.2016
comment
Имеет смысл, поскольку менеджер пакетов загружает пакеты, а затем, чтобы использовать их, вы должны их скомпилировать. - person zirinisp; 12.01.2017