Как устранить ошибку перекрытия целевых источников Swift Package Manager

У меня есть репозиторий GitHub, представляющий собой проект Objective-C, который определяет несколько целей (по одной для каждой целевой ОС: macOS, iOS, tvOS и т. Д.). Эти цели используют большую часть файлов исходного кода проекта.

Я пытаюсь добавить в проект поддержку SPM, и в файле Package.swift я определяю совпадающие цели с источником path, ссылаясь на ту же папку, содержащую файлы исходного кода, общие для всех целей.

Когда я добавляю этот проект / пакет с «включенным SPM» в тестовый проект, который пытается использовать его в качестве зависимости через SPM, я получаю сообщение об ошибке, в котором говорится, что вторая цель в пакете зависимостей имеет перекрывающиеся источники с другой целью (первая тот, который использует те же общие файлы исходного кода).

Есть идеи, как решить проблему? Я бы предположил, что моя многоцелевая конфигурация с общими файлами исходного кода не так уж уникальна ...


person AKornich    schedule 05.02.2020    source источник


Ответы (1)


Я наконец понял, в чем проблема и как ее решить.

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

Следовательно, когда я пытался сопоставить все мои цели Xcode как похожие цели SPM (в то же время ссылаясь на одни и те же файлы исходного кода из нескольких целей SPM), это было неправильно с точки зрения SPM.

Правильное решение заключалось в определении единственной цели SPM в одном месте (пути) кодовой базы, и с этого момента все пошло хорошо.

Вот хорошее видео, которое хорошо объясняет концепции SPM и которое впоследствии привело меня к рабочему решению: Создание пакетов Swift

person AKornich    schedule 07.02.2020
comment
Не могли бы вы привести пример целевого файла для совместного использования? - person yo2bh; 28.02.2020
comment
вот манифест пакета, который, по крайней мере, позволяет собирать репо с помощью SPM (но этап упаковки все еще требует некоторой доработки): github.com/WideSpectrumComputing/rollbar-ios/blob/master/ - person AKornich; 04.03.2020