Анализ логов iOS Crashlytics с обязательным git blame анализом и фиксами на уровне кода. Мультиагентная архитектура: classifier-ios → firebase-fetcher → forensics-ios.
Analyzes iOS crash logs from Firebase with git blame to provide code-level fixes.
/plugin marketplace add ivanlutsenko/awac-claude-code-plugins/plugin install crashlytics@awac-claude-code-pluginsАнализ краш-ошибок из Firebase Crashlytics с использованием трёх специализированных агентов.
ВАЖНО: ВСЕ ответы, анализы, отчёты и коммуникация ТОЛЬКО НА РУССКОМ ЯЗЫКЕ.
┌─────────────────────────────────────────────────────────────────┐
│ /crash-report-ios │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ classifier │───▶│ fetcher │───▶│ forensics │
│ iOS │ │ (Firebase) │ │ iOS │
│ (Haiku) │ │ (Haiku) │ │ (Sonnet) │
└──────────────┘ └──────────────┘ └──────────────┘
Перед началом работы проверь и настрой Firebase:
1. Проверить окружение:
mcp__plugin_crashlytics_firebase__firebase_get_environment
2. Если не авторизован:
- Выведи сообщение: "⚠️ Firebase не настроен. Запускаю авторизацию..."
- Вызови: mcp__plugin_crashlytics_firebase__firebase_login
3. Если нет активного проекта:
- Вызови: mcp__plugin_crashlytics_firebase__firebase_list_projects
- Выбери нужный проект
- Вызови: mcp__plugin_crashlytics_firebase__firebase_update_environment
4. Получить app_id для iOS:
- Вызови: mcp__plugin_crashlytics_firebase__firebase_list_apps(platform="ios")
- Сохрани app_id для последующих вызовов
Если Firebase недоступен — продолжай с ручным вводом стектрейса (fallback mode).
Попроси предоставить:
Task(
subagent_type="crash-classifier-ios",
model="haiku",
prompt="Классифицируй этот iOS краш:
Стектрейс:
{stack_trace}
Контекст:
- Событий: {event_count}
- Пользователей: {user_count}%
- Версия: {app_version}
- Устройство: {device}
- iOS: {ios_version}
"
)
Ожидаемый вывод:
priority: critical/high/medium/low
crash_type: Fatal error / SIGABRT / NSException
component: UI/Network/Database/Services/Background
trigger: user_action/background_task/lifecycle_event/async_operation
Если предоставлен Firebase Issue ID:
Task(
subagent_type="firebase-fetcher",
model="haiku",
prompt="Получи детали краша из Firebase:
Issue ID: {issue_id}
App ID: {app_id} (iOS)
"
)
Если Firebase недоступен — агент вернёт fallback mode, продолжай с ручным вводом.
Task(
subagent_type="crash-forensics-ios",
model="sonnet",
prompt="Проанализируй iOS краш с git blame:
Классификация: {classifier_output}
Данные Firebase: {firebase_output}
Стектрейс: {stack_trace}
"
)
Агент выполнит:
Агент crash-forensics-ios вернёт два формата:
Формат 1: Детальный анализ
Формат 2: JIRA Brief
Если Task tool не может вызвать агентов, выполни анализ напрямую:
git blame -L X,Y file.swift| Priority | Когда | Примеры |
|---|---|---|
| 🔴 Critical | Платежи/Авторизация/Безопасность, >5% пользователей | Force unwrap nil в PaymentProcessor, Keychain errors |
| 🟠 High | Важные функции 1-5% пользователей, новые краши | Nil unwrap в главном экране, Index out of range |
| 🟡 Medium | Редкие <1% пользователей, некритичный функционал | Optional edge cases, Background task failures |
| 🟢 Low | Single occurrence, non-blocking | Логирующие ошибки |
// ❌ Краш
let name: String? = nil
print(name!) // Fatal error: Unexpectedly found nil
// ❌ Краш
let items = [1, 2, 3]
let item = items[5] // Fatal error: Index out of range
// ❌ Краш
DispatchQueue.global().async {
self.label.text = "Hello" // UI on background thread!
}
Пользователь: /crash-report-ios
Claude: 🔍 iOS Crash Analysis - Multi-Agent
Пожалуйста, предоставьте:
1. Стектрейс (обязательно)
2. Firebase Issue ID (если есть)
3. Количество крашей и % пользователей
4. Устройство и iOS версия
---
[Пользователь предоставляет данные]
Claude:
📊 Шаг 1: Классификация...
[Вызывает crash-classifier-ios]
📡 Шаг 2: Загрузка из Firebase...
[Вызывает firebase-fetcher]
🔬 Шаг 3: Git blame анализ...
[Вызывает crash-forensics-ios]
✅ Анализ завершён
### Детальный анализ
[...(detailed analysis)]
### JIRA Brief
[...(JIRA format)]
Git blame + поиск кода = ОБЯЗАТЕЛЬНО
"TBD" = "я проанализировал и ownership неясен", НЕ "я не проверил"
Задокументируй точные выполненные команды
Каждый отчёт должен иметь git blame с выводом