Google Firebase Crashlytics — важная функция, которую стоит добавить в свои мобильные приложения. Вы никогда не пропустите критический сбой приложения благодаря оповещениям о новых проблемах в режиме реального времени. Сбои имеют приоритет по влиянию на реальных пользователей, поэтому вы знаете, как лучше всего исправлять ошибки.

Я считаю, что у вас уже есть цели для «отладки» и «релиза» в вашем проекте Xcode. У вас также должно быть два разных идентификатора пакета для отладки и выпуска. Держите их под рукой, они вам очень скоро понадобятся. Теперь приступим.

Войдите в firebase под своей учетной записью Google. В правом верхнем углу выберите опцию «Перейти к консоли». Оттуда выберите опцию «Создать проект». Это должно выглядеть как на картинке ниже:

Мы начнем с создания проекта Firebase.

1: Дайте вашему проекту имя и выберите «Продолжить».

2: Аналитика для вашего проекта firebase. Убедитесь, что опция «Google Analytics для этого проекта» включена (которая должна быть включена по умолчанию), затем выберите «Продолжить».

3: Выберите свое местоположение, примите условия Google Analytics, а затем выберите параметр «Создать проект».

4: Выберите «Продолжить» после того, как firebase создаст ваш проект.

5: Теперь, когда ваш проект успешно создан, мы добавим приложение в ваш проект Firebase. Выберите iOS из вариантов. Это должно выглядеть примерно так, как на изображении ниже:

6: Зарегистрируйте свое приложение здесь. Мы начинаем с приложения для цели выпуска. Добавьте идентификатор пакета выпуска (например, com.prateek.demo), дайте ему имя (демонстрационный выпуск iOS) и идентификатор App Store, если ваше приложение уже запущено. Последние два поля являются необязательными, поэтому их заполнение полностью на ваше усмотрение. Но Bundle ID необходим. Выберите опцию «Зарегистрировать приложение».

7: Теперь вы должны увидеть опцию «Загрузить GoogleService-Info.plist». Выберите это и загрузите файл plist.

8: После загрузки файла plist продолжайте нажимать «Далее», пока не появится опция «Продолжить на консоли». Не беспокойтесь о шагах, которые вы только что пропустили, я расскажу вам о них в последней части этого руководства.

9: Теперь на консоли выберите параметр «Crashlytics» в разделе «Выпуск и мониторинг» на левой панели. А затем выберите опцию «Включить Crashlytics».

Теперь, когда вы находитесь в консоли, выберите параметр «Добавить приложение» и выполните шаги с 5 по 8, чтобы добавить другое приложение в качестве цели отладки. На этот раз введите идентификатор пакета для цели отладки (например: com.prateek.demo.debug). Загрузите новый файл GoogleService-Info.plist.

Теперь первое, что вам нужно сделать, это сгруппировать эти два plist-файла в разных папках. Создайте папку и назовите ее «Firebase». Внутри папки Firebase создайте еще две папки и назовите их «Prod» и «Dev» соответственно. Поместите свой plist для выпуска в папку Prod, а plist для отладки — в папку Dev. Перетащите эту папку Firebase в папку вашего проекта, где находится ваш файл «xcodeproj».

Следующее, что вам нужно сделать, это открыть проект Xcode и перетащить папку Firebase в каталог проекта слева. А теперь очень важная часть. Снимите флажок «Копировать элементы, если необходимо». Кроме того, убедитесь, что вы сняли флажки со всех целей, отмеченных по умолчанию. Ваш экран должен выглядеть как на картинке ниже:

Есть причина, по которой нам нужно снять флажок «Копировать элементы, если необходимо» и любые цели. В следующих нескольких шагах мы собираемся добавить Firebase SDK в наш проект. Этот SDK ожидает файл GoogleService-Info.plist. Но у нас их два. Содержимое файлов plist будет другим, но оба файла имеют одинаковое имя. SDK выдаст ошибку о дублирующихся файлах, и ваш проект не сможет скомпилироваться. Вот почему мы сняли флажок «Добавить в цели». Мы собираемся вручную указать, какой plist будет использоваться для какой цели. Мы сняли флажок «Копировать элементы при необходимости», так как папка Firebase уже находится в папке проекта. Он останется там.

Теперь давайте добавим Firebase SDK в наш проект. Я рекомендую вам сделать это с помощью Cocoapods. Выполните следующие шаги, чтобы включить Cocoapods и добавить SDK. Если у вас уже установлены Cocoapods, вы можете сразу перейти к шагу №. 4.

1: Откройте терминал и перейдите в каталог вашего проекта. Вы можете сделать это, выполнив команду «cd ‹путь к проекту›». Или просто введите «cd», дайте пробел и перетащите папку проекта на терминал, чтобы получить путь к ней. Нажмите Ввод.

2: Запустите команду «pod init».

3: После успешного выполнения команды перейдите в папку проекта. Вы должны увидеть новый сгенерированный файл с именем «podfile». Щелкните правой кнопкой мыши подфайл и откройте его с помощью Xcode.

4: Скопируйте и вставьте приведенный ниже код в свой подфайл после строки «# pods for your project». Сохраните и закройте его.

platform :ios, ‘10.0’
# Add the Firebase pod for Google Crashlytics
pod ‘Firebase/Crashlytics’
# Add the Firebase pod for Google Analytics
pod ‘Firebase/Analytics’

5: Теперь вернитесь к терминалу и запустите команду «pod install».

6: После завершения установки вы должны увидеть сгенерированный файл «xcworkspace». Откройте это в своем Xcode. С этого момента вы будете использовать не файл «xcodeproj» для написания кода, а файл «xcworkspace».

