xcframeworks в 📦SPMПосле недавней 😀Mobius конференции, решил покопать в эту сторону, так как мне кажется, что пора туда углубиться и почувствовать всю мощь 💪 «бинарей»
Для начала я попробовал поискать скрипты в Github Gist, но не смог найти скрипты для сборки именно из SPM проекта. После начал искать решения вообще везде, в итоге нашел такие:
1️⃣ swift-create-xcframework - первый и самый популярный инструмент который можно найти.
В целом, работает стабильно хотя и имеет ряд ограничений. Однако есть одна большая проблема: отсутствие поддержки Swift 5.9. При попытке использовать на этой версии языка, получаем множество ошибок. Правда есть луч надежды - Pull Request, который должен это исправить, но у меня он тоже не заработал.
Покопавшись глубже, я понял: вся магия ✨ фреймворка состоит из того, что он генерирует Xcode проект и уже из него собирает xcframework.
Зная, что не так давно SPM получил нативную поддержку Xcode (с костылями 😭), это навело меня на мысль, что возможно есть реализация на основе этой поддержки.
2️⃣ Тред на forums.swift про генерацию через .dynamic Package
Если кратко, то собрать xcframework можно только если SPM пакет имеет тип "
.dynamic". И основное что нам нужно сделать - добавить этот тип к библиотеке в Package.swift. Дальше остается только запустить генерацию через xcodebuild.3️⃣ Tuist с прогревом
Tuist имеет возможность прогревать запуск, что на самом деле генерирует xcframeworks. За это отвечает команда tuist warm. Пока для меня самое работающее решение с двумя НО. Команда warm закрытая (без исходников). Некоторые пакеты не генерируются (swift-snapshot-testing). Внутри, как я думаю, тоже генерируется Xcode проект.
Получается есть всего два подхода:
👉 Генерация
Xcode проекта из Package👉 Добавление
.dynamic типа к Package🤔 Какой можно сделать вывод?
Я не нашел хорошего решения, чтобы собрать комплексные и сложные фреймворки не одним из способов, но в тоже время простые зависимости собираются любым из способов на ура.
#blog #tools
