Галоўная / Артыкулы

Планаванне апдэйта до Expo SDK 58: iOS 27, React Native 0.88 та новыя інструменты.

Практычныя інструкцыі па викорыстоўванні версіі Expo SDK 58 beta: якія змены ў iOS 27 та React Native 0.88, якія функцыі ў прымэрнай версіі, і як безпечна перацягнуць систему.

Выдавец: REACTAPP.TOP18 хв чытання4162 слоў

Крыніцы: Expo SDK 58 Beta: What React Native Developers Actually Need to Know

Expo SDK 58 не визначаецца адзінам галоўным функцыяй. Усуперак гэтаму, адразу прыносіцца дужа довгі список змян: падтрымка iOS 27, React Native 0.88, шырэйшыя можлівасці для стварэння праектаў на Android, дышэцьяя вартасць вызоў натыўных модуляў, віджеты на галоўнам экране Android, інтеграцыя з Siri через App Intents, CLI для стварэння кодавых агентаў, болей развіты Expo Router, а таксама эксперыментальны трансфармер на базе Rust для Metro. Што да гіду, ён сортавае гэты список па практычным адзінаку, ўжо бы вы моглі зрозумець, якія змены паўзіюць на вашым кодбэсе, якія даўаюцца безкоштовна, якія ўсё яшчэ ў эксперыментальным стадіі, і як адключыцца паўнэйшую апдэйтаванне без нараблення проблем у продакшн-проектах.

Спрыяйце SDK 58 як бета-версію, таму што гэта так і ёсць

На момент напісання SDK 58 знаходзіцца ў бета-фазе, і Expo спакушаецца, што гэтая фаза будзе трываць прыбліжна тры-чатыры недзелі. Перад тым, як планаваць ўсё, што стосуецца даты выходу, пераканайцеся ў текущым статусе у логу змян Expo.

Періад бета-тэставання — гэта ідеальны час для тэставання: код вашага прыемніка, бібліятэкі трэціх сторон, спецыяльныя натыўныя модулі, процес складання і будь-які рукапісны натыўны код. Гэта не лепшы момент для адключэння новага SDK да прыемніка, які выкорыстоўваецца у працэсе, яшчэ перад выходам на выхідныя. Аднак для парадзейных прыемнікаў і внутрашняях інструментаў бета-версія ёсць спосабом з малым рызыкам, каб пазнакоміцца з тым, што будзе, і як можно раней выявіць проблэмы, пакуль ёшча є час іх выправіць.

iOS 27 і жыцёвы цикл на адной сцэне

Вялікі частак мотывацыі для стварэння SDK 58 — гэта iOS 27. Прыемнікі, скомпільаваныя з вядомасю iOS 27 SDK, выкорыстоўваюць жыцёвы цикл Apple, адаснованы на сцэне, і Expo пераробіў свою натыўную інфраструктуру па гэтым модэлю.

Калькольнік фактов дапамагае тут. У старэйшай версіі UIApplicationDelegate кантролаваў усю аплікацыю: адна вікно, адны набор калеў на запуск і роботу ў фарварднай частцы. Модель сцэны дзеліць гэтыя абавязкі, таму кожны экземпляр UI (сцэна) мае свой цыкл жыцця, які керуецца дэлегатам сцэны. Работа, якая раней знаходзілася ў дэлегате аплікацыі, такая як реакцыя на актывацыю аплікацыі чыста керуванне прыходзячымі URL-адрэсамі, можа быць перанесена ў калеў на рэгламент сцэны.

Для тыповага проекту Expo гэты переход павінен застацца непазначальным. Гэта мае значэнне, калі вы настраўлялі натыўныя часткі. Часты прыклад — дадатковая настаўка ў калеў на запуск дэлегата аплікацыі, напрыклад, метод на Swift, паказаны тут без выявлення сінтаксису:

func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions:
  [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
  // Custom initialization
  return true
}

Якщо ваш AppDelegate.swift містить значную кількість спецыяльнай логіки, частка з яе можа належаць до керування сцэнай, а не до адзіной глобальнай вікная прыемлікальніка. Expo рэкамендуе прачытаць іхаўніяя інструкцыі па міграцыі жыцёвага циклу сцэны, якщо вы мяніце дэлегатаат натыўнае прыемлікальніка.

