{"id":849,"date":"2026-08-13T13:50:47","date_gmt":"2026-08-13T08:20:47","guid":{"rendered":"https:\/\/www.shakebug.com\/blog\/?p=849"},"modified":"2026-08-13T13:50:47","modified_gmt":"2026-08-13T08:20:47","slug":"obfuscated-builds-break-crash-grouping","status":"publish","type":"post","link":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/","title":{"rendered":"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)"},"content":{"rendered":"<p>If your crash tool groups issues by matching the stack trace as a string, an obfuscated build can turn one bug into ten &#8220;unique&#8221; issues overnight. The fix isn&#8217;t a better string match &mdash; it&#8217;s grouping by the shape of the crash instead of its literal text.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_problem_shows_up_right_after_you_ship\"><\/span>The problem shows up right after you ship<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Say a null pointer crash has been stable in your dashboard for weeks: one issue, steady occurrence count, assigned and being worked. Then you ship a release with ProGuard\/R8 rules updated, or a refactor that inlines a couple of methods, or a JS bundle that gets re-minified with different variable names. The exact same crash fires again &mdash; same root cause, same broken code path &mdash; but the stack trace now reads differently: a class got renamed to <code>a.b.c<\/code>, a method got inlined into its caller, a line number shifted by three.<\/p>\n<p>A tool that groups by exact string match sees a new trace and opens a new issue. Multiply that across every device and OS version hitting the bug, and by the end of the week you&#8217;ve got what looks like five or six distinct crashes in your backlog. It&#8217;s one bug, filed six times, because the deduplication logic couldn&#8217;t see past the string.<\/p>\n<p>This isn&#8217;t a hypothetical edge case &mdash; obfuscation and minification are standard practice for production Android and web builds specifically because they shrink and protect the code. Any crash tool that hasn&#8217;t accounted for it is going to fracture under normal release hygiene, not just in unusual situations.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Why_exact-match_grouping_fails_here\"><\/span>Why exact-match grouping fails here<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Exact stack-trace matching treats the trace as a string to compare. It works fine as long as nothing about the trace&#8217;s text changes between occurrences. The moment any of the following happens, the string changes and the match breaks:<\/p>\n<ul>\n<li>Code obfuscation (ProGuard\/R8 on Android, symbol stripping on iOS) renames classes and methods to short, meaningless identifiers that can differ build to build.<\/li>\n<li>Method inlining during compiler optimization removes stack frames entirely, changing the trace&#8217;s shape even though the underlying failure is identical.<\/li>\n<li>Minification on web\/JS bundles renames variables and can shift line and column numbers on every build.<\/li>\n<\/ul>\n<p>None of these change what actually broke. They only change what the trace looks like as text. A matching system that can&#8217;t tell the difference between &#8220;this is a different bug&#8221; and &#8220;this is the same bug in a different build&#8221; ends up creating duplicate issues as a side effect of normal shipping.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"What_pattern-based_grouping_does_instead\"><\/span>What pattern-based grouping does instead<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Shakebug&#8217;s Crash AI clusters by pattern &mdash; the shape of the crash &mdash; rather than a literal string match on the trace, specifically so that a rename or a shifted line number doesn&#8217;t split one crash into several (<a href=\"https:\/\/www.shakebug.com\/ai-crash-grouping\">shakebug.com\/ai-crash-grouping<\/a>). Grouping runs the same way across iOS, Android, Flutter, React Native, and web from one SDK, and it&#8217;s on by default &mdash; crash capture and grouping start as soon as the SDK initializes on each platform, with no separate module to wire up.<\/p>\n<p>Each grouped issue keeps a first-seen date, an occurrences-over-time trend, and a breakdown by affected devices and app versions, so a renamed build doesn&#8217;t just get grouped correctly &mdash; it also stays attached to the history of when the bug first appeared and how it&#8217;s trending, instead of resetting the clock every time a new &#8220;duplicate&#8221; issue opens.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"What_this_looks_like_at_scale\"><\/span>What this looks like at scale<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Shakebug has published before\/after numbers from its crash and bug AI grouping: taking a team from roughly 8,000 scattered reports down to about 150 core issues, cutting time spent on resolution by around 95%, and reducing duplicate-report volume by around 80% (<a href=\"https:\/\/www.shakebug.com\/ai-bug-reporting\">shakebug.com\/ai-bug-reporting<\/a>). That gap between &#8220;reports filed&#8221; and &#8220;actual distinct problems&#8221; is largely what exact-match grouping fails to close &mdash; most of those 8,000 aren&#8217;t 8,000 different bugs, they&#8217;re a few hundred bugs filed many times over, including across builds where the trace text shifted.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Getting_this_without_extra_setup\"><\/span>Getting this without extra setup<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>There&#8217;s no toggle to find. If you&#8217;ve already installed the Shakebug SDK for bug reporting, crash capture and pattern-based grouping are already running:<\/p>\n<pre><code>\/\/ Android (Kotlin)\r\nShakeBug.sharedInstance().initiateWithKey(this, \"&lt;Your Key&gt;\")<\/code><\/pre>\n<pre><code>\/\/ iOS (Swift) &mdash; automatic once initialized\r\nShakeBugSDK.sharedInstance.initiateWithKey(\"&lt;Your Key&gt;\")<\/code><\/pre>\n<pre><code>\/\/ Flutter (Dart) &mdash; wrap your root widget\r\nShakebugSDK(\r\n  androidAppKey: 'your_android_appkey',\r\n  iosAppKey: 'your_ios_appkey',\r\n  child: MaterialApp(home: const HomeScreen()),\r\n);<\/code><\/pre>\n<p>Full feature breakdown, screenshots of a grouped issue, and platform-by-platform setup: see <a href=\"https:\/\/www.shakebug.com\/ai-crash-grouping\">AI Crash Grouping<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"If_youre_comparing_this_against_Sentry\"><\/span>If you&#8217;re comparing this against Sentry<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Sentry also groups crashes, but its AI-assisted debugging layer &mdash; the Seer agent &mdash; is a separate paid add-on on top of your plan. Shakebug&#8217;s Crash AI, pattern-based grouping included, ships in every plan at no extra cost. For the full breakdown (pricing, session replay limits, what each tool is actually built for), see the <a href=\"https:\/\/www.shakebug.com\/sentry-alternative\">Sentry alternative comparison<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"FAQ\"><\/span>FAQ<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Why does the same crash show up as multiple issues after I ship an obfuscated or minified build?<\/strong> Because exact stack-trace matching compares the trace as text. Obfuscation, method inlining, and minification all change that text without changing the underlying bug, so a string-matching grouping system opens a new issue instead of recognizing a repeat.<\/p>\n<p><strong>What is pattern-based crash grouping?<\/strong> It&#8217;s a grouping method that clusters crashes by the shape of the failure rather than a literal string match on the stack trace, so renamed classes, inlined methods, or shifted line numbers don&#8217;t fracture one crash into several issues.<\/p>\n<p><strong>Does Shakebug&#8217;s Crash AI need to be turned on separately?<\/strong> No. Crash capture and grouping start automatically as soon as the SDK is initialized for your platform &mdash; there&#8217;s no separate crash-reporting module to configure.<\/p>\n<p><strong>Is there a cost difference between Shakebug&#8217;s Crash AI and Sentry&#8217;s Seer AI agent?<\/strong> Yes. Crash AI is included in every Shakebug plan. Sentry&#8217;s Seer agent is a paid add-on on top of a Sentry plan. See the <a href=\"https:\/\/www.shakebug.com\/sentry-alternative\">Sentry alternative page<\/a> for the full pricing comparison.<\/p>\n<p><strong>Does this work the same way across mobile and web?<\/strong> Yes. The same Crash AI engine runs across iOS, Android, Flutter, React Native, and web from one SDK.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If your crash tool groups issues by matching the stack trace as a string, an obfuscated build can turn one bug into ten &#8220;unique&#8221; issues overnight. The fix isn&#8217;t a better string match &mdash; it&#8217;s grouping by the shape of the crash instead of its literal text. The problem shows up right after you ship [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":852,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[80],"tags":[],"class_list":["post-849","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-crash"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It) - Shakebug Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)<\/title>\n<meta name=\"description\" content=\"Obfuscation, inlining, and minification can turn one crash into a dozen &quot;unique&quot; issues. Here&#039;s why exact stack-trace matching breaks and how pattern-based grouping holds up.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It) - Shakebug Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)\" \/>\n<meta property=\"og:description\" content=\"Obfuscation, inlining, and minification can turn one crash into a dozen &quot;unique&quot; issues. Here&#039;s why exact stack-trace matching breaks and how pattern-based grouping holds up.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\" \/>\n<meta property=\"og:site_name\" content=\"Shakebug\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-13T08:20:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Chirag Lukhi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Chirag Lukhi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\"},\"author\":{\"name\":\"Chirag Lukhi\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/#\/schema\/person\/37c0213bb8cbb9b49d90a908929d4ec6\"},\"headline\":\"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)\",\"datePublished\":\"2026-08-13T08:20:47+00:00\",\"dateModified\":\"2026-08-13T08:20:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\"},\"wordCount\":979,\"publisher\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png\",\"articleSection\":[\"Crash\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\",\"url\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\",\"name\":\"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It) - Shakebug Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)\",\"isPartOf\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png\",\"datePublished\":\"2026-08-13T08:20:47+00:00\",\"dateModified\":\"2026-08-13T08:20:47+00:00\",\"description\":\"Obfuscation, inlining, and minification can turn one crash into a dozen \\\"unique\\\" issues. Here's why exact stack-trace matching breaks and how pattern-based grouping holds up.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage\",\"url\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png\",\"contentUrl\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png\",\"width\":1200,\"height\":630,\"caption\":\"shakebug-crash-grouping-feature\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.shakebug.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/#website\",\"url\":\"https:\/\/www.shakebug.com\/blog\/\",\"name\":\"Shakebug - Blog\",\"description\":\"Shakebug\",\"publisher\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.shakebug.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/#organization\",\"name\":\"Shakebug - Blog\",\"url\":\"https:\/\/www.shakebug.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/01\/logo.png\",\"contentUrl\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/01\/logo.png\",\"width\":192,\"height\":76,\"caption\":\"Shakebug - Blog\"},\"image\":{\"@id\":\"https:\/\/www.shakebug.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/#\/schema\/person\/37c0213bb8cbb9b49d90a908929d4ec6\",\"name\":\"Chirag Lukhi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.shakebug.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/04\/Mainphoto500500.jpg\",\"contentUrl\":\"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/04\/Mainphoto500500.jpg\",\"caption\":\"Chirag Lukhi\"},\"description\":\"Mobile application and SDK expert | Tech Geek | IT Consultant\",\"sameAs\":[\"https:\/\/www.shakebug.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It) - Shakebug Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)","description":"Obfuscation, inlining, and minification can turn one crash into a dozen \"unique\" issues. Here's why exact stack-trace matching breaks and how pattern-based grouping holds up.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/","og_locale":"en_US","og_type":"article","og_title":"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It) - Shakebug Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)","og_description":"Obfuscation, inlining, and minification can turn one crash into a dozen \"unique\" issues. Here's why exact stack-trace matching breaks and how pattern-based grouping holds up.","og_url":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/","og_site_name":"Shakebug","article_published_time":"2026-08-13T08:20:47+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png","type":"image\/png"}],"author":"Chirag Lukhi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Chirag Lukhi","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#article","isPartOf":{"@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/"},"author":{"name":"Chirag Lukhi","@id":"https:\/\/www.shakebug.com\/blog\/#\/schema\/person\/37c0213bb8cbb9b49d90a908929d4ec6"},"headline":"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)","datePublished":"2026-08-13T08:20:47+00:00","dateModified":"2026-08-13T08:20:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/"},"wordCount":979,"publisher":{"@id":"https:\/\/www.shakebug.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage"},"thumbnailUrl":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png","articleSection":["Crash"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/","url":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/","name":"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It) - Shakebug Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)","isPartOf":{"@id":"https:\/\/www.shakebug.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage"},"image":{"@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage"},"thumbnailUrl":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png","datePublished":"2026-08-13T08:20:47+00:00","dateModified":"2026-08-13T08:20:47+00:00","description":"Obfuscation, inlining, and minification can turn one crash into a dozen \"unique\" issues. Here's why exact stack-trace matching breaks and how pattern-based grouping holds up.","breadcrumb":{"@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#primaryimage","url":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png","contentUrl":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2026\/08\/shakebug-crash-grouping-feature.png","width":1200,"height":630,"caption":"shakebug-crash-grouping-feature"},{"@type":"BreadcrumbList","@id":"https:\/\/www.shakebug.com\/blog\/obfuscated-builds-break-crash-grouping\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.shakebug.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Why Obfuscated Builds Break Crash Grouping (And How Pattern-Based Matching Fixes It)"}]},{"@type":"WebSite","@id":"https:\/\/www.shakebug.com\/blog\/#website","url":"https:\/\/www.shakebug.com\/blog\/","name":"Shakebug - Blog","description":"Shakebug","publisher":{"@id":"https:\/\/www.shakebug.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.shakebug.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.shakebug.com\/blog\/#organization","name":"Shakebug - Blog","url":"https:\/\/www.shakebug.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shakebug.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/01\/logo.png","contentUrl":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/01\/logo.png","width":192,"height":76,"caption":"Shakebug - Blog"},"image":{"@id":"https:\/\/www.shakebug.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.shakebug.com\/blog\/#\/schema\/person\/37c0213bb8cbb9b49d90a908929d4ec6","name":"Chirag Lukhi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.shakebug.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/04\/Mainphoto500500.jpg","contentUrl":"https:\/\/www.shakebug.com\/blog\/wp-content\/uploads\/2022\/04\/Mainphoto500500.jpg","caption":"Chirag Lukhi"},"description":"Mobile application and SDK expert | Tech Geek | IT Consultant","sameAs":["https:\/\/www.shakebug.com"]}]}},"_links":{"self":[{"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/posts\/849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/comments?post=849"}],"version-history":[{"count":2,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/posts\/849\/revisions"}],"predecessor-version":[{"id":851,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/posts\/849\/revisions\/851"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/media\/852"}],"wp:attachment":[{"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/media?parent=849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/categories?post=849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shakebug.com\/blog\/wp-json\/wp\/v2\/tags?post=849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}