пакет SDK для клиента React Native

Важно!

Прекращение поддержки Центра приложений Visual Studio запланировано на 31 марта 2025 г. Хотя вы можете продолжать использовать Центр приложений Visual Studio до полного прекращения его использования, существует несколько рекомендуемых вариантов, на которые можно перейти.

Узнайте больше о сроках поддержки и альтернативных вариантах.

Этот подключаемый модуль обеспечивает интеграцию на стороне клиента для службы CodePush, позволяя легко добавлять динамические обновления в приложения React Native.

Как это работает?

React Native приложения состоят из файлов JavaScript и любых связанных изображений, которые объединяются упаковщиком и распространяются в составе двоичного файла конкретной платформы (файла .ipa или .apk ). После выпуска приложения обновление кода JavaScript (например, исправление ошибок, добавление новых функций) или ресурсов образа требует перекомпиляции и повторного распространения всего двоичного файла, включая любое время проверки для хранилищ, в которых вы публикуете.

Подключаемый модуль CodePush помогает мгновенно получать улучшения продукта для конечных пользователей, сохраняя синхронизацию JavaScript и образов с обновлениями, выпущенными на сервере CodePush. Таким образом, ваше приложение получает преимущества автономной мобильной связи, а также "веб-как" гибкость загрузки неопубликованных обновлений, как только они получите.

Чтобы убедиться, что у конечных пользователей всегда есть действующая версия приложения, подключаемый модуль CodePush хранит копию предыдущего обновления, чтобы в случае случайной отправки обновления, включающего сбой, оно могло автоматически выполнить откат. Таким образом, вы можете быть уверены, что гибкость нового выпуска не приведет к блокировке пользователей, прежде чем у вас будет возможность отката на сервере.

Примечание

Любые изменения продукта, касающиеся машинного кода (например, изменение файла AppDelegate.m/MainActivity.java , добавление нового подключаемого модуля), не могут распространяться через CodePush и поэтому должны обновляться через соответствующие хранилища.

Поддерживаемые платформы React Native

  • iOS (7+)
  • Android (5.0 и более поздних версий)
  • Windows (UWP)

Мы стараемся поддерживать обратную совместимость подключаемого модуля с предыдущими версиями React Native, но из-за характера платформы и существования критических изменений между выпусками, возможно, вам потребуется использовать определенную версию подключаемого модуля CodePush для поддержки точной версии React Native вы используете. В следующей таблице показано, какие версии подключаемого модуля CodePush официально поддерживают соответствующие версии React Native:

версии React Native Поддержка версий CodePush
<0,14 Не поддерживается
Версия 0.14 Версия 1.3 (появилась поддержка Android)
версии 0.15-v0.18 Версии 1.4-1.6 (реализована поддержка ресурсов iOS)
версии 0.19-v0.28 версии 1.7-v1.17 (добавлена поддержка ресурсов Android)
версии 0.29-v0.30 версии 1.13–v1.17 (рефакторинг RN машинного кода размещения)
версии 0.31-v0.33 v1.14.6-v1.17 (рефакторинг RN машинного кода размещения)
версии 0.34-v0.35 v1.15-v1.17 (рефакторинг RN машинного кода размещения)
версии 0.36-v0.39 версии 1.16–v1.17 (обработчик рефакторного возобновления RN)
версии 0.40-v0.42 версия 1.17 (рефакторинг файлов заголовков iOS с использованием RN)
версии 0.43-v0.44 Версия 2.0+ (рефакторинг RN зависимостей uimanager)
Версия 0.45 версия 3.0+ (код диспетчера экземпляров с рефакторингом RN)
Версия 0.46 версия 4.0+ (код загрузчика пакета js с рефакторингом RN)
версии 0.46-v0.53 Версия 5.1+ (удалена неиспользуемая регистрация модулей JS)
версии 0.54-v0.55 Версия 5.3+ (интеграция подключаемого модуля Android Gradle 3.x)
версии 0.56-v0.58 Версия 5.4+ (обновленные версии RN для инструментов Android)
Версия 0.59 версия 5.6+ (код загрузчика пакета js рефакторинговался)
версии 0.60-v0.61 Версия 6.0+ (RN перенесена в автосвязь)

Мы работаем над тем, чтобы реагировать на новые React Native выпуски, но они иногда нарушают нас. Мы будем обновлять эту диаграмму с каждым выпуском React Native, чтобы пользователи могли проверка, чтобы увидеть нашу официальную поддержку.

Поддерживаемые компоненты

При использовании системы React Native ресурсов (например, с использованием require("./foo.png") синтаксиса) следующий список представляет набор основных компонентов (и свойств), которые поддерживают обновление упоминаемых изображений и видео с помощью CodePush:

Компонент Prop(s)
Image source
MapView.Marker
( Требуется react-native-maps>=O.3.2)
image
ProgressViewIOS progressImage, trackImage
TabBarIOS.Item icon, selectedIcon
ToolbarAndroid
(React Native 0.21.0+)
actions[].icon, logo, overflowIcon
Video source

