Выкарыстоўванне папак Native як выходных дадзенняў пад час запуску Expo Prebuild і CNG
Як функцыя Continuous Native Generation дазваляе аплікацыі Expo выкорыстоўваць спецыяльныя натыўные модулі, плагіні для налаштавання і секрэты EAS без неабходнасці зберагаць змяны чы рэкамендаваць папкі iOS і Android.
Працаваючы гады над проектамі на React Native у рамках Expo, команды сталкваліся з аднаковай проблемай: калі проекту была патрэбна спецыяльная натыўная модуля, аудыяфайл у фоне чы ўстаткаванне SDK ад партнера, адпаведным рашэнням быў expo eject, і тады праект на JavaScript раптам стаў мяць полныя каталогі ios і android. Ад таго часу команде таксама давалася задача адтулькавання CocoaPods, рэдагавання build.gradle і адлучвання проблем у Xcode. Тэхналогія Continuous Native Generation (CNG) і Expo Prebuild усунулі гэты компроміс. У гэтым нарадніку пояснюецца, як працуе гэты падход, як плагіны для налашчання заменяюць ручную правку натыўных кодаў, як вярнуцца да работоспабельных локальных версій для Android і як перадаць секрэтныя даны ў хмарныя процесы будавання без іх зберагання.
Натыўны код як артыкул будавання
CNG стоіць на адной прынцыпе: натыўныя проекты — гэта тое, што вы генеруеце, а не тое, што трэба падтрымваць вручную.
Выкананне команды npx expo prebuild стварае папкі ios і android на адной базе даных — у вашым файле app.json або app.config.js. Каманда Prebuild чытае гэтую настройку, прыменяе описаныя ў яй канфігурацыйныя змены і стварае готовыя, можна будучыя запрацаваць проекты для натыўных платформ.
Паколькі гэтыя папкі можна стварыць занова ў будзь-які момент, багато команд дадаюць папкі /ios і /android у файл .gitignore. Калі натыўная залежнасць опынуецца ў несправным стане, або калі вы апгрэйдзаете React Native, вы выметаеце гэтыя папкі і ствараеце іх занова. Кождадзённы вопыт ператвараецца з „Што хтось змяніў у проекте Xcode?“ на „Што задае настройка?“.
Это таксама задае адзін правіла модэля: калі ўжо створеныя фолдэры яе натыўнага коду, не трэба іх рэкламаваць вручную. Будзь-яя ручная змена зникае пад час наступнага прадзеявання. Якщо вам трэбна змена, яя павінна быць выражана ў налашчэннях.
Плагіны налашчэння заменяюць ручную правку натыўнага коду
Это паднімае яўны вопыт: як дадаць права ў AndroidManifest.xml або налаштаваць AppDelegate.mm, якщо створаныя файлы є недаступнымі?
Адпаведзь — плагіны налашчэння. Плагін налашчэння — это функцыя на JavaScript, якая запускаецца пад час прадзеявання і меняе натыўны проект у контролюемы, павтароўнімы спосабе. Аплікацыі з высокіми вялікімі трэбаваннямі да натыўнага коду, такія як обробка мовы ў рэальны час або відображэнне 3D-модэляў, завісяць ад бібліятэкаў, якім патрэбны глыбокія вязы з натыўнам кодам, і гэтыя бібліятэкі зазвычай прывозяць свои сабеўтары плагіны.
У зямест на рэдагаванні кода на мове аплікацыі, вы пераказываеце інфармацыю пра плагін і яго настройкі ў файле app.json. У прыкладзе нижэй викорыстоўваецца expo-build-properties, каб задаць для Android значэнне compileSdkVersion равнае 34, якое інакш бы знаходзілася ў файле Gradle:
{
"expo": {
"plugins": [
[
"expo-build-properties",
{
"android": {
"compileSdkVersion": 34
}
}
]
]
}
}
Пад час наступнага прадзеяння перед будовай плагін запісвае гэта значэнне ў створаны проект для Android. Паколькі змяну проста задаюць, а не застосоўваюць вручную, яна застаецца пасля кожнай перзапускання і будзе видна пад час адзірвання коду.
Падтрымка стабільных локальных будоў для Android
Expo Go чырвоны для ранней стварэння пратотыпаў, але ён уключае толькі встроеныя модулі, якія ўключаны разам з яным. Калі вы пачнёте вярнацца да спецыяльнага встроенага коду, вы тэставаеце прыладу за дапамою версій для разработкі, выкарыстоўваючы npx expo run:android або npx expo run:ios. Гэта ўсё бол важна для дапрынтакоў, якія выкаанаюць вельмі значныя задачы на самай прыладзе, такія як функцыі ШІ, дзе неабходна паўтарна пераканацца ў рэальной выдатнасі на прыладзе або эмулятары.
Інструментальная сяродовашчына для Android славіцца нестабільнымі кэшамі. Тыповая ситуацыя: вы дадаеце залежнасць, і наступны локальны запуск парадуе з незрозумелымі адказамі Java або Gradle. Прычыной зазвычай ёст тэрмінованы выход дадзеных запуску, а не ваш код.
Першы крок — чысты запуск. Зайдзіце у створаную дырэктарыю android, запустіце задачу Gradle “clean”, каб пазбавіцца кэшаваных дадзеных, а потым верніцеся да корневай дырэктарыі проекта і запустіце його зноў:
cd android
./gradlew clean
cd ..
npx expo run:android
Якщо проста чыстка не дапамагае, CNG прадстаўляе болей супэрнацыянальны варыянт: npx expo prebuild --clean цэлком вычышвае і перзаснавляе папкі з натыўным кодам, што ўсё ж безпечна, адтуды што ніч гэтым папкам не выкарыстоўваецца ручна. Увключэнне гэтых прыемаў у вашу рутыну зарабляе час на дэбагаванні.
Падача секрэтных даных для паветрабных запускаў EAS
CNG становіцца наявным пры саўместнай выкарыстоўцы з EAS (Expo Application Services) для паветрабных запускаў.
Возьмем монітарынг абэронаў. Продакшн-зялёныя програмы яго патрабуюць, а інтэграцыя з Sentry значыць неабходнасць аплодавання карточак выкарыстоўвання коду, для чаго трэба SENTRY_AUTH_TOKEN. Часта гэты токен павінен быў дасягаць кожнай среды запуска, заўсёды залишаючыся пахаваным у рэпазітарыі, што было складна кераваць.
За дапамою CNG і EAS вы прыўязываете плагін налаштавання Sentry да app.json і ніколі не зберагаеце токен. У замест на гэта вы рэгіструеце яго як зменную сераўнавальнай среды ў EAS за дапамою CLI, надаючы яму правы на прыгляд secret і дыяпазон проекта, так што ён будзе доступны пад час стварэння, але не будзе адображацца пасля гэтаго. Запускайце команду аднойчы, заменіўшы места для значэння на ваш рэальны токен:
eas env:create --name SENTRY_AUTH_TOKEN --value your_token_here --visibility secret --scope projecteas env:create --name SENTRY_AUTH_TOKEN --value your_token_here --visibility secret --scope project
Пад час стварэння ў хмаре EAS запускае процес prebuild для стварэння натыўных проектаў, плагін Sentry чытае секрэтную інфармацыю з сераўнавальной среды, налаштоввае натыўны SDK і заваносі карты выкарыстоўвання коду. Жадных натыўных файлаў і токенаў ніколі не падаецца пад кантроль версій. Точныя флагі eas env:create могу зменіцца между версіями CLI, таму, якщо команда будзе адхілена, пераканайцеся ў актуальной дасведчовай документацыі EAS.
Калі CNG трэба ўважна ставіцца
Модэль ўсёжы, але калькі ситуацыяў вымагаюць планавання:
- Бібліятэкі без плагінаў. Якщо натыўны SDK не мае плагіна для настройкі, можа знадобіцца самостайна напісаць невялікі локальны плагін замест таго, каб рэдагаваць створаныя файлы.
- Ўжытныя проекты з існуючым кодам. Аплікацыі, у якіх годзінны код рэдагаваўся вручную, не можна проста выдаліць — для майграцыі трэба спачатку перанесці кожную настройку ў файлы конфігурацыі.
- Дисцыпліна команды. CNG працюе толькі тады, калі всі ставяцца да
iosіandroidяк да рэштаўных элементаў. Адна прымітная змяненае ў Xcode будзе безследна выцерана пад час наступнай генерацыі.
Заключэнне
Expo Prebuild і CNG робяць складныя, прыменныя аплікацыі на React Native значна доступнейшымі, ператвараючы натыўныя слоі ў рэштаўны элементы:
- Заявіце трэбаванні да натыўных элементаў у
app.jsonабоapp.config.js, і нехай prebuild створыць рэшту.
prebuild --clean, калі локальныя запускі выконваюцца з незрозумелымі проблемамі.SENTRY_AUTH_TOKEN, у зменных сераўісу EAS, а не ў рэпазітарыі.Калі натыўныя проекты ператвараюцца на выходны файлы запуску, увага команды знову звертаецца да коду React Native, плавных інтерфейсаў і функцый продукту.
Спадні матэрыялы
- Праўеянне In-App Turbo Module ад початку да канца за дапамойкай React Native Codegen — Задаеце типаваную спэсыфікацыю, запускаеце кодгенераванне і рэалізуеце Turbo Module на iOS і Android з вяртанням рэзультатаў сінхронна, за дапамойкай Promise, калебаўакоў і механізмаў выпадкавых званняў.
- Пастая зміна тэмы ў React Native за дапамою Context і Hooks — Створыце прыстрой для змены тэмы ў React Native з викорыстаннем Context, useState і useEffect: навігацыя праз вкладкі, выбір тэмы, зберагаччаўка дадзеных у AsyncStorage і захіст пад час запуску.