Извините за смутное название.
Я пытаюсь создать пакет, который поможет мне использовать сторонние API облачного хранилища (например, Firebase Storage), добавив поддержку Combine
и т. Д. c. Этот пакет делает то же самое с CloudKit. Все компилируется нормально, но когда я импортирую модуль пакета в отдельный мой проект, в модуле явно отсутствуют некоторые публичные c символы ...
В частности, те, которые заключены в условие #if canImport(FirebaseStorage)
, Поскольку Firebase еще не поддерживает SwiftPM, эта часть пакета ведет себя так, как ожидается в самом проекте пакета; он просто пропускает компиляцию всего этого. Я подумал, что клиентский проект, который может импортировать этот модуль, скомпилирует его нормально.
В сторону: то, что я пытаюсь сделать, выглядит как необязательные зависимости. Я не хочу импортировать Firebase, чтобы использовать другие функции этого пакета. Я рассмотрел возможность разделения пакета на отдельные подпакеты, каждый из которых зависит от конкретной сторонней библиотеки, которую я хочу использовать. Я мог бы сделать это в любом случае. Но проблема остается в том, что Firebase еще не поддерживает SwiftPM (, хотя я слышал, что они близки ).
Моя проблема похожа на эта . Мой клиентский проект просто не видит условных символов, хотя он может импортировать Firebase
и FirebaseStorage
просто отлично! Я имею в виду, что в сгенерированном заголовке модуля они полностью отсутствуют, что не позволяет моему клиентскому проекту компилироваться, когда я их использую.
Мне кажется, что условие компиляции никогда не покидает объем зависимых целей пакета. Это тот случай? Или я что-то упускаю очевидное? Я всегда предполагал, что пакеты Swift просто импортируют и компилируют исходные файлы Swift в именованные модули, но теперь я думаю, что это не так.
Есть ли способ встроить код в пакет Swift, который компилируется только тогда, когда клиент может импортировать сторонний модуль, который еще не поддерживает SwiftPM? Или условная компиляция не работает таким образом?
РЕДАКТИРОВАТЬ: Вот документация Swift по условной компиляции, для справки.