Калькі проекты трэба рассмотрзець болей дакладна

Большасць прыемлікальнікаў Expo ніколі не запускаюць AppDelegate.swift, і для іх міграцыя павінна праходзіць без проблем. Аднак у большых прыемлікальніках з гадамі накаплюецца натыўны код, і самэ гэта ёсць джерелам рызыку. Рассмотрзіце адзёльна, чы ў вашам iOS-проекте є натыўная наладка для калькі з гэтых элементаў:

  • ініцыялізацыя SDK для аналітыкі
  • карэспандаванне глыбокіх і універсальных лінкаў
  • SDK для аутэнтыфікацыі
  • прыемліканні пуш-спавящых
  • SDK для натыўных платэжаў

Кожны з эых элементаў зазвычай підключаецца да функцый калектывацыі або URL-колбэкаў, якія саме і ўплываюць пад вплэтам модэлю сцэны. Трэба явна перапрацаваць гэтыя процесы, а не прыпускать, што успешная компіляцыя значыць, што аплікацыя працюе.

React Native 0.88 і строгая API TypeScript

Бета-версія SDK 58 прылучаецца да кандыдата на выпуск React Native 0.88. Таму апгрэйд Expo значыць неабходнасць урахоўвання ўсіх змян як у React Native 0.87, так і ў 0.88, а не толькі ў однай з версый.

Змена, якую вы, што верагодна, пазнаеце першай, — это строгая API TypeScript, якая звышае стандарты таго, што лічыцца як публічная API React Native. Галоўныя жертвы — это імпорты, якіе звертаюцца да внутршняях файлаў:

import Something from 'react-native/Libraries/...';

Прэграмы і бібліятэкі ўжо гады вяду такія глыбокія імпорты, зазвычай таму, што публічная точка входу не адкрывала таго, што ўсё-такі было неабходна. Гэта завжды работала ад случая: внутрашнія шляхі да файлоў могу зместіцца або зменіцца ў будзь-яй версіі без паведамлення. React Native зараз ставляе чыстую межу між публічнымі та прыватнымі модулямі, і кодавая база, заполненая глыбокімі імпортамі, должна спрыяць ўжыццю SDK 58 як сігналу да ўпорядкування іх. Якщо якая-небудзь бібліятэка ў вашай дрэва завыскаў выконвае такое, пераканайцеся, чы не існуе новейшай версіі, якая вже выправіла гэту проблему.

Удаленыя API, такія як InteractionManager

Дзеяныя старэйшыя API таксама зниклі, і InteractionManager — адны з тых, якія трэба шукаты. Код, який відкладае важку роботу пакуль анімазіі та інтеракцыі не завершуцца, часта выглядае так:

InteractionManager.runAfterInteractions(() => {
  loadHeavyContent();
});

Рэкамендаваныя альтернатывы — это стандартныя API для вызова пад час бездзейнасці:

requestIdleCallback(() => {
  loadHeavyContent();
});

Семантыкі схожыя, але не ідэнтычныя. InteractionManager чакаў, пакуль завершыцца рэгістрацыя адносаў, тады як requestIdleCallback запускае калбэк, калі у потока JavaScript є вольны час. У большасці случаў, калі трэба "завантажыць гэта пасля таго, як з’явіцца экран", этае разлік не мае значэння, але якщо вы павяржыліся на гэта, каб чакаць паводлівай анімацыі, пераканаўцеся ў працэсе на рэальным прыстрое.

У маленькам прыложэнні такая міграцыя зазвычай вядзецься швабро. У старэй прыложэнні з многама залежнасцямі выконайце апдэйт на спецыяльнай гілцы і дазвольце кампайляру TypeScript пераказаць усі проблемы, прычым вы нічога іншаго не чыніце. Памылкі кампайляра стануць вашым списакам пунктав для міграцыі.

Шырэйшыя процесы будавання Android

expo-modules-core тепер выклікаецца з ужаўванымі натыўнымі бібліятэкамі для Android. Раней чыстая кампіляцыя праграмы для Android займала значную частку часу на кампіляцыю коду на C++, ад якога залежаюць модулі Expo. SDK 58 прыбліжна відмовляецца ад большай часткі гэтага крока.

