Устранение неполадок пакета SDK для React Native

Важно!

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

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

Файл React/RCTDefines.h не найден

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

Наш скрипт связывания поддерживает только стандартный способ связывания модулей pod, поэтому для решения проблемы:

  1. Замените зависимости в на Podfile относительные пути связывания:

    Перед следующей операцией.

    pod 'AppCenter/Analytics', '~> 1.14.0'
    pod 'AppCenter/Crashes', '~> 1.14.0'
    pod 'AppCenterReactNativeShared', '~> 1.13.0'
    

    После следующих операций.

    pod 'appcenter', path: '../node_modules/appcenter/ios'
    pod 'appcenter-analytics', path: '../node_modules/appcenter-analytics/ios'
    pod 'appcenter-crashes', path: '../node_modules/appcenter-crashes/ios'
    
  2. Запустите pod install из iOS папки.

  3. В AppDelegate.m замените import:

    Перед следующей операцией.

    #import <AppCenterReactNative/AppCenterReactNative.h>
    #import <AppCenterReactNativeAnalytics/AppCenterReactNativeAnalytics.h>
    #import <AppCenterReactNativeCrashes/AppCenterReactNativeCrashes.h>
    

    После следующих операций.

    #import "AppCenterReactNative.h"
    #import "AppCenterReactNativeAnalytics.h"
    #import "AppCenterReactNativeCrashes.h"
    
  4. Удалите зависимости AppCenter из проекта (щелкните правой кнопкой мыши зависимость > Удалить зависимость).

    • Выберите <YOUR_APP> ->Библиотеки и удалите следующие файлы:
      • AppCenterReactNative.xcodeproj
      • AppCenterReactNativeAnalytics.xcodeproj
      • AppCenterReactNativeCrashes.xcodeproj
    • Откройте параметры проекта и на вкладке Общие в разделе Связанные платформы и библиотеки удалите новые элементы, ссылающиеся на целевые библиотеки, удаленные на предыдущем шаге:
      • libAppCenterReactNative.a
      • libAppCenterReactNativeAnalytics.a
      • libAppCenterReactNativeCrashes.a
    • Измените пути поиска заголовков, чтобы удалить заголовки из проектов подключаемых модулей AppCenter React Native. Откройте параметры проекта и на вкладке Параметры сборки в разделе Пути поиска заголовков удалите следующие расположения для файлов заголовков:
      • $(SRCROOT)/../node_modules/appcenter/ios/AppCenterReactNative
      • $(SRCROOT)/../node_modules/appcenter-analytics/ios/AppCenterReactNativeAnalytics
      • $(SRCROOT)/../node_modules/appcenter-crashes/ios/AppCenterReactNativeCrashes

Если вы установили yarn на компьютере, react-native init {myapp} инициализирует приложение и устанавливает зависимости с помощью yarn , а не npm. Если при запуске react-native linkотображается следующее сообщение об ошибке , скорее всего, зависимости Центра приложений yarn add {package} устанавливаются из npm install {package} , а npmyarn не смешиваются во время установки.

Command `link` unrecognized. Make sure that you have run `npm install` and that you are inside a react-native project.

В этом случае выполните команду npm install и повторите попытку react-native link .

Ошибка сборки, например Файл AppCenterCrashes/MSACErrorReport.h не найден

React-Native 0.60 и более поздних версий

Вероятной причиной является конфликт между основными версиями пакетов из-за критического изменения в нашем пакете SDK для Apple.

  1. Убедитесь, что все appcenter пакеты используют одну и ту же основную версию. При необходимости обновите их с помощью npm install или yarn .

  2. Перейдите в папку ios проекта и удалите Podfile.lock и папку Pods .

  3. Запустите pod install --repo-update в папке ios .

  4. Убедитесь, что Podfile.lock содержит appcenter зависимости той же основной версии.

React Native ниже 0,60

Одной из возможных причин является работа react-native link без установленного CocoaPods .

