Галоўная / Артыкулы / Выкарыстоўванне папак Native як выходных дадзенняў пад час запуску Expo Prebuild і CNG

Выкарыстоўванне папак Native як выходных дадзенняў пад час запуску Expo Prebuild і CNG

Як функцыя Continuous Native Generation дазваляе аплікацыі Expo выкорыстоўваць спецыяльныя натыўные модулі, плагіні для налаштавання і секрэты EAS без неабходнасці зберагаць змяны чы рэкамендаваць папкі iOS і Android.

1103 слоў

Працаваючы гады над проектамі на 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 створыць рэшту.
  • Для кожных змян у натыўных проектаў выкорыстоўваюць плагіны налашчэння, каб гэтыя змяны засталіся пасля перзгенеравання.
  • Чыстаце кэш Gradle або перзгенеравайце проекты за дапамойкой prebuild --clean, калі локальныя запускі выконваюцца з незрозумелымі проблемамі.
  • Храніце токены, такія як SENTRY_AUTH_TOKEN, у зменных сераўісу EAS, а не ў рэпазітарыі.
  • Калі натыўныя проекты ператвараюцца на выходны файлы запуску, увага команды знову звертаецца да коду React Native, плавных інтерфейсаў і функцый продукту.

    Спадні матэрыялы