Па паказаннях самай Expo, калі на апарате Apple M3 Pro выкорыстоўваць порожню праграму на SDK 58, час кампіляцыі чыстай версіі для дэбагавання на Android зменіўся з апошніх 80 секунд да апошніх 39 секунд. Вашы показнікі будуць разнымі залежна ад розмеру проекта і апаратуры, але еконамія часу вырабляецца за рахунак абсалютнага прыбліжэння гэтага крока, таму гэта павінна бачыцца ў будзь-ям проекте, які выкарыстоўвае модулі Expo.

У сэрвісах CI корысть адчуваецца ў дзвайнае разы. Команда, якая кожны дзень стварае двадцать запитоў на падключэнне, кожны з якіх запускае процесы будовы для Android, платзіць за кожную такую процедуру будовы, а машыны CI часта запускаюцца з чыстых кэшаў. Збережэнне паловы хвіліны адной раз працоўна незначна. Але збережэнне часу пад час кожной локальной будовы, кожнай задачі CI, кожнай функцыйнае галузі і кожной будовы для выпуску разам даюць значны эфект з точкі зору часу і вычыслювальных ресурсаў. Скорасць будовы таксама є формай працоўных характерыстак, толькі яна мерыцца у хвілінах разработчыка, а не у частотах кадраў.

Дышэўнейшыя вызывы між JavaScript і натыўным кодам

Работа над пракцоўнымі характерыстакамі ў SDK 58 не обмежваецца толькі процесамі будовы. Expo таксама зменіў вартасць вызываў натыўных модуляѳ, пры чым большая частка парадку была атрыбутом iOS. Перадача дужых страк стала значна шырэй, а обявы, якія вяртаюцься асінхроннымі натыўнымі функцыямі, маюць меншы надтэраг.

Ёсць можласць скорыстацца гэтымі павылекамі без якіх-леба зменаў: існуючыя модулі Expo самыя ўзьмуць гэтыя павылекі пасля апдэйта.

Гэта ўсё болюць важліва для дапытак, якія часта пераходзяць з JavaScript у натыўны код. Разглядзім такі кал:

const result = await SomeNativeModule.processLargePayload(data);

Функцыя натыўнага коду можа выканаць свою роботу быстра, але кожны вызов все равно выклікае неабходнасць пераканваты аргументы у натыўныя типы і праз тое — у значэнні JavaScript. Якшо дапытак робіць такія вызовы тысячы разоў, напрыклад пад час обробкі потоку даных сенсараў або сінхронізацыі вялікіх пакетаў даных, нават незначныя заходы пад час кожнага пераходу даўаюць значны эфект.

Expo Modules 2.0: класы натыўнага коду заместо DSL

Для команд, якія пішуць свае сабскладныя модулі натыўнага коду, Expo Modules 2.0 ёсць аднай з найзначнейшых змян. На момент напісання ён знаходзіцца у бета-версіі як для iOS, так і для Android.

Чырвоныя API-і модуляў Expo апісваюць модуль за дапамою DSL: блока з вызначэнням, дзе вы прызначаеце функцыі, атрыбуты і запускі. Expo Modules 2.0 выкарыстоўвае болей традыцыйны падход. Вы пішаеце звычную класу Swift або Kotlin і анотаваеце елементы, якія павінны быть доступныя для JavaScript.

Практычны наследак — ваш код на натыўнай мове выглядае як справжні код на натыўной мове. Swift застаецца Swift, а Kotlin — Kotlin, без неабходнасці спачатку вучыцца чаго-небудзь спецыфічна для фрэймворку. Це зніжае бар’еры для разработчыкаў, якія знаюць платформу, але не Expo, і таксама дапамагае інструментам для кодавання на асаблівай інтэлекты, адколі ў их данных для навчання значна больш звычнага коду на Swift і Kotlin, чым коду на DSL Expo.

Існуе таксама аспект карыстоўнасці. Зв’язкі можна стварыць пад час будовы, замест таго каб яны рашаліся дынамічна пад час выканання, і тэсты Expo паказваюць значныя прыросты у калькольніках мікротэстаў. Мікротэсты ізольуюць аднае операцыю, таму яны рэдка калі даўаюць адпаведную прырост скорасці на рэвэле аплікацыі; яны не ўтвараюць праблему для перадзяловы дизайну вашай натыўнае архітэктуры самае по сабе. Якщо вы хочаце глыбэйшага разумевання таго, чаму статычныя зв’язкі ўсё прыгожэ, параджунак у Nitro Modules: як статычныя зв’язкі перавыпэльняюць React Native TurboModules раскрывае той самы прынцып. Тое, што выдзеляе Expo Modules 2.0, — гэта тое, што ён робіць модулі як простэйшымі у напісанні, так і быстрэйшымі адразу, што ёсць рэдкай комбінацыяй.

