В жизни многих компаний, которые имеют и развивают свой стек библиотек и компонентов, наступает момент, когда объёмы этого стека становится сложно поддерживать.
В случае разработки под платформу iOS, да и в целом, экосистему Apple, есть два варианта подключать библиотеки в качестве зависимостей:
- Собирать их каждый раз при сборке приложения.
- Собирать их заранее, используя уже собранные зависимости.
При выборе второго подхода становится логичным использовать CI/CD системы для сборки библиотек в готовые к употреблению артефакты.
Однако, необходимость собирать библиотеки под несколько платформ или архитектур процессора в экосистеме Apple, зачастую, требует проводить не всегда тривиальные операции, как при сборке библиотеки, так и конечного продукта, который её использует.
На этом фоне, было сложно не заметить и крайне интересно изучить, одно из нововведений от Apple, представленное на WWDC 2019 в рамках презентации Binary Frameworks in Swift — формат упаковки фреймворков — XCFramework.
XCFramework имеет несколько преимуществ, в сравнении с устоявшимися подходами:
- Упаковка зависимостей под все целевые платформы и архитектуры в единый bundle из коробки.
- Подключение bundle в формате XCFramework, как единой зависимости для всех целевых платформ и архитектур.
- Отсутствие необходимости в сборке fat/universal фреймворка.
- Нет необходимости избавляться от x86_64 слайсов (slice) перед загрузкой конечных приложений в AppStore.
В этой статье мы расскажем, зачем был внедрён этот новый формат, что он из себя представляет, а также, что он даёт разработчику.