Вы успешно добавили Firebase SDK в свой проект. Теперь пришло время инициализировать SDK, чтобы проект мог его использовать. Перейдите к классу AppDelegate и импортируйте файл Firebase.

Быстрый:

import Firebase

Цель-С:

#import <Firebase.h>

В методе didFinishLaunchingWithOptions в AppDelegate вызовите следующий метод для настройки и инициализации Firebase.

Быстрый:

FirebaseApp.configure()

Цель-С:

[FIRApp configure];

Следующее, что вам нужно сделать, это включить ведение журнала отладки. Для этого на верхней панели навигации выберите:
Продукт › Схема › Редактировать схему и добавьте следующий аргумент в схему «Выполнить»:

-FIRDebugEnabled

Краткий обзор того, что вы сделали до сих пор.

1. Создан проект и добавлены приложения для выпуска и отладки в консоли Firebase.
2. Скачаны и сгруппированы файлы GoogleService-Info.plist для выпуска и отладки.
3. Включены аварийные аналитики
4. : добавлен Firebase SDK в ваш проект с помощью Cocoapods и инициализирован в классе AppDelegate.
5: добавлен аргумент в схему запуска для включения ведения журнала отладки.

Теперь мы собираемся сделать часть, которая заставит Firebase SDK выбрать правильный файл plist из каталога проекта.

1: Зайдите в настройки проекта и выберите «Build Phases».

2: Нажмите «+» и выберите параметр «Новая фаза запуска сценария».

3: Вы увидите добавленный новый «Выполнить сценарий». Переименуйте его в «Настройка среды Firebase GoogleService-Info.plist».

4: Расширьте его и добавьте следующий сценарий оболочки.

# Name of the resource we’re selectively copying
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
# Get references to dev and prod versions of the GoogleService-Info.plist
# NOTE: These should only live on the file system and should NOT be part of the target (since we’ll be adding them to the target manually)
GOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Dev/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Prod/${GOOGLESERVICE_INFO_PLIST}
# Make sure the dev version of GoogleService-Info.plist exists
echo “Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}”
if [ ! -f $GOOGLESERVICE_INFO_DEV ]
then
echo “No Development GoogleService-Info.plist found. Please ensure it’s in the proper directory.”
exit 1
fi
# Make sure the prod version of GoogleService-Info.plist exists
echo “Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}”
if [ ! -f $GOOGLESERVICE_INFO_PROD ]
then
echo “No Production GoogleService-Info.plist found. Please ensure it’s in the proper directory.”
exit 1
fi
# Get a reference to the destination location for the GoogleService-Info.plist
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo “Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}”
# Copy over the prod GoogleService-Info.plist for Release builds
if [ “${CONFIGURATION}” == “Release” ]
then
echo “Using ${GOOGLESERVICE_INFO_PROD}”
cp “${GOOGLESERVICE_INFO_PROD}” “${PLIST_DESTINATION}”
else
echo “Using ${GOOGLESERVICE_INFO_DEV}”
cp “${GOOGLESERVICE_INFO_DEV}” “${PLIST_DESTINATION}”
fi

5: Аналогично шагу 2 добавьте новый сценарий запуска, переименуйте его в «Firebase dSYM path» и добавьте в сценарий оболочки следующее:

“${PODS_ROOT}/FirebaseCrashlytics/run”

6: В том же сценарии запуска нажмите «+» в разделе «Входные файлы» и добавьте следующий входной файл.

${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}

7: Нажмите «+» еще раз и добавьте еще один входной файл

$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

8: Вам также необходимо упорядочить все ваши сценарии запуска. Держите «Setup Firebase Environment GoogleService-Info.plist» поверх сценария «Копировать ресурсы пакета» и оставьте «Путь Firebase DSYM» последним. Вы можете упорядочить, перетаскивая скрипты. Убедитесь, что иерархия скриптов соответствует изображению ниже:

Это оно!!

Вы успешно добавили и включили Firebase Crashlytics в свой проект, и теперь Firebase готов обнаруживать любые сбои, которые могут возникнуть в вашем приложении.

Запустите свой проект один раз, чтобы убедиться, что он успешно скомпилирован.

А теперь самое время протестировать крашлитики. Для этого мы принудительно завершим приложение и посмотрим, появится ли оно в консоли Firebase Crashlytics. Выполните следующие шаги.

1: В методе viewDidLoad вашего ViewController добавьте следующий фрагмент кода. Это приведет к сбою вашего приложения. Важно удалить этот код после того, как вы успешно протестировали crashlytics.

Цель-С:

@throw NSInternalInconsistencyException;

Быстрый:

fatalError()

2: Запустите и установите приложение на свой симулятор или на реальное устройство.

3: После успешной установки остановите приложение. Мы делаем этот шаг, потому что Firebase не может обнаружить сбой, если он происходит, когда приложение работает в отладчике. Нам нужно отсоединить приложение от отладчика. Также убедитесь, что устройство или симулятор подключены к Интернету.

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

5: снова откройте приложение. Нам нужно выполнить этот шаг, потому что, когда мы снова открываем приложение после его сбоя, именно в это время Firebase обнаружит сбой и сообщит об этом в консоли.

6: Перейдите в консоль Firebase в браузере вашего компьютера и увидите сбой с именем класса и номером строки, на которой произошел сбой приложения. Если вы не видите его сразу, подождите несколько минут и обновите окно браузера.

7: Если вы по-прежнему не видите сбоя в консоли, перейдите к настройкам вашего проекта в Xcode и выберите «Настройки сборки». Найдите «Формат отладочной информации» и убедитесь, что для него установлено значение «DWARF с файлом dSYM». Сбой вашего приложения снова. На этот раз Firebase SDK обнаружит и сообщит о сбое в своей консоли.

Это единственный раз, когда нам нравится сбой в приложении!