Віджэты на галоўнам экране ў Android

expo-widgets тепер падтрымлівае Android, што адкрывае можлівасці для стварэння новых продактов для разных аплікацыяў: прыстроёў для стежэння за прычынкамі, фінансавых інструментаў, аплікацыяў для доставкі, спортвых аплікацыяў, календараў і менеджэраў задач.

Аплікацыя для прычынакаў могла бы паказаць сегодняшні прыглед працы без неабавязковага ачынення. Фінансавая аплікацыя могла бы паказаць кароткі аптаварыс бюджэту з такім заглавлём:

Monthly Budget

і падыянне залишковай сумы па категоріях нижэй:

₹34,500 remainingFood        ₹8,200
Travel      ₹3,400
Shopping    ₹5,100

Менеджер задач мог бы паказаць тры найважнейшыя задачы дня прымусова на галоўнам экране.

У Android кожны элемент интерфейсу запускае свой саблет JavaScript на спецыяльным рантайме Hermes, падтрымлівае взаінаўстанне з корыстнікам і можа выкарыстоваць Material Colors, ў результате чаго гармоніюе з тэмай системы. Важна разумець прыроду гэтага окремага рантайма: элемент інтерфейсу не дзеліць памяць чы стан з аплікацыяй, якая зараз працуе, таму данні неабходна передаваць яму адразу, а не чытаць іх з внутрашняй базы даных аплікацыі. Для команд, якія працуюць на розных платформах, наявнасць элементаў інтерфейсу на обох платформах у экосістэме Expo адзёрввае ўсё больш прычын для падтрымкі окремых натыўных реалізацый.

App Intents: Siri, Shortcuts і Spotlight

expo-app-intents спаўнае аплікацыі Expo з системай App Intents ад Apple, якая ўтварае основу для калькі системных функцыяй:

  • Siri
  • Shortcuts
  • Spotlight
  • Apple Intelligence

Уявіце сабе менеджер задач. Зазвычай, каб завершыць задачу, трэба ачынуць дапрацоўку, знайсці вялікі элемент і нажаць на яго. Калі інтэнцыя ўвесь час доступна, корыстувач можа проста запытаць Siri:

"Завершыць аплодаванне дакументаў з ID."

Siri адначасова завершвае відпаведную задачу і запускае дзеянне, якое было заявленае вашай дапрацоўкай. Код на JavaScript прымае гэты запуск і апдэйтуе даны дапрацоўкі. У прыкладзе Expo гэта выконваецца без пераводу дапрацоўкі на передні план.

Шырэйшыя наследкі — гэта змена у спосабе структуравання мобільных дапрацоўак. Айконка дапрацоўкі больш не є едынственным пунктом входу. Дзеяння можа запускаться через Siri, прыборчык, пошук Spotlight або автаматызацыю Shortcuts корыстувача. Дапрацоўка становіцца сэтам можлівасцяў, якія аператывная система можа выклікваць там, дзе яны ўжытковы, і гэта варта прыняць у выважанні пад час проектавання функцый.

Адзін важлівы застерэжны: expo-app-intents на момент напісання знаходзіцца ў стадіі альфа. Эксперыментавайце з яным, але пакуль не ставіце на яго критычна для бізнесу робочыя процесы.

Expo UI прыбліжаецца да SwiftUI і Jetpack Compose

Expo UI продовжае паглęбляць свою інтеграцыю з SwiftUI і Jetpack Compose. SDK 58 додае прымітывы навігацыі для iOS у формате SwiftUI:

NavigationStack
NavigationLink
NavigationDestination
Toolbar

Этыя прымітывы адпавядаюць сабеўным элементам навігацыі у SwiftUI, таму вы отрымляеце натыўную навігацыю і панелі інструментоў, а не ўявленыя на JavaScript. У выданні таксама дадаюцца ўсё большыя компоненты Jetpack Compose і удосконалены ўжо існуючыя універсальныя компоненты, якія працуюць на розных платформах.

