Быстрый старт

Регистрация и настройка

Для начала нужно:

  1. Зайти в аккаунт Tracer.
  2. Создать или вступить в организацию.
  3. Добавить iOS проект (нужно быть администратором или владельцем организации).

После создания проекта вам будет доступно 2 токена:

  • appToken - для инициализации Трейсера внутри вашего приложения
  • pluginToken - для загрузки символов на сервера трейсера

Автоматическая отправка DSYMы при использовании Fastlane

Плагин к Fastlane — на странице Fastlane

Автоматическая отправка DSYMы при использовании bash скрипта

Подробнее на странице Bash скрипт

Подключение зависимостей на трейсер к проекту

Для cocoapods Podfile

source 'https://github.com/odnoklassniki/tracer-ios.git' pod 'OKTracer'

В случае подключения через SPM к вашему пакету требуется прописать дополнительную настройку для линковщика в вашем Package.swift:

linkerSettings: [.unsafeFlags(["-weak-lswiftDemangle"])]

Включение плагинов трейсера и их конфигурация в проекте

import OKTracer class AppDelegate { var tracerService: TracerServiceProtocol! func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { tracerService = TracerFactory.tracerServiceForCrashReporting(token: "Ваш appToken") tracerService.start() // Обработка сбоя приложения после перезапуска switch tracerService.lastSessionState() { case let .normal(crashCount): print("В последней сессии сбоев не было. Не отправлено \(crashCount) сбоев.") case let .crashed(crashCount, result): print("В последней сессии был сбой. Не отправлено \(crashCount) сбоев.") switch result { case let .success(crashModel): print("Время последнего сбоя\(crashModel.timestamp). Время последнего запуска приложения \(crashModel.startTime).") case let .failure(error): print("При получении последнего сбоя произошла ошибка \(error)") } } } }

Для более тонкой настройки трейсера нужно использовать другой метод инициализации:

import OKTracer let features: [FeatureConfiguration] = [ .crashReporter(maxUploadsCount: 3, shouldUseHack: false), .assertReporter(maxUploadsCount: 10, sendEvery: 10), .diskUsage(probability: 10000), .systrace(probability: 10000) ] let items: [FeatureObject] = [ .diskUsage(objects: [.folder(path: NSHomeDirectory(), tag: "homeDirectory")]), .systrace(scenarios: ["launch", "urlSession"]), .threadMonitor(objects: [.dispatch(queue: .main)]), .sampledTrace(scenarios: ["main"]) ] let configuration = Configuration(token: "Ваш appToken", features: features) let tracerService = TracerFactory.tracerService(configuration: configuration, items: items) tracerService.start()

Подробное описание опций:

  • FeatureConfiguration.crashReporter/FeatureConfiguration.assertReporter — на странице Crash и ANR
  • FeatureObject.diskUsage/FeatureConfiguration.diskUsage — на странице Disk Usage
  • FeatureObject.systrace/FeatureConfiguration.systrace — на странице Systrace Profiler

Описание TracerFactory

  • остановка/запуск сервисов
tracerService.stop(features: [.diskUsage, .systrace]) tracerService.start(features: [.diskUsage, .systrace])

Описание TracerServiceDelegate

Для получения событий от трейсера нужно реализовать поддержку делегата TracerServiceDelegate:

  • Передать объект реализующий делегат в фабрику
let tracerService = TracerFactory.tracerServiceForCrashReporting(token: "Ваш appToken", delegate: yourDelegate) tracerService.start()
  • Задать свойство у трейсера
let tracerService = TracerFactory.tracerServiceForCrashReporting(token: "Ваш appToken") tracerService.delegate = yourDelegate tracerService.start()

Описание TracerSystemInfoProviderProtocol

Для переопределения провайдера получения данных о системе нужно реализовать протокол TracerSystemInfoProviderProtocol

  • передать его в фабрику
let tracerService = TracerFactory.tracerServiceForCrashReporting(token: "Ваш appToken", sysInfoProvider: yourImplementation) tracerService.start()
  • передать его в конфигурацию
let features: [FeatureConfiguration] = [.crashReporter(), .assertReporter()] let configuration = Configuration(token: "Ваш appToken", features: features, sysInfoProvider: yourImplementation) let tracerService = TracerFactory.tracerServiceForCrashReporting(configuration: configuration) tracerService.start()

Демо приложение

Ознакомиться с примером интеграции можно в нашем демо проекте