Expo — это фреймворк и платформа для универсальных приложений React. Это набор инструментов и сервисов, созданных на основе React Native и нативных платформ, которые помогают вам быстро разрабатывать, создавать, развертывать и выполнять итерации для iOS, Android и веб-приложений с использованием одной и той же базы кода JavaScript/TypeScript.
18 января 2024 года состоялся релиз Expo SDK 50. SDK 50 включает в себя React Native 0.73.
Плагины Expo Dev Tools
Этот API предоставляет авторам библиотек основу для создания плагинов на основе браузера для отладки и взаимодействия с аспектами их библиотеки/приложения. Для проверки и демонстрации API было создано несколько плагинов для популярных инструментов: Apollo Client, TanStack Query, TinyBase, React Native Async Storage и React Navigation — и вы можете найти их в репозитории expo/dev-plugins . Узнать больше .
Новые и улучшенные API-интерфейсы SQLite и Camera.
Библиотека expo-sqlite/next была полностью переработана с целью обновления её API и соответствия зрелым аналогам, используемым в сети и Node.js. В обновленном API реализованы как синхронные, так и асинхронные методы, добавлена поддержка подготовленных операторов, обратных вызовов обновления и типа данных Blob, а также другие возможности. Версия SQLite теперь обновлена до 3.42.0 на обеих платформах, независимо от версий, поставляемых с операционной системой, что позволяет использовать расширения SQLite, такие как CR-SQLite. Также создан диалект Knex для expo-sqlite, предназначенный для тех, кто предпочитает использовать построители запросов. SQLite становится все более важным строительным блоком, особенно в свете растущих шаблонов, таких как архитектура локальных приложений. Команда продолжит активные инвестиции в развитие этой библиотеки. Дополнительную информацию о новом API SQLite можно найти здесь.
expo-camera/next: доступ к камере устройства — это фундаментальная возможность многих мобильных приложений, и разработчики Expo считают, что это должно быть как просто, так и надежно. Поэтому они взяли одну из наших старых и самых популярных библиотек и обновили ее с учетом лучших практик нативных платформ. Для большинства случаев использования ожидается, что expo-camera/next подойдет идеально. Для более сложных сценариев использования (например, обработки кадров) отличным вариантом является react-native-vision-camera. Узнайте больше о новом API камеры.
import { CameraView } from ‘expo-camera/next’; // Minimal example of using the new API, refer to types for more information on props export default function Camera() { return ( ); }Представлен @expo/fingerprint
Это — ответ на общий вопрос разработчиков React Native: «как узнать, совместим ли JavaScript-пакет приложения с конкретной сборкой моего приложения?».
@expo/fingerprint (CLI) или API генерирует отпечаток, представляющий уникальные характеристики проекта, и если этот отпечаток меняется, то вы знаете, что JavaScript-приложение, ориентированное на старый отпечаток, может быть несовместимо.
Попробуйте это через CLI: npx @expo/fingerprint путь/к/вашему/проекту, и узнайте больше в README, а также в README expo-github-actions. Интеграция первого класса в службы EAS будет доступна в будущем!
После того как вы создадите отпечаток, попробуйте изменить свой проект таким образом, чтобы это повлияло на вашу собственную среду выполнения, и используйте CLI, чтобы сравнить его и определить, что изменилось. Узнать больше. Expo Router v3
Это следующий крупный выпуск для универсальной маршрутизации на основе файлов и расширенной поддержки веб-приложений. В Expo Router v3 внесено множество исправлений ошибок и улучшений стабильности, улучшена документация, добавлена поддержка веба, тестирование и типы. Особенно стоит отметить, что в Expo Router v3 теперь есть экспериментальная поддержка создания универсальных серверных конечных точек с помощью API Routes. Подробный блог-пост, посвященный этому выпуску опубликован здесь.
EAS Build
Непрерывно внедряются улучшения в EAS Build. Вот несколько ключевых моментов с момента последнего выпуска SDK:
Теперь Xcode 15.2 является версией по умолчанию для macOS-воркеров. Узнайте больше.
JDK 17 и Ubuntu 20 теперь являются версиями по умолчанию для Linux-воркеров. Узнайте больше.
Теперь Node 18 является версией по умолчанию. Версия Node по умолчанию в EAS Build соответствует текущей версии поддержки с долгосрочной поддержкой, и 27 ноября 2023 года изменена версия по умолчанию с Node 16 на 18. Узнайте больше.
Улучшены предупреждения и ошибки. «Аннотации сборки» могут создать ощущение, что опытный инженер следит за вашей работой, чтобы помочь вам понять, почему возникают конкретные предупреждения и ошибки в вашей сборке, и что с ними делать. Узнайте больше.
Pre-warmed кеш CocoaPods для ускорения сборок. Все ваши сборки iOS будут немного быстрее, без каких-либо изменений с вашей стороны. Узнайте больше.
Выпущен Expo Orbit v1: Orbit для macOS делает установку и запуск сборок из EAS быстрее и проще. Узнайте больше.
…добавлена поддержка для Bun, EAS CLI теперь будет читать файлы .nvmrc для установки версии Node для ваших сборок (если не указано явно в вашем профиле сборки), eas build:run теперь принимает флаг —profile для фильтрации сборок, добавлена команда eas build:delete по запросу для поддержки определенных автоматизированных рабочих процессов, и продолжается улучшение предварительного просмотра полностью настраиваемых сборок, который должны сделать GA в ближайшие месяцы.
EAS Update
Новый, простой в использовании JavaScript API: в пакет expo-updates теперь включен новый хук useUpdates() (подразумевался в течение недели запуска в августе), который облегчит отслеживание состояния и взаимодействие с API обновлений. Этот API предоставляет удобный доступ ко всему, что вам нужно знать о состоянии обновлений в вашем проекте. Для получения дополнительной информации о типе возвращаемого значения, документации по useUpdates() и репозитории expo/UpdatesAPIDemo обратитесь к соответствующим ресурсам.
import { useUpdates } from ‘expo-updates’; export default function App() { const { currentlyRunning, availableUpdate, isUpdateAvailable, isUpdatePending, // and so on! } = useUpdates(); // etc.. }
Новые функции пользовательского интерфейса панели управления: Недавно были выпущены обновления для панели управления, которые позволяют пользователю: создавать новые каналы, удалять их, повторно публиковать обновления и удалять их. Подробнее узнайте здесь.
Откаты: Теперь есть возможность указать производственным приложениям откатиться к встроенному обновлению (JavaScript-приложение, созданное во время сборки) при следующей проверке обновлений. Это полезно в случаях, когда вы случайно развернули регрессию как первое обновление новой сборки и хотите вернуться к встроенному рабочему состоянию, а не пытаться развернуть исправление обновления поверх этого. Подробнее узнайте здесь.
Постепенные обновления: Теперь вы можете постепенно внедрять обновления для определенного процента ваших пользователей, чтобы минимизировать воздействие случайного введения ошибки в ваше производственное окружение. Подробнее узнайте здесь.
Поддержка базовых модулей Expo для tvOS и macOS
Теперь вы можете использовать API модулей Expo для создания собственных модулей для tvOS и macOS.
Другие нововведения
React Native версии 0.73 и React 18.2.0 (неизмененная с SDK 49) представляют собой значительное обновление. В этом релизе внесено множество улучшений, подробности которых можно найти в файлах React Native CHANGELOG, Release Notes и React CHANGELOG.
Плагин конфигурации expo-font теперь поддерживает нативное добавление шрифтов в ваше приложение. Это может быть полезно для загрузки шрифтов во время выполнения с использованием Font.loadAsync или useFonts, чтобы избежать перекомпиляции бинарного файла приложения. Однако шрифты в приложении обычно изменяются редко, поэтому внедрение шрифта в нативный проект с помощью плагина конфигурации может помочь вам упорядочить часть кода асинхронной загрузки при запуске приложения перед сборкой. Узнайте больше.
Модуль expo-secure-store получил несколько новых улучшений. По запросам пользователей были введены синхронные функции getItem и setItem! Узнайте больше об изменениях в changelog.
Модуль expo-dev-client теперь по умолчанию загружает самый недавно открытый проект при запуске сборки разработки. Если сервер разработки недоступен, он возвращается к экрану запуска. Узнайте больше.
Добавлена команда npx expo run. Теперь Expo CLI будет предлагать вам выбрать целевую платформу, если она не указана явно в команде. Это небольшое улучшение, которое согласуется с пользовательским интерфейсом npx expo run с eas build:run. Вы также можете использовать npx expo run android или npx expo run ios в качестве альтернатив run:android и run:ios.
— npx expo run ? Select the platform to run › — Use arrow-keys. Return to submit. ❯ Android iOS
Команда «npx expo install —fix» теперь обновляет пакет Expo до последней версии. Разработчики регулярно обновляют Expo SDK с помощью этой команды, но пакет expo не обновляется автоматически. После обновления до SDK 50, флаг —fix обновит все пакеты Expo SDK, включая expo.
Теперь доступен инструмент обновления для нативных проектов. Если вы используете CNG, это не относится к вам. Для облегчения обновления нативных проектов с использованием Expo Modules создан аналог инструмента для CLI React Native. Он теперь доступен в документации под названием «Native project upgrade helper».
Веб-разделение пакетов с помощью Metro теперь включено по умолчанию.
Улучшены сообщения об ошибках и удаление кода. Expo CLI теперь предоставляет полные стек-трейсы для ошибок на основе компонентов, оптимизирует неиспользуемый код для конкретной платформы и быстрее трансформирует при упаковке для Hermes. Экспорт статических веб-сайтов теперь более чем в 2 раза быстрее!
Встроены стандарты URL и URLSearchParams. Теперь для использования многих библиотек на npm, где предполагается наличие API URL, не требуется полифилл (как ранее с библиотекой react-native-url-polyfill).
Улучшена поддержка изолированных модулей. Теперь можно использовать pnpm или npm —install-mode=isolated для сборок локальной разработки.
В предварительной версии доступен экспериментальный пользовательский интерфейс отладчика React Native JS. Совместная работа с Meta привела к унификации опыта отладки в React Native, и инфраструктура, поддерживающая этот новый пользовательский интерфейс отладчика, также является основой отладчика JS, встроенного в Expo CLI.
Заметные критические изменения
Обновления в Android SDK 34, AGP 8 и Java 17. Требуется установка JDK 17 для локальной сборки проекта.
Минимальная поддерживаемая версия Android увеличена до 6 (API 23), а минимальная версия iOS для развертывания — до 13.4.
Expo CLI и React Native теперь требуют Node 18+.
В Expo SDK 50 прекращена поддержка классических обновлений, рекомендуется использовать EAS Update.
@expo/vector-icons обновлен до react-native-vector-icons@10.0.0, добавлена поддержка FontAwesome6 и изменены некоторые имена иконок.
Большинство JavaScript API expo-updates теперь недоступны в Expo Go и dev-сборках с expo-dev-client.
React Native 0.73 перешел с Java на Kotlin для Android Main* классов.
ProgressBarAndroid и ProgressViewIOS удалены в 0.73.
При использовании Expo Router v3 beta обратитесь к разделу Breaking Changes.
🧹 Expo Go: удалены SDK 47 и 48.
Регулярно выпускаются новые версии SDK с низким использованием для сокращения числа версий, которые поддерживает Expo Go. Это означает, что проекты на SDK 47 и 48 больше не будут работать в последней версии Expo Go, но будут функционировать нормально в остальных случаях. Для устройств Android/emulators или симуляторов iOS можно установить более старые версии Expo Go. Узнайте больше.
➡️ Обновление вашего приложения
Вот как обновить ваше приложение до Expo SDK 50 с версии 49:
Обновите EAS CLI до последней версии (если вы его используете):
npm i -g eas-cli
Установите новую версию пакета Expo:
npm install expo@^50.0.0
Обновите все зависимости, чтобы они соответствовали SDK 50:
npx expo install —fix
Если в вашем package.json есть какие-либо разрешения/переопределения, убедитесь, что они все еще необходимы. Например, вам следует удалить переопределения Metro и Metro-Resolver, если вы добавили их для expo-router в предыдущей версии SDK.
Проверьте наличие возможных известных проблем:
npx expo-doctor@latest
Подробнее в блоге Expo.
Источник: habr.com