Іншы, менш значны, але неспадзевана корыстны практычны паследак: кожны компонент у документацыі Expo UI тепер супроводжваецца візуальным прыкладам. Без скріншотаў выбіранне кампонента інтерфейсу часта прыводзіць да фрустрацыі:

  1. Знайдзіце компонент, якій пасуея голас.
  2. Прачытайце інфармацыю пра яго параметры.
  3. Праўяжце його да экрана.
  4. Запускайце прыложэнне.
  5. Убачыце, што ў выходзе цэлкам не тое, калі вы сабралися.
  6. Пачніце занова, выбрав іншы компонент.

Відображэнне рендарованага компонента праз API скорачае гэты цыкл.

Device Hub і кераванне сімуляторамі через прыгледач

Xcode 27 заменяе Simulator.app на Device Hub, а Expo CLI разумее новы прабег работы. Expo таксама експериментуе з адзінаковым пакетам expo-device-hub, які стварае локальную панель керавання ў прыгледачы для вашых сімулятораў і эмулятораў.

З гэтай панелі керавання вы можете пераказваць:

  • жывы адбітак экрана прыстрою
  • спраўнасць CPU і памяці
  • трафік сеті
  • варыянты візуальнага выгляду, такія як режым светлай і темнай палаты
  • варыянты доступнасці

Вы таксама можете нажымать, прасуваць пальцамі та пісаць на прыстрое з браузера. Чыба прабаваць, установіце пакет і запускіце сервер разработчика:

npx expo install expo-device-hub
npx expo start

Якщо ваша робота абарачваецца постаяным перыяходам між рэдагувальнікам, тэрміналам, эмуляторам Android, сімулятаром iOS та окольнымі інструментамі аналізу, адчыненне часткі з гэтага ў одной вікназе браузера можа значна спрыяць павольнейшам розвітку.

Expo таксама працуе над EAS Simulator, які мае на меты запропанаваць падобны досвід за дапамою сімулятараў, размешчаных у хмаре, тады вам не патрэбна будзе установка Xcode чы Android Studio на машыне.

CLI, створаны для агентаў кодавання

Гэты дадатак чытна паказвае, куды прымкнуць інструменты для разработчикоў. Expo выдала экспэрыментальны пакет:

@expo/agent-cli

Агенты для кодавання сталквуюцца з труднасцямі, калі яму трэба выбраць, який з калькольных інструментаў выклікаць: Expo CLI, EAS CLI, expo-doctor і так далей, кожны з якіх мае свои флагі і формат выходных даных. Агент CLI аб’еднвае ўсія гэтыя інструменты пад адной цангавай інтэрфейсам. Наладжэнне яго для вашага проекту выглядае так:

npx @expo/agent-cli@latest agents:setup

Калькольныя каманды паказваюць гэю ідею. Першая з яных ёсць:

status

Яна пераканальваеся ў такіх рэчах, як сумеснасць з Expo Go, не запускаючы сам прыкладак. Наступная каманда ёсць:

dev

Яна запускае среду разработкі і намагаецца выбраць найшырэйшы шлях да працюючага прыкладку. Пасляпэльная каманда ёсць:

smoke

Яна запускае прыкладак, делае скріншот і зноў яго выключае.

Гэтыя пасляпэўныя каманды ёсць найболей цікавымі для аўтаматызаваных рабочых практык. Падазроўваючы, што агент можа дадаць экран налашоўкаў і паказваць, што аплікэйшн усё ўсё запускаецца, замест таго, каб прыпускать, што вымены ўсё правільна працуюць, агент можа запустыць пераканальны тэст і паглядзець на рынак. Це невялікі крок ад агентаў як генератароў коду да агентаў, якія можуць пераканацца ў сопрацоўнасці свайго коду, і самэ гэта ёсць адной з галоўных прычын іх практычнай цэні. Пакет являецца эксперыментальным, таму чакайце, што яго каманды будуць змінювацца.

Expo Router стабілізуе калькі функцыяй

