Пропустить перекомпиляцию 70+ ... Заметка
Сообщество RSS DEV

Пропустить перекомпиляцию 70+ пакетов iOS на каждой сборке

Expo SDK 56 значительно ускоряет время чистой сборки для iOS за счет внедрения предварительно скомпилированных XCFrameworks для модулей Expo. Ранее каждая чистая сборка перекомпилировала ядро React Native, модули Expo и сторонние библиотеки из исходного кода. Теперь ваше приложение напрямую связывает эти предварительно скомпилированные двоичные файлы, что значительно ускоряет разработку и сборки EAS без какой-либо конфигурации. Эта инициатива также знаменует собой начало перехода от устаревшей системы зависимостей CocoaPods к современному менеджеру пакетов Swift (SPM) от Apple. Предварительно скомпилированные XCFrameworks — это формат Apple для распространения предварительно скомпилированных нативных библиотек, устраняющий избыточную локальную компиляцию. Это обновление решает двойную проблему зависимости от устаревшего CocoaPods и медлительности нативных сборок. CocoaPods, устаревшая инфраструктура на основе Ruby, приближается к концу своего жизненного цикла, что делает переход на SPM критически важным для обеспечения будущей совместимости. Медленные нативные сборки, особенно в CI и крупных проектах, смягчаются, поскольку компиляционная работа перемещается раньше в конвейер, а фреймворки компилируются один раз и повторно используются. Реализация этого была технически сложной из-за строгих требований к модульности XCFrameworks, что резко контрастирует с разрешительной средой CocoaPods. Основные трудности включали рефакторинг публичных интерфейсов для удаления незаконных экспортов заголовков, разрыв циклических зависимостей Swift-Objective-C и разделение деревьев исходного кода для соответствия строгим правилам владения SPM. Чтобы преодолеть разрыв с существующей структурой заголовков React Native, команда внедрила наложения виртуальной файловой системы Clang (VFS), позволяющие компилятору видеть виртуальную, модульную компоновку без физической реорганизации. Улучшения времени сборки существенны: предварительно скомпилированное ядро React Native сокращает время сборки примерно на 44%, модули Expo — еще на 10% (всего 50%), а сторонние библиотеки — еще на 15% (всего 65%). Для управления сложностью манифестов SPM были разработаны новые инструменты для автоматической генерации файлов Package.swift, структур исходного кода и графов зависимостей. Переход поддерживает сосуществование, позволяя разработчикам при необходимости отключать предварительно скомпилированные модули, в то время как экосистема постепенно отказывается от CocoaPods. Эта миграция инфраструктуры является частью более широких усилий по модернизации в Expo SDK 56, направленных на ускорение нативных сборок, создание более чистой модульной архитектуры и более глубокую интеграцию с экосистемой разработки Apple. Следующие шаги включают стабилизацию совместимости, расширение охвата пакетов, проверку производительности и сотрудничество с React Native upstream. Этот переход является монументальным шагом к более масштабируемому будущему разработки React Native на платформах Apple, обещая более быстрые сборки, улучшенные инструменты и, в конечном итоге, мир без CocoaPods.