apptracer_flutter_ios
Реализация apptracer_flutter под iOS — неофициальной интеграции Flutter
с Tracer.
Не связан с VK и OK.TECH, не одобрен и не поддерживается ими.
English version: README.en.md.
Зависеть от этого пакета напрямую не нужно: его подтягивает
apptracer_flutter.
Что он делает
Передаёт ошибки Dart в SDK OKTracer как TracerNonFatalModel. Нативные
краши, зависания и отчёты MetricKit этот SDK обрабатывает сам.
Стектрейс Dart не несёт нативных адресов, а переданный массив символов Tracer
игнорирует, пока не подключён отладчик. Поэтому реализация синтезирует
issueKey из типа ошибки Dart и её верхнего кадра — так ошибки всё же
группируются по месту вызова. Передайте свой issueKey, чтобы это
переопределить.
Breadcrumbs доставляются через TracerLogProviderProtocol, который не трогает
настройки собственного логирования SDK.
Подключение
Пакет поддерживает оба менеджера зависимостей Flutter для iOS: Swift Package Manager и CocoaPods. Flutter выбирает тот, который включён в приложении.
Swift Package Manager
Ничего настраивать не нужно: Package.swift объявляет OKTracer
зависимостью от репозитория вендора
по версии, и Xcode забирает SDK сам. Нижняя граница — 1.5.2: это первая
версия, бинарники которой лежат на nexus-external.vkteam.ru; прежний хост
вендор выключил 31.08.2026, и манифесты всех тегов до 1.5.2 ссылаются на него.
Если Package.resolved приложения ещё держит 1.5.1, разрешите зависимости
заново (File → Packages → Update to Latest Package Versions).
Package.swift не зависит ни от чего, что генерирует сам Flutter: import Flutter резолвится через framework search paths, которые Flutter передаёт
сборке. Поэтому SPM-путь работает на любой версии, где SPM вообще есть, и
констрейнт пакета остаётся >=3.22.0 для обоих путей. Так же устроены
url_launcher_ios из flutter/packages и vkid_flutter_sdk.
Единственное отличие от CocoaPods — фазу выгрузки dSYM придётся добавить
руками, потому что подспека, которая делает это при pod install, здесь никто
не выполняет. В Xcode: цель Runner → Build Phases → + → New Run
Script Phase, назовите её [apptracer_flutter] Upload dSYMs to Tracer и
вставьте содержимое
ios/tracer_dsym_upload_phase.sh.
То же самое делает команда пакета — она сама находит скрипт и правит проект,
если в системе есть Ruby с gem xcodeproj (та же пара, на которой работает
CocoaPods):
dart run apptracer_flutter:install_ios_dsym_phase
Повторный запуск безопасен: существующая фаза обновляется на месте, а не дублируется.
CocoaPods
OKTracer лежит в собственном spec-репозитории вендора для CocoaPods и
поставляется статическим xcframework, поэтому в ios/Podfile нужны и
источник, и статическая линковка:
source 'https://github.com/odnoklassniki/tracer-ios.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '13.0'
target 'Runner' do
use_frameworks! :linkage => :static
# ...
end
Подспек требует OKTracer >= 1.5.2 по той же причине, что и Package.swift
выше: спеки всех версий до 1.5.1 включительно скачивают архив с выключенного
хоста. Если Tracer уже был подключён и Podfile.lock держит 1.5.1, pod install остановится на «could not find compatible versions for pod OKTracer»
— выполните pod update OKTracer, он заодно обновит закешированный
spec-репозиторий вендора.
При pod install подспек добавляет в Runner.xcodeproj ту же фазу сборки,
которая отправляет dSYM при каждой release-сборке; TRACER_SKIP_IOS_PHASE=1
запрещает трогать файл проекта. Токен фаза берёт из
ios/tracer_plugin_token или из TRACER_IOS_PLUGIN_TOKEN.
В отличие от Android, TracerOptions.appToken на iOS используется.
Libraries
- apptracer_flutter_ios
- iOS implementation of
apptracer_flutter.