У SDK 58 Expo Router атрымлеў значны апдэйт. Калькі функцыяй, якія раней былі эксперыментальнымі, тепер сталі стабільнымі:

  • data loaders – для запрашання дадзейнаў маршруту прычымоўваючы до адраса экрана
  • server-side rendering – для выдачы матэрыялу ў вебе
  • middleware – які працюе прычымоўваючы да таго, калі запит досягае маршруту
  • native tabs – падтрымваныя паліцамі табоў платформы
  • toolbars

У глыбі працы система навігацыі таксама была перапісана, ў результате чаго стан навігацыі стаў болей дэтерміністычным, тое значыць, што адной і той жа последовальнасць дзеянняў надзеямоўна даходзіць да аднаковага стану. Большасць дапытакоў не павінны зазначыць розніцу. Якщо вы створылі спецыяльныя навігаторы або імпортуеце код безпасцяверху з указанага падчынення, адказна прачытайце кансультатывныя інструкцыі па міграцыі:

expo-router/react-navigation

У інтэрнете тепер стандартам являюцца асінхронныя маршруты. Кожны маршрут можа быць раздзелены на самастоятельны фрагмент JavaScript і запрашаны, калі корыстнік перейдзе на яго, замест таго, каб код для кожнага экрана завантажалі ў момент першага загрузкі стораны. Для веб-дапытакоў, створанных на базе Expo Router, гэта є разумным стандартам, адколі саме час першага загрузкі зазвычай ўважаецца галоўным фактарам, які звертае ўвагу корыстнікаў. Памятайце, што гэта таксама значыць, што маршрут можа на короткі час загрузіцца пад час першага візіту, таму станы загрузкі ў інтэрнете заслуговуюць на шыраную пераглядку.

Эксперыментальны трансфармер на Rust для Metro

З тэхнічной точкі зору, гэта можа быть найцякавейшая змена ў выласці, хоць яна чыста эксперыментальная. Expo працюе над трансформаторам на JavaScript, напісаным на Rust пад назвай Noxcturnal, які створаны на базе інструментальнага комплексу oxc.

Значная частка часу, неабяжлівага для стварэння „холадных“ пакетаў у Metro, выкорыстоўваецца для трансформацый за дапамойкай Babel: парсінг кожнага файла, прыменэнне плагінаў і стварэнне выходных дадзеных. Замена гэтага крока на натыўны код на Rust дазволяе безпасэродна атакаваць самую дорогую частку процесу. У тэстах Expo трансформацыя адзінаковых модуляў была прыбліжна у тры разы шырэй, а стварэнне цэлых „холадных“ пакетаў — у два разы шырэй. Адна большая тэстовая аплікацыя з прыбліжна 5,500 файламі перайшла з 5,26 секунд на 2,46 секунд.

Вы можете ўвайсці ў гэты режым за дапамойкай флага эксперыментавання ў вашай настройцы:

experiments: {
  noxcturnalTransformWorker: true
}

З'ясавайце ўсі меры пры першым включэнні. Проекты, якія выкарыстоўваюць спецыяльныя плагіні Babel, настройкі або спецыялізаваныя трансфарматы, можа ўсё ж апіроцца на Babel, таму прышвартованасць залежыць ад таго, насколькі стандартны ў вас наладжаны сервіс. Усколькі гэтая функцыя ў тэставанні, яе працэс і настройкі могу змяніцца межы выданнямаў.

Гэты напрамак супарадна з шырэйшай екасістэмай, дзе інструменты для JavaScript, критычныя з точкі зору працэсавой скорасці, вялікі час вядуць з JavaScript на Rust. Expo зараз доследжвае той самы падход для Metro.

Менш непатрэбных перабудоваў натыўных компонентаў

Стандартная настройка генеравання «фінгерпринта» ў SDK 58 тепер — это настройка balanced. «Фінгерпринт» — это хэш усьго, што вплывае на стварэння натыўных компонентаў; калі ён змянюецца, інструменты Expo прыпускаюць, што патрэбны новы натыўны бінарны файл.

Гэта звучыць нудна, пакуль гэта не захоўвае вас ад перабудовы натіўнага коду праз змяну, якая ніколі не вплывала на сам код. Залежна ад налаштаванняў, змяненне чаго-небудзь, такога як версія прыложэння ў app.json, раней зменяла «фінгерпринт». Балансаваныя налаштаванні намагаюцца ігнораваць змяны, якія не маюць значнага плэна на натіўны час выканання. Рэзультат у практыцы прост: менш перабудоў, якія запускаюцца без прычыны, а значыць і менш непатрэбных стварэннях бінарных файлаў, калі вы павяржываетесь на «фінгерпринты», каб выбраць между апдэйтом праз сеть і новай версіяю з магазіна. Ніхто не деманструе такую функцыю, але всі з неё выгадваюць.