Чтобы подтвердить причину, выполните react-native linkи в журналах проверка для следующей строки:

Could not configure AppCenter for iOS. Error Reason - spawn pod ENOENT

Эта строка находится в следующем разделе журналов:

Added code to initialize iOS AppCenter SDK in ios/TestApp/AppDelegate.m
Installing Cocoapods dependencies...
Could not configure AppCenter for iOS. Error Reason - spawn pod ENOENT
rnpm-install info Platform 'ios' module appcenter-analytics is already linked
rnpm-install info Platform 'android' module appcenter-analytics is already linked

Если вы видите эту ошибку pod , убедитесь, что команда CocoaPods доступна в переменной среды PATH системы.

После исправления установки CocoaPods выполните команду pod install в папке ios , чтобы исправить проект.

Если вы видите следующее сообщение об ошибке CocoaPods во время react-native link, скорее всего, ваш локальный клон (~/.cocoapods/repos на вашем компьютере) репозитория спецификации CocoaPods не обновлен.

Analyzing dependencies [!] Unable to find a specification for AppCenterReactNativeShared (~> {version})

Выполните команду pod repo update , чтобы обновить репозиторий спецификации, и повторите попытку react-native link . Дополнительные сведения о командах CocoaPods см. в справочнике по командной строке CocoaPods.

Обновление приложения с помощью пакета SDK центра приложений с React Native 0.59 до 0.60

Для обновления React Native до версии 0.60.0 используйте следующую команду:

react-native upgrade 0.60.0

Примечание

Если во время обновления возникает эта ошибка Command failed: git status -s fatal: not a git repository (or any of the parent directories): .git, выполните следующие действия:

git init
git add .
git commit -m "Upgrade react-native"

После завершения обновления каталог можно удалить .git .

Обновление React Native iOS

  1. Откройте podfile и замените зависимости Центра приложений в следующей строке:

    use_native_modules!
    
  2. Выполните следующую команду:

    pod repo update
    

Обновление пакета SDK для React Native до последней версии

Если вы уже интегрировали наш пакет SDK в приложение и хотите выполнить обновление до более новой версии пакета SDK, выполните следующие действия для обновления:

  1. npm uninstall --save appcenter appcenter-analytics appcenter-crashes для удаления старых пакетов Центра приложений.

  2. npm install --save-exact appcenter appcenter-analytics appcenter-crashes для установки последних пакетов Центра приложений.

  3. pod repo update чтобы убедиться, что ваш репозиторий спецификации CocoaPods обновлен.

  4. react-native link.

Совет

Если во время react-native linkотображается сообщение об ошибке, аналогичное приведенному ниже сообщению об ошибке CocoaPods, удалите автоматически созданный podfile.lock в папке ios и запустите react-native link еще раз.

[!] Unable to satisfy the following requirements:

- `AppCenter/Core (= 1.0.0)` required by `Podfile.lock`
- `AppCenter/Core (= 1.0.0)` required by `AppCenter/Crashes (1.0.0)`
- `AppCenter/Core (= 1.0.0)` required by `AppCenter/Analytics (1.0.0)`
- `AppCenter/Core (= 1.0.1)` required by `AppCenterReactNativeShared (1.0.1)`

Миграция из jCenter в Maven Central

Из-за прекращения поддержки jCenter все наши сборки были перемещены в репозиторий Maven Central. Чтобы использовать Центр приложений, необходимо добавить mavenCentral() в репозиторий файл Gradle, как показано ниже:

repositories {
   google()
   mavenCentral()
}

Защита значения секрета Центра приложений

app_secret это идентификатор вашего приложения. Необходимо знать, к какому приложению применяется трафик, и его нельзя использовать для извлечения или изменения существующих данных. Если вы app_secret подвергаетесь риску, самый большой риск заключается в отправке плохих данных в приложение, но это не повлияет на безопасность данных.

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

Вы можете повысить безопасность приложения, используя переменную среды для внедрения секрета приложения в код. Таким образом, секрет не будет виден в коде.