[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KCEQBQMP5QCAMXR2RQQAA5":3,"skill-same:01M6KCEQBQMP5QCAMXR2RQQAA5":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":6,"ownerHtmlUrl":58,"ownerBlogUrl":59,"ownerDescription":60,"updatedAt":61,"install":62,"resources":75},"01M6KCEQBQMP5QCAMXR2RQQAA5","mobiai-analyze-crash",null,"Use when the user shares a crash from any source (stack trace, log, screenshot, error description) and wants to find the root cause and fix it.","ArisGuimera\u002FMobiAI-Core","ArisGuimera","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16361358?v=4","01M6KC5MVGRKDA14DWT98445V9","AristiDevs","01M6KC5MZKRFFHFFD340B21YN3",492,"MIT","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fcore\u002Fskills\u002Fmobiai-analyze-crash\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"mobiai analyze crash","crash","analyze","find","native","error","react-native","log","use","cursor","fix","android","flutter","stack","ios","screenshot","code","copilot","react","codex","2026-11-10 10:12:30",false,"---\nname: mobiai-analyze-crash\ndescription: Use when the user shares a crash from any source (stack trace, log, screenshot, error description) and wants to find the root cause and fix it.\nlicense: MIT\ncompatibility: [claude-code, cursor, copilot, codex]\nplatforms: [android, ios, kmp, flutter, react-native]\n---\n\n# Analyze Crash\n\nAnalyze a crash that the user provides, find the root cause in the codebase, and fix it.\n\n## When to Use\n\n- User shares a stack trace, crash log, error screenshot, or any crash information\n- User pastes a crash from any source (Crashlytics, Sentry, Bugsnag, logcat, Xcode console, a Slack message, an email — anything)\n- User asks to investigate why something is crashing\n\n## What You Receive\n\nThe user may give you the crash in any format:\n- A raw stack trace pasted into the chat\n- A screenshot of a crash\n- A log file\n- A description like \"the app crashes when I tap X\"\n- A URL to a crash reporting tool\n- Anything else — work with what you have\n\n## Workflow\n\n### Step 1: Extract the Signal\n\nFrom whatever the user gave you, identify the key information:\n\n1. **Exception \u002F error type** — e.g., `NullPointerException`, `EXC_BAD_ACCESS`, `RangeError`, `SIGSEGV`\n2. **Crash location** — file, line number, method name (if available in the stack trace)\n3. **Call stack** — the sequence of calls that led to the crash\n4. **Context** — what the user was doing when it happened, which screen, which action\n\nIf the information is incomplete, ask the user for more context. But don't block on it — work with what you have.\n\n### Step 2: Classify the Crash Type\n\nIdentify the category to guide your investigation:\n\n| Type | Common Signals | Where to Look |\n|------|---------------|---------------|\n| **Null reference** | NullPointerException, EXC_BAD_ACCESS, forced unwrap nil | Trace where the null value originates — usually an upstream initialization issue |\n| **Concurrency** | ConcurrentModificationException, data race, random EXC_BAD_ACCESS | Shared mutable state, missing synchronization, wrong thread |\n| **Index out of bounds** | IndexOutOfBoundsException, ArrayIndexOutOfBoundsException | Array\u002Flist access without bounds checking, empty collections |\n| **Lifecycle** | IllegalStateException, \"view not attached\", \"no activity\" | Fragment\u002FActivity lifecycle, accessing UI after destroy |\n| **Memory** | OutOfMemoryError, jetsam kill | Leaks, large bitmap allocations, unbounded caches |\n| **Network** | SocketTimeoutException, SSLException | Missing error handling in network layer |\n| **Database** | SQLiteException, Core Data error | Schema migrations, thread safety, constraint violations |\n| **Type casting** | ClassCastException, Swift `as!` failure | Wrong type assumptions, generics, serialization |\n\n### Step 3: Find the Root Cause in the Codebase\n\nFor root cause investigation, follow the `mobiai-mobile-debugging` skill methodology: no guessing, trace data backward, form hypotheses based on evidence.\n\nStarting from the crash location:\n\n1. **Find the crashing code** — use the file and line from the stack trace:\n   ```\n   Grep for the class name or method name from the stack trace\n   Read the file at the crash location\n   ```\n\n2. **Trace backwards** — the crash site is usually not the root cause. Follow the data flow upstream:\n   - Where does the null value come from?\n   - Who populates this list that's empty?\n   - What thread is calling this method?\n\n3. **Check recent changes** — the crash may have been introduced recently:\n   ```bash\n   git log --oneline -10 -- \u003Ccrashing-file>\n   git blame \u003Ccrashing-file>\n   ```\n\n4. **Understand the full context** — read surrounding code, the class structure, how the component is used.\n\n### Step 4: Decide — Fix or Propose\n\nBased on confidence and complexity:\n\n- **High confidence, simple fix** — apply the fix directly. Use the `mobiai-fix-issue` skill workflow: edit the code, verify it compiles, run tests.\n- **Complex fix or uncertain root cause** — explain what you found, what the root cause is, and propose how to fix it. Let the user decide.\n- **Can't find the root cause** — explain what you investigated, what you ruled out, and ask the user for more context.\n\n### Step 5: If Fixing\n\nApply a minimal fix:\n- Change **only** what is necessary\n- Do NOT refactor surrounding code\n- Verify it compiles\n- Run existing tests to check for regressions\n- If applicable, load the `mobiai-write-tests` skill to add a regression test\n\n## Platform-Specific Patterns\n\n### Android\n- `FATAL EXCEPTION` in logcat — app process crashed\n- ANR (Application Not Responding) — main thread blocked >5 seconds\n- `Process: \u003Cpackage>` lines identify which app crashed\n- StrictMode violations in debug builds hint at production issues\n\n### iOS\n- `EXC_BAD_ACCESS` — memory access violation (nil dereference, dangling pointer)\n- `EXC_BREAKPOINT` — `fatalError()`, `preconditionFailure()`, Swift runtime checks\n- Release builds need symbolication — `atos` or Xcode Organizer\n- Crash reports in `~\u002FLibrary\u002FLogs\u002FDiagnosticReports\u002F`\n\n### Flutter\n- `FlutterError` — widget build errors, assertion failures\n- Platform channel errors — bridge between Dart and native\n- Check BOTH the Dart stack trace AND the native (Android\u002FiOS) logs\n\n### React Native\n- Red screen errors in development\n- JavaScript errors in `adb logcat | grep ReactNativeJS`\n- Native crashes appear in normal Android\u002FiOS logs — not in JS\n\n### KMP\n- Shared code crashes may appear differently per platform\n- Check if the crash is in `commonMain` (shared) or platform-specific (`androidMain`\u002F`iosMain`)\n- Kotlin\u002FNative memory model issues on iOS side\n","# Analyze Crash\n\nAnalyze a crash that the user provides, find the root cause in the codebase, and fix it.\n\n## When to Use\n\n- User shares a stack trace, crash log, error screenshot, or any crash information\n- User pastes a crash from any source (Crashlytics, Sentry, Bugsnag, logcat, Xcode console, a Slack message, an email — anything)\n- User asks to investigate why something is crashing\n\n## What You Receive\n\nThe user may give you the crash in any format:\n- A raw stack trace pasted into the chat\n- A screenshot of a crash\n- A log file\n- A description like \"the app crashes when I tap X\"\n- A URL to a crash reporting tool\n- Anything else — work with what you have\n\n## Workflow\n\n### Step 1: Extract the Signal\n\nFrom whatever the user gave you, identify the key information:\n\n1. **Exception \u002F error type** — e.g., `NullPointerException`, `EXC_BAD_ACCESS`, `RangeError`, `SIGSEGV`\n2. **Crash location** — file, line number, method name (if available in the stack trace)\n3. **Call stack** — the sequence of calls that led to the crash\n4. **Context** — what the user was doing when it happened, which screen, which action\n\nIf the information is incomplete, ask the user for more context. But don't block on it — work with what you have.\n\n### Step 2: Classify the Crash Type\n\nIdentify the category to guide your investigation:\n\n| Type | Common Signals | Where to Look |\n|------|---------------|---------------|\n| **Null reference** | NullPointerException, EXC_BAD_ACCESS, forced unwrap nil | Trace where the null value originates — usually an upstream initialization issue |\n| **Concurrency** | ConcurrentModificationException, data race, random EXC_BAD_ACCESS | Shared mutable state, missing synchronization, wrong thread |\n| **Index out of bounds** | IndexOutOfBoundsException, ArrayIndexOutOfBoundsException | Array\u002Flist access without bounds checking, empty collections |\n| **Lifecycle** | IllegalStateException, \"view not attached\", \"no activity\" | Fragment\u002FActivity lifecycle, accessing UI after destroy |\n| **Memory** | OutOfMemoryError, jetsam kill | Leaks, large bitmap allocations, unbounded caches |\n| **Network** | SocketTimeoutException, SSLException | Missing error handling in network layer |\n| **Database** | SQLiteException, Core Data error | Schema migrations, thread safety, constraint violations |\n| **Type casting** | ClassCastException, Swift `as!` failure | Wrong type assumptions, generics, serialization |\n\n### Step 3: Find the Root Cause in the Codebase\n\nFor root cause investigation, follow the `mobiai-mobile-debugging` skill methodology: no guessing, trace data backward, form hypotheses based on evidence.\n\nStarting from the crash location:\n\n1. **Find the crashing code** — use the file and line from the stack trace:\n   ```\n   Grep for the class name or method name from the stack trace\n   Read the file at the crash location\n   ```\n\n2. **Trace backwards** — the crash site is usually not the root cause. Follow the data flow upstream:\n   - Where does the null value come from?\n   - Who populates this list that's empty?\n   - What thread is calling this method?\n\n3. **Check recent changes** — the crash may have been introduced recently:\n   ```bash\n   git log --oneline -10 -- \u003Ccrashing-file>\n   git blame \u003Ccrashing-file>\n   ```\n\n4. **Understand the full context** — read surrounding code, the class structure, how the component is used.\n\n### Step 4: Decide — Fix or Propose\n\nBased on confidence and complexity:\n\n- **High confidence, simple fix** — apply the fix directly. Use the `mobiai-fix-issue` skill workflow: edit the code, verify it compiles, run tests.\n- **Complex fix or uncertain root cause** — explain what you found, what the root cause is, and propose how to fix it. Let the user decide.\n- **Can't find the root cause** — explain what you investigated, what you ruled out, and ask the user for more context.\n\n### Step 5: If Fixing\n\nApply a minimal fix:\n- Change **only** what is necessary\n- Do NOT refactor surrounding code\n- Verify it compiles\n- Run existing tests to check for regressions\n- If applicable, load the `mobiai-write-tests` skill to add a regression test\n\n## Platform-Specific Patterns\n\n### Android\n- `FATAL EXCEPTION` in logcat — app process crashed\n- ANR (Application Not Responding) — main thread blocked >5 seconds\n- `Process: \u003Cpackage>` lines identify which app crashed\n- StrictMode violations in debug builds hint at production issues\n\n### iOS\n- `EXC_BAD_ACCESS` — memory access violation (nil dereference, dangling pointer)\n- `EXC_BREAKPOINT` — `fatalError()`, `preconditionFailure()`, Swift runtime checks\n- Release builds need symbolication — `atos` or Xcode Organizer\n- Crash reports in `~\u002FLibrary\u002FLogs\u002FDiagnosticReports\u002F`\n\n### Flutter\n- `FlutterError` — widget build errors, assertion failures\n- Platform channel errors — bridge between Dart and native\n- Check BOTH the Dart stack trace AND the native (Android\u002FiOS) logs\n\n### React Native\n- Red screen errors in development\n- JavaScript errors in `adb logcat | grep ReactNativeJS`\n- Native crashes appear in normal Android\u002FiOS logs — not in JS\n\n### KMP\n- Shared code crashes may appear differently per platform\n- Check if the crash is in `commonMain` (shared) or platform-specific (`androidMain`\u002F`iosMain`)\n- Kotlin\u002FNative memory model issues on iOS side\n",{"name":5,"license":15,"platforms":49,"description":7,"compatibility":51},[35,38,50,36,30],"kmp",[52,33,41,43],"claude-code","main","2edc6ac1cde2cc280ae0388aa8072902d2e230d5","skills\u002Fcore\u002Fskills\u002Fmobiai-analyze-crash",14,"https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core","https:\u002F\u002Fgithub.com\u002FArisGuimera","https:\u002F\u002Faristi.dev","⭐️ GitHub Star\r\n📲 Mobile developer\r\n🎥 Te enseño a programar apps en Youtube (AristiDevs)\r\n✍🏻 Y por escrito en CursoKotlin.com\r\n❤️ Kotlin Fanboy\r\n👇👇👇👇","2026-11-09 14:18:52",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add ArisGuimera\u002FMobiAI-Core --skill mobiai-analyze-crash",{"tool":68,"command":69},"bunx","bunx skills add ArisGuimera\u002FMobiAI-Core --skill mobiai-analyze-crash",{"tool":71,"command":72},"pnpm","pnpm dlx skills add ArisGuimera\u002FMobiAI-Core --skill mobiai-analyze-crash","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fcore\u002Fskills\u002Fmobiai-analyze-crash\u002FSKILL.md",true,[],[77,97,110,128,146,160],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":87,"publishedAt":44},"01M6KCMR2WVBEC7T0YY4J2SCAR","mobiai-react-native","Use when working on a React Native project — building, testing, debugging, understanding navigation and state management.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Freact-native\u002Fskills\u002Fmobiai-react-native\u002FSKILL.md",[83,86],{"categoryNo":84,"categoryName":85,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[42,88,28,89,90,43,41,91,92,40,93,94,33,32,95,30,52,96],"react native","mobiai react native","testing","debugging","state management","state","management","navigation","project",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":44},"01M6KCMKFC3DKFW5B2208SM59W","mobiai-kmp","Use when working on a Kotlin Multiplatform project — shared code, expect\u002Factual declarations, platform-specific implementations, building and testing.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fkmp\u002Fskills\u002Fmobiai-kmp\u002FSKILL.md",[103],{"categoryNo":84,"categoryName":85,"taxonomyType":21,"taxonomyTypeDesc":22},[105,90,43,41,40,106,107,33,32,52,108,96,109],"mobiai kmp","kotlin","kotlin multiplatform","shared","platform",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":117,"publishedAt":44},"01M6KCMEC4YP1FFAX4ZX80Q10R","mobiai-ios-testing","Use when writing or running tests in an iOS project — unit tests, UI tests, snapshot tests, choosing the right framework.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-testing\u002FSKILL.md",[116],{"categoryNo":84,"categoryName":85,"taxonomyType":21,"taxonomyTypeDesc":22},[90,38,118,119,120,43,121,41,40,122,123,124,33,125,32,52,96,126,127],"ios testing","mobiai ios testing","writing","unit tests","framework","running tests","ui","snapshot","tests","unit",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":44},"01M6KCM78C8P9R6X78EZCQ0YF9","mobiai-ios-device","Use when interacting with an iOS Simulator — run simctl commands, capture screenshots, read device logs, manage simulators.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-device\u002FSKILL.md",[],[38,135,136,137,43,41,138,40,139,140,141,33,32,142,143,52,144,145],"device","mobiai ios device","screenshots","run","logs","capture","read","manage","ios simulator","commands","with",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":44},"01M6KCM2HE6Z1B7WREJ9DTKKWA","mobiai-ios-build","Use when building an iOS project, configuring schemes, troubleshooting build failures, or managing dependencies with CocoaPods or SPM.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-build\u002FSKILL.md",[],[38,153,154,155,43,41,40,156,33,32,157,52,96,145,158,159],"build","ios build","mobiai ios build","troubleshooting","dependencies","spm","cocoapods",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":44},"01M6KCKWZNT8P6K5SYXE1YAT9E","mobiai-ios-architecture","Use when creating features, refactoring, or navigating an iOS codebase — understand project structure, find where to make changes, follow existing patterns.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-architecture\u002FSKILL.md",[],[167,38,168,169,43,170,41,40,171,27,33,32,172,173,96,174,175,176,177,178],"architecture","ios architecture","mobiai ios architecture","project structure","refactoring","patterns","structure","understand","changes","codebase","Existing","features"]