Меншыя практычныя павыленьні, пра якія варта знать

Пашто да галоўных пунктав, калькі модульных апдэйтаў можа быць значныя залежна ад вашага прыложэння:

  • expo-camera дадзе можлівасць сканавання калькунатак з колька стороніц, што ўжыткова для сканераў квітанцый, процэсаў аплоаду дакументаў, парабярання ідэнтычнасці (KYC) і кантролю витак.
  • expo-font падтрымлівае зменныя шрыфты на Android, iOS і у вебе.
  • expo-audio атрымлівае можлівасць кантролю экрана блокавання, які ведае плейлісты, а таксама запіс у форматах WAV/PCM.
  • expo-file-system дадзе больш API для гэнеравання хешаў і падтрымку адгляду дакументаў у натыўнай форме.
  • expo-notifications дадзе новыя функцыі, такія як адправка спавешчэнняў пра час на Android.
  • Інтэграцыя з PostHog можа прыўязваць інфармацыю пра версію EAS і ўзняткі да аналітычных запісаў.

Ні адна з гэтых функцый сама па сабе не вяліка значэнне для выдання. Разам яны паказваюць, насколькі шырокім стала падтрымка платформы.

Значныя змены, якія трэба пераглядзець пры апгрэйде

Апгрэйды ўсё час захоплівыя, пакуль праця над дапаможнай програмай не стоіць, таму не прыхіліся да гэтага раздзела. Перш чым пераводзіць рэальны проект у SDK 58, пераканайцеся ў наступным.

Глыбокія імпорты у React Native

Ашукайце ў базе кода гэты прыметнік пашы:

react-native/Libraries/

Кожны адпаведнік — это імпорт внутрэніх файлаў React Native, якія можа адхіліць Strict TypeScript API. Таксама ашукайце ў node_modules, або прынеймна перагляньце зависімасці, якія не працуюць, адтак як бібліятэкі є частым джерелам такіх проблем.

Удаленыя API-ы React Native

Пераканайцеся, што ні ваша дапаможная програма, ні яе завісімасці не вжываюць API-ы, якія былі удаленыя ў версіях React Native 0.87 і 0.88, такія як InteractionManager.

Спецыяльны код AppDelegate

Якщо проект для iOS містіць настаўленні каскаду жыцця на роўні натыўных кодаў, перагляньце іх у співставленні з каскадам жыцця, які ўтрэбовывае iOS 27.

Спецыяльная навігацыя ў Expo Router

Спецыяльныя навігаторы і імпорты з expo-router/react-navigation падаюць пад вплыв пераробленых внутрошняйх механізмаў; следзьце за адказамі па міграцыі.

Запіс у файловай системе

File.write() тепер ў асінхронным режыме. Код, які спакушаеся на тое, што файл будзе існаваць ў наступны момент, не будзе працаваць, якщо толькі не будзе чакаць на рэзультат вызову. Якщо вам дасканальна патрэбны сінхронныя дзеяння, перайдзіце на:

File.writeSync()

Версія Node.js

Версіі Node.js, якія падтрымляецца Expo, змяніліся. Пераканайцеся ў стане вашай локальной среды і образаў CI, перш чым прыпускайце, што неудачная будова — глюк Expo.

Безпечны спосаб працавання з апдэйтом

Не пачынайце з галоўной веткі для працы. Створыце спецыяльную ветку для міграціі і апдэйтуйце там:

npx expo install expo@next --fix

Тэг expo@next інсталюе бета-версію, а параметр --fix прыстосавае іншыя пакеты Expo да версій, сумесных з яю.

Спачатку тэставайце тыя функцыі, якія не ўражаюць вачэй, таму што самэўсёлкі ўжо звяртаюць на яны, калі ўсё ламаецца:

  • Чы гэты прыстанок вообща запускаецца?
  • Чы працююць процесы входу і аутэнтыфікацыі?
  • Чы корыстувальнікі можаць пераводзіцца между галоўнымі экранамі?
  • Чы глыбокія лінкі ведуць у правыя месца?
  • Чы прыходзяць упавядомленні?
  • Чы корыстувальнікі можаць завантажваць адпраўкі і файлы?
  • Чы платежы завершаюцца успэшна?
  • Чы версія для Android запускаецца без проблем?
  • Чы версія для iOS запускаецца без проблем?

