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 ( <CameraView style={{ flex: 1 }} /> ); }Представлен @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 обновлен до [email=react-native-vector-icons@10.0.0,]react-native-vector-icons@10.0.0,[/email] добавлена поддержка 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 [email=expo-doctor@latest]expo-doctor@latest[/email]
Подробнее в блоге Expo.
Источник новости: habr.com