В следующем списке представлен набор компонентов (и свойств), которые в настоящее время не поддерживают обновление ресурсов с помощью CodePush из-за их зависимости от статических изображений и видео (например, с использованием синтаксиса { uri: "foo" } ):

Компонент Prop(s)
SliderIOS maximumTrackImage, minimumTrackImage, thumbImage, trackImage
Video source

Мы обновим этот список по мере выпуска новых основных компонентов, которые поддерживают ссылки на ресурсы, чтобы пользователи знали, что именно они могут ожидать обновления с помощью CodePush.

Примечание

CodePush работает только с компонентами видео при использовании require в исходной опоре. Например:

<Video source={require("./foo.mp4")} />

Соответствие рекомендациям по магазину

Хотя Google Play и внутренне распределенные приложения (например, Enterprise, Fabric, Центр приложений) не имеют ограничений по публикации обновлений с помощью CodePush, App Store iOS и соответствующие рекомендации имеют более точные правила, о которых следует знать перед интеграцией решения в приложение.

Лицензионное соглашение программы для разработчиков Apple, в соответствии с параграфом 3.3.2, полностью разрешено по беспроводной сети обновления JavaScript и ресурсов - и в своей последней версии (20210607) скачать здесь это решение еще шире:

Интерпретируемый код может быть загружен в приложение, но только при условии, что такой код: (а) не изменяет основное назначение приложения, предоставляя функции или функции, несовместимые с предполагаемым и объявленным назначением Приложения, отправленным в App Store, (б) не создает магазин или онлайн-магазин для другого кода или приложений; и (c) не обходят подписывание, песочницу или другие функции безопасности операционной системы.

CodePush позволяет следовать этим правилам в полном соответствии, если отправленное обновление не значительно отклоняет ваш продукт от исходного App Store утвержденного намерения.

Для дальнейшего соблюдения рекомендаций Apple мы рекомендуем, чтобы App Store распределенные приложения не включили updateDialog параметр при вызове sync, так как в App Store Рекомендации по проверке написано, что:

Приложения не должны заставлять пользователей оценивать приложение, просматривать приложение, скачивать другие приложения или другие аналогичные действия для доступа к функциям, содержимому или использованию приложения.

Это не обязательно относится к updateDialog, так как это не заставит пользователя скачать новую версию, но, по крайней мере, вы должны знать об этом решении, если решите показать его.

Примеры приложений и начальных приложений

Сообщество React Native любезно создало несколько потрясающих приложений с открытым кодом, которые могут служить примерами для разработчиков, которые начинают работу. Ниже приведен список oss React Native приложений, которые также используют CodePush, и их можно использовать для просмотра того, как другие пользователи используют службу:

  • Приложение F8 — официальное приложение для конференций для F8 2016.
  • Кошачья охота за продуктами — клиент Android для Охоты за продуктами.
  • GeoEncoding — приложение от Lynx IT Digital, в котором показано, как использовать множество React Native компонентов и модулей.
  • Математические факты - приложение Академии Хана, которое помогает запоминать математические факты легче.

Кроме того, если вы хотите начать работу с React Native + CodePush и ищете удивительный начальный набор, вам следует проверка следующее:

  • Native Starter Pro

  • Пепперони

    Примечание

    Если вы разработали приложение React Native с помощью CodePush с открытым кодом, сообщите нам об этом. Мы будем рады добавить его в этот список!

Непрерывная интеграция и доставка

Помимо использования CodePush CLI для выпуска обновлений вручную, мы считаем, что важно создать повторяемое и устойчивое решение для непрерывной доставки обновлений в приложение. Таким образом, вам или вашей команде достаточно просто создать и поддерживать ритм гибких развертываний. Чтобы помочь в настройке конвейера CD на основе CodePush, ознакомьтесь со следующими интеграциями с различными серверами CI:

  • Azure DevOps — Azure DevOps (прежнее название — VSTS) также содержит расширения для публикации в Центре приложений и магазине Google Play , поэтому в целом предоставляется очень удобное решение для мобильных компакт-дисков.
  • Travis CI

Потребление TypeScript

Этот модуль поставляет свой *.d.ts файл в составе пакета NPM, который позволяет использовать import его, и получать intellisense в вспомогательных редакторах (например, Visual Studio Code), а также проверку типов во время компиляции, если вы используете TypeScript. По большей части это поведение должно работать не по умолчанию, однако, если вы указали es6 в качестве значения параметра компилятораtarget или module в файлеtsconfig.json, убедитесь, что для параметра nodeзадано значение moduleResolution . Это гарантирует, что компилятор TypeScript будет искать в node_modules для определения типов импортированных модулей. В противном случае при попытке импорта модуля вы получите сообщение об ошибке следующего react-native-code-push вида: error TS2307: Cannot find module 'react-native-code-push'.