Толькі пасля таго, калі гэтыя аспекты будуць працаваць, варта займіцца новымі функцыямі. Новыя API ўсёлякія — це круто для працы, а тэставанне на наявнасць бягункі дапамагае захаваць задоволенне корыстувальнікаў.

Куды працуе Expo

Якщо адмаўляцца да SDK 58 цэлым, напрамак мае большое значэнне, чым будь-яка адзінастая функцыя. Expo пачаўся як спосаб удобнейшага викорыстання React Native, і ён поступова стае цэлым платформам для стварэння прыстаноўкаў:

  • Expo Router для структуры і навігацыі ў дапытку
  • Expo Modules для аб’ектных API
  • EAS Build для стварэння дапыткаў
  • EAS Update для выклікання апдэйтаў
  • EAS Observe для манітарынгу у працэсе выконання
  • Expo UI для компанентаў інтэрфейсу
  • widgets і App Intents для інтэграцыі з аператывнымі системамі
  • інструменты agent для разработкі пад адказам АІ

Паралельна з гэтым Expo продовжае інвеставацыі ў інфраструктуру, якая разработчыкі відчуваюць ў кожны дзень: шырэйшае стварэння дапыткаў, дышчыя аб’ектныя вызывы, меншая колькасць перзастроек, лепшыя тунелі, кращыя інструменты сімулятора і, можабыць, шырэйшая упаковка. Нічога з гэтага не стварае вражаючых скріншотаў, але гэта палегчае ўседзённую работу. Чыба не бачыце шырэйшага адносу да таго, як гэта пазычвае месца Expo, адзірніце чаму выхад Shopify з React Native не становіць абараны для Expo.

Чы гэта трэба апгрэйдаваць зараз?

Для прыкладнай программы, якая выкорыстоўваецца у працэ, прабавайце яе раней чым зберагаць змяны. SDK 58 яшчэ находзіцца у бета-версіи, React Native 0.88 ўключаны як кандыдат на стабільную версію, калькі з новых API ў тэставанні або ў версіі alpha, і пакуль чакаюцца яшчэ выправленнія перед стабільным выпускам.

Для падпроекта, внутраньяго інструмента або гілкі для міграцыі, цяперашнее доследжэнне яго абсалютна вартуе часу, особліва якщо вам патрэбна падтрымка iOS 27 або хочацеся запрацаваць раней за іншыя з змянамі у React Native. Проблемы, якія вы знайдзеце пад час бета-тэставання, яшчэ можна задаць на адгукунак і выправіць перед стабільным выпускам, што набагато простае, чым шукаць іх пасля таго, як усі вже апгрэйдаваліся.

Едыны команды, якую трэба запам’ятаць, — гэта тая самая, з якой вы запускаеце процес:

npx expo install expo@next --fix

Запускайце яго на гілцы, а не на працоўнай версіи.

Ключовыя выводы

  • Змены, які з наявнасцю можу спанаваць апгрэйд, — это глыбокія імпорты, выдаленныя API-і такія як InteractionManager, спецыяльны код AppDelegate і спецыяльныя навігаторы Expo Router.
  • Апгрэйд таксама дае можлівасць быстрейшага стварэння проекта для Android, дешавейшых вызоў наатывных функцый і меншай колькасці перзапускаў праз фінгерпрінты.
  • Expo Modules 2.0, агент CLI, Device Hub і Noxcturnal transformer ўжо ў тэставанні або ў версіі beta; іх можна выкорыстоўваць, але яшчо не варта на іх пасляваліцца.
  • expo-app-intents знаходзіцца ў версіі alpha, а віджэты для Android дазволяюць командам з розных платформаў выкарыстоўваць функцыі галоўнага экрана.
  • Апгрэйдавайцеся на спецыяльным бранчы, спачатку працавайце з критычнымі трыбутамі работы прыстаноўкі, а новыя функцыі розглядвайце толькі пасля таго, як яны працаваць будуць.