Как добавить пакет Swift, который ссылается на классы в моем основном проекте XCode? - PullRequest
0 голосов
/ 17 апреля 2020

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

Одно из состояний включает код, который ссылается на классы и переменные, определенные в другом моем проекте, который импортирует этот пакет. Эти разделы кода являются моей личной версией библиотеки со специальной функциональностью, определяемой c для моего проекта. Другое состояние отключает эти разделы кода и включает код, который позволяет использовать пакет в качестве библиотеки для общих публикаций c.

. Я пытался сделать это с помощью макросов препроцессора для поворота разделов. кода вкл и выкл. Следующий флаг определен в пользовательской ветви моего пакета, которую я использую, когда добавляю этот пакет в другой проект:

(файл Package.swift в моем пакете swift)

swiftSettings: [
  .define("FULL_WEEKDAY_PICKER"),
]),

(код в моем быстром пакете)

#if FULL_WEEKDAY_PICKER
// use code referenced in my other project
#else
// do other thing
#endif

Однако это не работает, и я получаю ошибки, потому что мой пакет не знает код в моем другом проекте. Моей первой идеей было добавить его в качестве локальной зависимости к этому пакету. В моем проекте есть репозиторий git.

dependencies: [
    // Dependencies declare other packages that this package depends on.
    .package(path: "../HueCircadianSchedule"), // <--- name of my other project
],

.target(
    name: "DayOfWeekCollectionView",
    dependencies: ["Sol"], //<--- target of my other project

Но даже добавление этих настроек приводит к сбою Xcode для меня, поэтому я не думаю, что это правильный шаг.

В качестве альтернативы, Я попытался перетащить пакет в другой проект. Я не получаю никаких ошибок в своем пакете, но проект не знает о коде в пакете, который я только что добавил.

Как мне ссылаться на код, определенный в моем проекте, в моем пакете, а затем использовать это пакет в моем проекте? Нужен ли мне Package.swift в моем проекте? Должен ли я использовать другой подход к выполнению sh того, что я пытаюсь сделать? Вы можете посмотреть мои проекты здесь:

Мой проект

Мой быстрый пакет

1 Ответ

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

Похоже, ваша посылка не является отдельной отдельной посылкой. Измените его на истинный автономный пакет, т. Е. Либо переместите весь необходимый код из вашего другого проекта в пакет, либо разрешите пользователю пакета каким-либо образом расширять функциональные возможности пакета.

В основном вместо пакет, ссылающийся непосредственно на внешние компоненты, позволяет внешним элементам заявить о себе общим службам пакета. Например, определите протокол в пакете и объект (источник данных, пользовательский интерфейс, делегат или что-то еще), соответствующий протоколу в вашем проекте. Затем вы предоставляете эту вещь при использовании пакета, и пакет должен знать только интерфейсы, определенные в протоколе.

Или, альтернативно, рефакторинг пакета таким образом, что ему не нужно вызывать какие-либо внешняя вещь, а скорее внешняя вещь вызывает пакет.

...