<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://blogs.mobilebytesensei.com/</loc>
    <lastmod>2026-12-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/</loc>
    <lastmod>2026-12-10</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/5/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/6/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/7/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/8/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/9/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/10/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/11/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/12/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/13/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/14/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/15/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/16/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/17/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/18/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/19/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/20/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/21/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/22/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/23/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/24/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/25/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/26/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/27/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/28/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/29/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page/30/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/series/</loc>
    <lastmod>2026-12-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/series/100-days-of-compose/</loc>
    <lastmod>2026-12-06</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/series/100-days-of-compose.png</image:loc>
      <image:title>100 Days of Compose</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/series/100-days-of-compose/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/series/100-days-of-compose/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/series/100-days-of-compose/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/5/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/6/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/7/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/8/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/9/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/10/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/compose/page/11/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/5/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/6/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/7/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/8/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/9/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kotlin/page/10/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/5/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/6/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/7/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/8/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/9/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/android/page/10/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/architecture/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/architecture/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/architecture/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/architecture/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/architecture/page/5/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/architecture/page/6/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/agents/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/agents/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/agents/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/agents/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ai/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ai/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ai/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ai/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/practices/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/practices/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/practices/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/practices/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kmp/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kmp/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kmp/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/kmp/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/tooling/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/tooling/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/tooling/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/guardrails/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/guardrails/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/guardrails/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/performance/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/performance/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/testing/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/testing/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/on-device/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/on-device/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/operations/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/operations/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/material3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/material3/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/verification/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/verification/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/codegen/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/layout/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/publishing/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/context/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/evals/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/gradle/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/inference/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/seo/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/release/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/security/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/tool-use/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/build/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/git/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/orchestration/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/reliability/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/adaptive/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/careers/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/coroutines/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/gestures/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ios/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/workflow/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/accessibility/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/animation/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/automation/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ci/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/collaboration/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/data/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/graphics/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/secrets/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ui/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/api/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/databases/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/freelancing/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/interop/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/llm/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/system/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/text/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/api-design/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/conventions/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/deploy/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/documentation/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/monorepo/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/product/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/syndication/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/assets/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/claude-code/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/cost/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/debugging/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/growth/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/mcp/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/measurement/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/navigation/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/observability/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/shipping/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/store/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/code-review/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/datetime/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/design/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/design-system/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/fundamentals/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/github-actions/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/i18n/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/memory/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/multi-agent/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/multiplatform/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/platform/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/productivity/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/signing/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/state/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/storage/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/analytics/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/career/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/cdn/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/cloudflare/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/concurrency/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/consulting/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/di/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/fastlane/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/fintech/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/focus/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/hooks/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/incidents/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/internals/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ksp/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/ktor/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/latency/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/learning/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/maintenance/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/match/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/mobile/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/networking/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/offline/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/planning/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/playwright/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/privacy/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/prompt/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/requirements/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/resources/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/retrospective/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/search/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/serialization/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/wasm/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/topics/writing/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/agents/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/agents/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/agents/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/ai-dev/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/ai-dev/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/ai-dev/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/on-device-ai/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/on-device-ai/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/shipping/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/shipping/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/shipping/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/growth/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/growth/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/notes/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/2/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/3/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/4/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/5/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/6/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/7/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/8/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/9/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/10/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/11/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/12/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/13/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/14/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/15/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/16/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/17/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/18/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/19/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/categories/engineering/page/20/</loc>
    <changefreq>weekly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/archive/</loc>
    <lastmod>2026-12-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/when-local-model-beats-api/</loc>
    <lastmod>2026-12-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/when-local-model-beats-api/fig-crossover.png</image:loc>
      <image:title>When a local model beats the API, and the three numbers that decide it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/scope-a-statement-of-work/</loc>
    <lastmod>2026-12-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/scope-a-statement-of-work/fig-questions.png</image:loc>
      <image:title>The scoping conversation that stops a project going wrong in month three</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/productivity-advice-fails-engineers/</loc>
    <lastmod>2026-12-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/productivity-advice-fails-engineers/fig-reload.png</image:loc>
      <image:title>Most productivity advice fails engineers, and the reason is measurable</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/bigger-context-worse-answer/</loc>
    <lastmod>2026-12-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/bigger-context-worse-answer/fig-pack.png</image:loc>
      <image:title>A bigger context window gave me a worse answer, repeatably</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-100-days-taught-me/</loc>
    <lastmod>2026-12-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-100-days-taught-me/hero.png</image:loc>
      <image:title>100 days of Compose: the eight ideas the other ninety-nine posts kept circling</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/glance-widgets/</loc>
    <lastmod>2026-12-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/glance-widgets/hero.png</image:loc>
      <image:title>Glance looks like Compose and compiles to RemoteViews, which explains every limitation</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/notifications-from-compose/</loc>
    <lastmod>2026-12-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/notifications-from-compose/hero.png</image:loc>
      <image:title>Notifications are the one UI you can&apos;t build in Compose</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/predictive-back/</loc>
    <lastmod>2026-12-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/predictive-back/hero.png</image:loc>
      <image:title>Predictive back turns a commitment into a preview, and your BackHandler can break it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/edge-to-edge-part-2-insets/</loc>
    <lastmod>2026-12-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/edge-to-edge-part-2-insets/hero.png</image:loc>
      <image:title>There are three kinds of inset, and using the wrong one is why your keyboard fights your layout</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/edge-to-edge-part-1/</loc>
    <lastmod>2026-12-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/edge-to-edge-part-1/hero.png</image:loc>
      <image:title>Edge-to-edge stopped being a choice, and most apps found out from a bug report</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lint-and-editor-actions/</loc>
    <lastmod>2026-11-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lint-and-editor-actions/hero.png</image:loc>
      <image:title>The checks that run without you asking are the ones that scale</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/layout-inspector-and-recomposition-counts/</loc>
    <lastmod>2026-11-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/layout-inspector-and-recomposition-counts/hero.png</image:loc>
      <image:title>The Layout Inspector shows you a tree you didn&apos;t write</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/previews/</loc>
    <lastmod>2026-11-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/previews/hero.png</image:loc>
      <image:title>A preview that needs a ViewModel is telling you something</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/navigation-migration/</loc>
    <lastmod>2026-11-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/navigation-migration/hero.png</image:loc>
      <image:title>Two navigation systems can share one back stack, which is the only reason this works</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/recyclerview-to-lazycolumn/</loc>
    <lastmod>2026-11-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/recyclerview-to-lazycolumn/hero.png</image:loc>
      <image:title>Porting a RecyclerView deletes four classes and keeps one idea</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/views-in-compose/</loc>
    <lastmod>2026-11-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/views-in-compose/hero.png</image:loc>
      <image:title>AndroidView has two lambdas, and putting work in the wrong one is the bug</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-in-views/</loc>
    <lastmod>2026-11-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-in-views/hero.png</image:loc>
      <image:title>ComposeView is easy; deciding where to put it is the migration</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/common-testing-patterns/</loc>
    <lastmod>2026-11-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/common-testing-patterns/hero.png</image:loc>
      <image:title>What a Compose test suite should actually contain</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/synchronisation/</loc>
    <lastmod>2026-11-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/synchronisation/hero.png</image:loc>
      <image:title>A flaky test is a timing assumption you didn&apos;t know you made</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-self-review-that-changed-my-year/</loc>
    <lastmod>2026-11-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-self-review-that-changed-my-year/fig-lists.png</image:loc>
      <image:title>Writing my own performance review honestly, for once</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-apis/</loc>
    <lastmod>2026-11-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-apis/hero.png</image:loc>
      <image:title>Find, act, assert — and the rule that decides which test to write at all</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-meeting-that-should-have-been-a-pr/</loc>
    <lastmod>2026-11-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-meeting-that-should-have-been-a-pr/fig-matrix.png</image:loc>
      <image:title>The meeting that should have been a pull request, and vice versa</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-productivity-tool-i-deleted/</loc>
    <lastmod>2026-11-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-productivity-tool-i-deleted/fig-audit.png</image:loc>
      <image:title>I measured my own tooling for a month and deleted half of it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/semantics-tree-testing/</loc>
    <lastmod>2026-11-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/semantics-tree-testing/hero.png</image:loc>
      <image:title>Your UI tests query the accessibility tree, which is why testTag is a last resort</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-handover-that-actually-worked/</loc>
    <lastmod>2026-11-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-handover-that-actually-worked/fig-handover.png</image:loc>
      <image:title>The handover that actually worked, and the four I botched first</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-rate-card-conversation/</loc>
    <lastmod>2026-11-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-rate-card-conversation/fig-anchor.png</image:loc>
      <image:title>The rate conversation I kept getting wrong</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/measuring-with-the-tools/</loc>
    <lastmod>2026-11-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/measuring-with-the-tools/hero.png</image:loc>
      <image:title>Four tools, four questions, and none of them answers another&apos;s</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-client-who-changed-the-scope/</loc>
    <lastmod>2026-11-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-client-who-changed-the-scope/fig-process.png</image:loc>
      <image:title>Scope creep is a contract problem, not a communication problem</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-freelance-estimate-that-cost-me-money/</loc>
    <lastmod>2026-11-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-freelance-estimate-that-cost-me-money/fig-risk.png</image:loc>
      <image:title>The fixed-price project that cost me three weeks of unpaid work</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/deferred-reads/</loc>
    <lastmod>2026-11-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/deferred-reads/hero.png</image:loc>
      <image:title>Nine pillars have quietly been teaching you one optimisation</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-code-i-wrote-to-avoid-learning-sql/</loc>
    <lastmod>2026-11-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-code-i-wrote-to-avoid-learning-sql/fig-tradeoff.png</image:loc>
      <image:title>I wrote 400 lines to avoid learning one SQL feature</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-onboarding-doc-that-was-a-test/</loc>
    <lastmod>2026-11-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-onboarding-doc-that-was-a-test/fig-loop.png</image:loc>
      <image:title>The onboarding doc that doubled as a test of our own setup</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/baseline-profiles/</loc>
    <lastmod>2026-11-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/baseline-profiles/hero.png</image:loc>
      <image:title>Baseline Profiles fix a problem recomposition counts can&apos;t see</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-focus-and-keyboard/</loc>
    <lastmod>2026-11-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-focus-and-keyboard/fig-systems.png</image:loc>
      <image:title>The keyboard covered the field, and the fix was not imePadding</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-bug-that-was-in-the-requirements/</loc>
    <lastmod>2026-11-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-bug-that-was-in-the-requirements/fig-spec.png</image:loc>
      <image:title>The bug was in the requirements, and three people implemented it faithfully</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-navigation-type-safety/</loc>
    <lastmod>2026-11-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-navigation-type-safety/fig-routes.png</image:loc>
      <image:title>A route is a string until you make it a type</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-publishing-is-a-contract/</loc>
    <lastmod>2026-11-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-publishing-is-a-contract/fig-targets.png</image:loc>
      <image:title>Publishing a KMP library commits you to every target you listed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stability-and-strong-skipping-part-2/</loc>
    <lastmod>2026-11-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stability-and-strong-skipping-part-2/hero.png</image:loc>
      <image:title>Strong skipping made most of yesterday&apos;s advice unnecessary</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stability-and-strong-skipping-part-1/</loc>
    <lastmod>2026-11-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stability-and-strong-skipping-part-1/hero.png</image:loc>
      <image:title>The compiler decides your types are unstable, and it writes down why</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-dependency-with-one-maintainer/</loc>
    <lastmod>2026-11-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-dependency-with-one-maintainer/fig-chain.png</image:loc>
      <image:title>The dependency with one maintainer, and the week it went away</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-utc-bug-that-was-not-timezones/</loc>
    <lastmod>2026-11-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-utc-bug-that-was-not-timezones/fig-buckets.png</image:loc>
      <image:title>It was not a timezone bug, it was a day-boundary bug</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-index-that-made-it-slower/</loc>
    <lastmod>2026-11-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-index-that-made-it-slower/fig-plan.png</image:loc>
      <image:title>The index I added made the query slower, and the planner was right</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-secret-in-the-git-history/</loc>
    <lastmod>2026-11-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-secret-in-the-git-history/fig-order.png</image:loc>
      <image:title>Rotating the key was the easy part</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-three-phases-recap/</loc>
    <lastmod>2026-11-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-three-phases-recap/hero.png</image:loc>
      <image:title>Compose performance is one question asked in four places</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/drag-and-drop/</loc>
    <lastmod>2026-11-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/drag-and-drop/hero.png</image:loc>
      <image:title>Drag-and-drop crosses app boundaries, which is why it isn&apos;t just a drag gesture</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-binary-compatibility/</loc>
    <lastmod>2026-11-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-binary-compatibility/fig-abi.png</image:loc>
      <image:title>Adding a parameter with a default broke the ABI</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-build-logic-convention-plugins/</loc>
    <lastmod>2026-11-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-build-logic-convention-plugins/fig-drift.png</image:loc>
      <image:title>Seven modules, seven copies of the same Gradle block</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-animation-is-state/</loc>
    <lastmod>2026-11-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-animation-is-state/fig-anim.png</image:loc>
      <image:title>An animation is state, and that is why it restarts</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-semantics-is-the-test-api/</loc>
    <lastmod>2026-11-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-semantics-is-the-test-api/fig-tree.png</image:loc>
      <image:title>Your semantics tree is your test API and your accessibility API at once</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/focus/</loc>
    <lastmod>2026-11-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/focus/hero.png</image:loc>
      <image:title>Focus is the input model you don&apos;t test until someone plugs in a keyboard</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/scroll-phases-and-nested-scroll/</loc>
    <lastmod>2026-11-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/scroll-phases-and-nested-scroll/hero.png</image:loc>
      <image:title>Nested scroll is a negotiation, and there are four moments to intervene</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-null-that-meant-three-things/</loc>
    <lastmod>2026-11-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-null-that-meant-three-things/fig-states.png</image:loc>
      <image:title>The null that meant three different things</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-performance-fix-that-was-a-cache-key/</loc>
    <lastmod>2026-11-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-performance-fix-that-was-a-cache-key/fig-why.png</image:loc>
      <image:title>Six weeks of optimisation, and the fix was two lines</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multi-touch/</loc>
    <lastmod>2026-11-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multi-touch/hero.png</image:loc>
      <image:title>Pinch, pan and rotate arrive together, and the centroid is what ties them</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-health-check-that-always-passed/</loc>
    <lastmod>2026-11-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-health-check-that-always-passed/fig-probes.png</image:loc>
      <image:title>The health check that returned 200 while the service was useless</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-queue-that-grew-forever/</loc>
    <lastmod>2026-11-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-queue-that-grew-forever/fig-bounds.png</image:loc>
      <image:title>The queue had no maximum, so the failure was memory and not latency</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/drag-swipe-fling/</loc>
    <lastmod>2026-11-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/drag-swipe-fling/hero.png</image:loc>
      <image:title>Swipe-to-dismiss is a state machine with anchors, not a drag handler</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-pagination-that-lost-rows/</loc>
    <lastmod>2026-11-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-pagination-that-lost-rows/fig-shift.png</image:loc>
      <image:title>Offset pagination loses rows while you read, and the user never knows</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-webhook-that-arrived-twice/</loc>
    <lastmod>2026-11-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-webhook-that-arrived-twice/fig-delivery.png</image:loc>
      <image:title>The webhook that arrived twice, and the order that shipped twice</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/on-device-model-is-a-memory-decision/</loc>
    <lastmod>2026-11-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/on-device-model-is-a-memory-decision/fig-footprint.png</image:loc>
      <image:title>Running a model on-device is a memory decision first</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/streaming-changes-your-ui-contract/</loc>
    <lastmod>2026-11-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/streaming-changes-your-ui-contract/fig-partial.png</image:loc>
      <image:title>Streaming a response changes your UI contract, not just your latency</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/tap-and-press/</loc>
    <lastmod>2026-11-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/tap-and-press/hero.png</image:loc>
      <image:title>clickable does six things, and detectTapGestures does one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/parallel-agents-need-isolated-worktrees/</loc>
    <lastmod>2026-11-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/parallel-agents-need-isolated-worktrees/fig-worktrees.png</image:loc>
      <image:title>Two agents, one working directory, and a merge nobody asked for</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/pointer-input/</loc>
    <lastmod>2026-11-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/pointer-input/hero.png</image:loc>
      <image:title>Every gesture in Compose is a coroutine reading a stream of events</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-prompt-that-was-a-config-file/</loc>
    <lastmod>2026-11-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-prompt-that-was-a-config-file/fig-versioned.png</image:loc>
      <image:title>Your prompt is a config file, and it needs the same discipline</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-accessibility/</loc>
    <lastmod>2026-11-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-accessibility/hero.png</image:loc>
      <image:title>Automated checks find the missing labels. They can&apos;t tell you the label is wrong.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-abstraction-that-had-one-implementation/</loc>
    <lastmod>2026-11-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-abstraction-that-had-one-implementation/fig-layers.png</image:loc>
      <image:title>The interface with one implementation, and the three years it cost</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-architecture-decision-nobody-wrote-down/</loc>
    <lastmod>2026-11-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-architecture-decision-nobody-wrote-down/fig-relitigate.png</image:loc>
      <image:title>The architecture decision nobody wrote down, re-litigated four times</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-feature-nobody-used/</loc>
    <lastmod>2026-11-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-feature-nobody-used/fig-precommit.png</image:loc>
      <image:title>We shipped it, measured it, and deleted it eleven weeks later</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-metric-that-went-up-for-the-wrong-reason/</loc>
    <lastmod>2026-11-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-metric-that-went-up-for-the-wrong-reason/fig-proxy.png</image:loc>
      <image:title>Engagement went up, and it was because the app got slower</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/traversal-order/</loc>
    <lastmod>2026-11-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/traversal-order/hero.png</image:loc>
      <image:title>Reading order is layout order, until your layout stops matching your meaning</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/merging-and-clearing-semantics/</loc>
    <lastmod>2026-11-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/merging-and-clearing-semantics/hero.png</image:loc>
      <image:title>One card, four announcements — merging is the fix</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-lock-that-was-held-across-io/</loc>
    <lastmod>2026-11-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-lock-that-was-held-across-io/fig-hold.png</image:loc>
      <image:title>The lock held across a network call, and the deadlock that followed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-rollout-with-no-off-switch/</loc>
    <lastmod>2026-11-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-rollout-with-no-off-switch/fig-switch.png</image:loc>
      <image:title>The rollout with no off switch, discovered at 2am</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/semantics-basics/</loc>
    <lastmod>2026-11-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/semantics-basics/hero.png</image:loc>
      <image:title>Compose builds a second tree, and it&apos;s the one your users hear</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-config-change-that-was-a-deploy/</loc>
    <lastmod>2026-11-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-config-change-that-was-a-deploy/fig-paths.png</image:loc>
      <image:title>The config change that was really a deploy, and had none of the safeguards</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-n-plus-one-that-looked-fast/</loc>
    <lastmod>2026-11-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-n-plus-one-that-looked-fast/fig-count.png</image:loc>
      <image:title>The N+1 query that looked fast in development</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/context-is-a-budget-not-a-bucket/</loc>
    <lastmod>2026-11-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/context-is-a-budget-not-a-bucket/fig-budget.png</image:loc>
      <image:title>Context is a budget, and what you load first wins</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-animations/</loc>
    <lastmod>2026-11-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-animations/hero.png</image:loc>
      <image:title>Take the clock away and animations become testable</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-retrieval-that-found-the-wrong-file/</loc>
    <lastmod>2026-11-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-retrieval-that-found-the-wrong-file/fig-neighbours.png</image:loc>
      <image:title>The retrieval worked and returned the wrong file</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shared-elements/</loc>
    <lastmod>2026-11-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shared-elements/hero.png</image:loc>
      <image:title>A shared element transition is one element pretending to be two</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-agent-that-fixed-the-symptom/</loc>
    <lastmod>2026-11-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-agent-that-fixed-the-symptom/fig-paths.png</image:loc>
      <image:title>The agent fixed the test, not the bug, and the test was right</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-eval-that-passed-on-a-stub/</loc>
    <lastmod>2026-11-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-eval-that-passed-on-a-stub/fig-judge.png</image:loc>
      <image:title>The eval that passed because the function returned a plausible stub</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-loop-needs-a-terminal-condition/</loc>
    <lastmod>2026-10-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-loop-needs-a-terminal-condition/fig-halts.png</image:loc>
      <image:title>An agent loop without a terminal condition is a budget with no bottom</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/animated-visibility-and-content/</loc>
    <lastmod>2026-10-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/animated-visibility-and-content/hero.png</image:loc>
      <image:title>You cannot fade out something that has already left the composition</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/tool-output-is-untrusted-input/</loc>
    <lastmod>2026-10-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/tool-output-is-untrusted-input/fig-channel.png</image:loc>
      <image:title>Your agent&apos;s tool output is untrusted input</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-cache-that-returned-someone-elses-data/</loc>
    <lastmod>2026-10-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-cache-that-returned-someone-elses-data/fig-key.png</image:loc>
      <image:title>The cache that returned someone else&apos;s data</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/timeouts-need-a-budget-not-a-number/</loc>
    <lastmod>2026-10-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/timeouts-need-a-budget-not-a-number/fig-budget.png</image:loc>
      <image:title>Every timeout you set independently adds up to one that is wrong</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/transitions/</loc>
    <lastmod>2026-10-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/transitions/hero.png</image:loc>
      <image:title>updateTransition is a state machine that happens to animate</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/animate-as-state/</loc>
    <lastmod>2026-10-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/animate-as-state/hero.png</image:loc>
      <image:title>You don&apos;t animate from A to B, you declare B and Compose handles the rest</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-stability-is-a-contract/</loc>
    <lastmod>2026-10-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-stability-is-a-contract/fig-proof.png</image:loc>
      <image:title>Your data class is unstable and Compose told you by recomposing everything</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-text-measurement-cost/</loc>
    <lastmod>2026-10-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-text-measurement-cost/fig-measure.png</image:loc>
      <image:title>Text is the most expensive composable you use without thinking</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/choosing-an-animation-api/</loc>
    <lastmod>2026-10-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/choosing-an-animation-api/hero.png</image:loc>
      <image:title>Compose has a dozen animation APIs and one decision tree</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/derivedstateof-is-for-reads/</loc>
    <lastmod>2026-10-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/derivedstateof-is-for-reads/fig-narrow.png</image:loc>
      <image:title>derivedStateOf exists because you were recomposing on every keystroke</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-has-a-limit/</loc>
    <lastmod>2026-10-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-has-a-limit/fig-owner.png</image:loc>
      <image:title>State hoisting has a limit, and you have probably passed it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/bitmap-optimisation/</loc>
    <lastmod>2026-10-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/bitmap-optimisation/hero.png</image:loc>
      <image:title>Four bytes a pixel is the number that decides whether your app gets killed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/estimates-are-a-distribution/</loc>
    <lastmod>2026-10-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/estimates-are-a-distribution/fig-spread.png</image:loc>
      <image:title>An estimate is a distribution, and you reported the mode</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-code-review-that-should-have-been-a-conversation/</loc>
    <lastmod>2026-10-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-code-review-that-should-have-been-a-conversation/fig-rounds.png</image:loc>
      <image:title>The code review that should have been a conversation</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/deleting-code-is-the-work/</loc>
    <lastmod>2026-10-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/deleting-code-is-the-work/fig-cost.png</image:loc>
      <image:title>The most valuable pull request that quarter deleted 4,000 lines</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/idempotency-is-a-product-decision/</loc>
    <lastmod>2026-10-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/idempotency-is-a-product-decision/fig-identity.png</image:loc>
      <image:title>Idempotency is a product decision before it is a technical one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shapes-and-shadows/</loc>
    <lastmod>2026-10-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shapes-and-shadows/hero.png</image:loc>
      <image:title>A shadow needs a shape, and Compose won&apos;t guess one for you</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/brush-and-gradients/</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/brush-and-gradients/hero.png</image:loc>
      <image:title>Your gradient is measured in pixels, and that&apos;s the bug</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/logs-are-for-questions-you-have-not-asked/</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/logs-are-for-questions-you-have-not-asked/fig-cardinality.png</image:loc>
      <image:title>Logs are for the questions you have not thought of yet</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-dashboard-nobody-looked-at/</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-dashboard-nobody-looked-at/fig-signal.png</image:loc>
      <image:title>The dashboard nobody looked at, and the alert that fired every day</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/custom-painter/</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/custom-painter/hero.png</image:loc>
      <image:title>A Painter is the thing that knows how big it wants to be</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-error-message-is-the-api/</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-error-message-is-the-api/fig-consumers.png</image:loc>
      <image:title>Your error message is an API, and changing it breaks someone</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-test-that-asserted-the-implementation/</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-test-that-asserted-the-implementation/fig-coupling.png</image:loc>
      <image:title>The test that broke on every refactor was testing the wrong thing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/image-bitmap-vs-image-vector/</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/image-bitmap-vs-image-vector/hero.png</image:loc>
      <image:title>A vector costs CPU once, a bitmap costs memory forever</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-migration-with-no-rollback/</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-migration-with-no-rollback/fig-phases.png</image:loc>
      <image:title>The migration that could not be rolled back, and nobody noticed until it mattered</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-retry-that-made-it-worse/</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-retry-that-made-it-worse/fig-herd.png</image:loc>
      <image:title>The retry that turned a blip into an outage</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/constraints-flow-down-sizes-flow-up/</loc>
    <lastmod>2026-10-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/constraints-flow-down-sizes-flow-up/fig-pass.png</image:loc>
      <image:title>Constraints flow down, sizes flow up, and fillMaxSize means something specific</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/loading-images/</loc>
    <lastmod>2026-10-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/loading-images/hero.png</image:loc>
      <image:title>contentScale and Modifier.size are answering different questions</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/remember-is-not-a-cache/</loc>
    <lastmod>2026-10-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/remember-is-not-a-cache/fig-slots.png</image:loc>
      <image:title>remember is not a cache, and the key is the whole contract</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/side-effects-have-a-lifecycle/</loc>
    <lastmod>2026-10-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/side-effects-have-a-lifecycle/fig-once.png</image:loc>
      <image:title>LaunchedEffect(Unit) runs once, and that is usually the wrong once</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/autofill-in-compose/</loc>
    <lastmod>2026-10-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/autofill-in-compose/hero.png</image:loc>
      <image:title>Two lines of autofill are worth more than a week of form polish</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lazycolumn-keys-are-identity/</loc>
    <lastmod>2026-10-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lazycolumn-keys-are-identity/fig-identity.png</image:loc>
      <image:title>A LazyColumn without keys loses your scroll position and your animations</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/modifier-order-is-semantics/</loc>
    <lastmod>2026-10-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/modifier-order-is-semantics/fig-chain.png</image:loc>
      <image:title>Modifier order is not style, it is semantics</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/recomposition-is-not-rerendering/</loc>
    <lastmod>2026-10-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/recomposition-is-not-rerendering/fig-skip.png</image:loc>
      <image:title>Recomposition is not re-rendering, and that is why your list stutters</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/fonts-and-emoji/</loc>
    <lastmod>2026-10-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/fonts-and-emoji/hero.png</image:loc>
      <image:title>Your custom font has a fallback, and you didn&apos;t choose it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/ios-test-needs-a-simulator/</loc>
    <lastmod>2026-10-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/ios-test-needs-a-simulator/fig-runner.png</image:loc>
      <image:title>iosTest needs a booted simulator, and CI does not have one by default</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multiplatform-image-loading/</loc>
    <lastmod>2026-10-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multiplatform-image-loading/fig-pipeline.png</image:loc>
      <image:title>Image loading is the least portable thing in your shared UI</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shared-feature-flags/</loc>
    <lastmod>2026-10-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shared-feature-flags/fig-snapshot.png</image:loc>
      <image:title>A feature flag read on four platforms needs one source of truth and four caches</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-dependency-on-android-artifact/</loc>
    <lastmod>2026-10-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-dependency-on-android-artifact/fig-variants.png</image:loc>
      <image:title>A dependency that resolves in commonMain and only exists on Android</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-navigation-has-no-fragment/</loc>
    <lastmod>2026-10-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-navigation-has-no-fragment/fig-backstack.png</image:loc>
      <image:title>Shared navigation has no back stack owner, and that is the hard part</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/ksp-runs-per-target/</loc>
    <lastmod>2026-10-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/ksp-runs-per-target/fig-perTarget.png</image:loc>
      <image:title>KSP runs once per target, and your generated code can disagree with itself</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/text-fields-and-state/</loc>
    <lastmod>2026-10-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/text-fields-and-state/hero.png</image:loc>
      <image:title>TextFieldState is a document, and edits are transactions on it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/file-io-is-not-multiplatform/</loc>
    <lastmod>2026-10-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/file-io-is-not-multiplatform/fig-store.png</image:loc>
      <image:title>There is no File in commonMain, and that is a feature</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multiplatform-crypto-boundary/</loc>
    <lastmod>2026-10-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multiplatform-crypto-boundary/fig-trust.png</image:loc>
      <image:title>Hashing a password in shared code is the one thing you should not share</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multiplatform-error-types/</loc>
    <lastmod>2026-10-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multiplatform-error-types/fig-throw.png</image:loc>
      <image:title>Throwing across the bridge loses your exception type</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multiplatform-random-and-uuid/</loc>
    <lastmod>2026-10-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multiplatform-random-and-uuid/fig-ids.png</image:loc>
      <image:title>There is no UUID in the Kotlin standard library, and the fixes differ per platform</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/paragraph-and-layout/</loc>
    <lastmod>2026-10-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/paragraph-and-layout/hero.png</image:loc>
      <image:title>Your list rows are different heights because text measurement is honest</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-preview-is-android-only/</loc>
    <lastmod>2026-10-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-preview-is-android-only/fig-preview.png</image:loc>
      <image:title>@Preview is Android-only, and your shared UI has no preview at all</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/desktop-target-is-the-cheap-oracle/</loc>
    <lastmod>2026-10-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/desktop-target-is-the-cheap-oracle/fig-loop.png</image:loc>
      <image:title>The desktop target is the cheapest bug oracle you are not using</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/displaying-and-styling-text/</loc>
    <lastmod>2026-10-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/displaying-and-styling-text/hero.png</image:loc>
      <image:title>AnnotatedString is why you don&apos;t need three Text composables in a Row</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/gradle-version-catalog-is-the-contract/</loc>
    <lastmod>2026-10-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/gradle-version-catalog-is-the-contract/fig-resolution.png</image:loc>
      <image:title>A version catalog is a contract, and a transitive bump breaks it quietly</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shared-viewmodel-lifecycle/</loc>
    <lastmod>2026-10-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shared-viewmodel-lifecycle/fig-owner.png</image:loc>
      <image:title>A shared ViewModel has no lifecycle, so you have to give it one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/flow-is-cold-until-someone-collects/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/flow-is-cold-until-someone-collects/fig-collectors.png</image:loc>
      <image:title>A Flow is cold, and that is why your ViewModel fires three network calls</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multiplatform-logging-has-no-logcat/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multiplatform-logging-has-no-logcat/fig-sinks.png</image:loc>
      <image:title>There is no Logcat in commonMain, and println is not a logger</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/new-styles-api/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/new-styles-api/hero.png</image:loc>
      <image:title>Compose is growing a styles API, and it&apos;s for the gap theming never covered</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/runtest-virtual-time/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/runtest-virtual-time/fig-clock.png</image:loc>
      <image:title>runTest skips your delays, which is why the flaky test passed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/source-set-hierarchy-is-a-graph/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/source-set-hierarchy-is-a-graph/fig-graph.png</image:loc>
      <image:title>Source sets are a graph, and iosMain is not where you think it is</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stateflow-has-no-events/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stateflow-has-no-events/fig-conflate.png</image:loc>
      <image:title>StateFlow drops what you needed and keeps what you didn&apos;t</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/supervisor-job-scope-boundary/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/supervisor-job-scope-boundary/fig-propagate.png</image:loc>
      <image:title>One failed child cancelled the whole screen, and the scope was the reason</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/commontest-runs-everywhere/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/commontest-runs-everywhere/fig-matrix.png</image:loc>
      <image:title>commonTest runs on every target, which is the point and the cost</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/composeresources-is-not-android-resources/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/composeresources-is-not-android-resources/fig-resolve.png</image:loc>
      <image:title>composeResources is not Android resources, and qualifiers resolve differently</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/custom-theming/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/custom-theming/hero.png</image:loc>
      <image:title>Extending MaterialTheme beats replacing it, until it doesn&apos;t</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/datetime-ships-per-platform/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/datetime-ships-per-platform/fig-tz.png</image:loc>
      <image:title>kotlinx-datetime has no Calendar, and the timezone database ships per platform</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/expect-actual-is-not-an-interface/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/expect-actual-is-not-an-interface/fig-resolve.png</image:loc>
      <image:title>expect/actual is not an interface, and the difference shows up at link time</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/ios-framework-is-the-api-surface/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/ios-framework-is-the-api-surface/fig-surface.png</image:loc>
      <image:title>The iOS framework you export is an API, and nobody reviews it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-driver-per-platform/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-driver-per-platform/fig-strata.png</image:loc>
      <image:title>Your shared database needs a driver per platform, and that is the easy half</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/koin-modules-that-compile-everywhere/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/koin-modules-that-compile-everywhere/fig-defer.png</image:loc>
      <image:title>A DI module that compiles on every target and only works on one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kotlin-class-becomes-objc-class/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kotlin-class-becomes-objc-class/fig-export.png</image:loc>
      <image:title>Your Kotlin class becomes an Objective-C class, which is why the name is wrong</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/native-memory-crosses-the-bridge/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/native-memory-crosses-the-bridge/fig-cycle.png</image:loc>
      <image:title>Kotlin/Native memory is not the JVM&apos;s, and a retain cycle crosses the bridge</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/one-build-five-outputs/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/one-build-five-outputs/fig-split.png</image:loc>
      <image:title>One Gradle build, five outputs, and the cache that only helps three</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/one-ktor-client-four-engines/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/one-ktor-client-four-engines/fig-engines.png</image:loc>
      <image:title>One Ktor client, four engines, and the timeouts that don&apos;t mean the same thing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/platform-bridge-lifetime/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/platform-bridge-lifetime/fig-lifetime.png</image:loc>
      <image:title>A platform bridge is an interface with a lifetime problem</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/serialization-is-compile-time/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/serialization-is-compile-time/fig-known.png</image:loc>
      <image:title>kotlinx.serialization is compile-time, which is why your polymorphism fails at runtime</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/suspend-becomes-a-callback-in-swift/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/suspend-becomes-a-callback-in-swift/fig-bridge.png</image:loc>
      <image:title>Your suspend function becomes a callback in Swift, and cancellation does not survive</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/third-time-it-filled-up/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/third-time-it-filled-up/fig-lives.png</image:loc>
      <image:title>The third time this filled up, I diagnosed it as an outage</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/wasm-has-no-threads/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/wasm-has-no-threads/fig-queue.png</image:loc>
      <image:title>Wasm has no threads, and that decides your dispatcher</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shape-system/</loc>
    <lastmod>2026-10-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shape-system/hero.png</image:loc>
      <image:title>Corner radius is a signal, and Material has five of them</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/typography-scale/</loc>
    <lastmod>2026-10-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/typography-scale/hero.png</image:loc>
      <image:title>Fifteen named text styles are fewer decisions than five</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/colour-schemes-dynamic-colour/</loc>
    <lastmod>2026-10-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/colour-schemes-dynamic-colour/hero.png</image:loc>
      <image:title>Dynamic colour takes your brand palette away, and that&apos;s the deal</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/m3-anatomy/</loc>
    <lastmod>2026-10-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/m3-anatomy/hero.png</image:loc>
      <image:title>MaterialTheme is three CompositionLocals and nothing else</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/search-and-chips/</loc>
    <lastmod>2026-10-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/search-and-chips/hero.png</image:loc>
      <image:title>SearchBar has two states, and the second one takes over the screen</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/pickers/</loc>
    <lastmod>2026-10-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/pickers/hero.png</image:loc>
      <image:title>Date pickers are a timezone bug with a calendar attached</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/progress-and-feedback/</loc>
    <lastmod>2026-10-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/progress-and-feedback/hero.png</image:loc>
      <image:title>The spinner you show for 200ms is worse than no spinner</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/budget-as-a-config-value/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/budget-as-a-config-value/hero-bare.png</image:loc>
      <image:title>A ceiling in a conditional is one someone deletes</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/capsule-verify-as-contract/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/capsule-verify-as-contract/hero-bare.png</image:loc>
      <image:title>A command that checks its own contract</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/dispatch-tiers/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/dispatch-tiers/hero-bare.png</image:loc>
      <image:title>Not every step needs the expensive model</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/navigation-components/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/navigation-components/hero.png</image:loc>
      <image:title>Bar, rail, drawer — the same destinations, chosen by window width</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/rules-at-tool-time/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/rules-at-tool-time/hero-bare.png</image:loc>
      <image:title>Loading every rule up front is how none of them apply</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/worktrees-for-parallel-agents/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/worktrees-for-parallel-agents/hero-bare.png</image:loc>
      <image:title>Two agents, one working tree, one disaster</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-that-reads-its-own-output/</loc>
    <lastmod>2026-10-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-that-reads-its-own-output/header.jpg</image:loc>
      <image:title>Reading back is not optional</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/dialogs-and-sheets/</loc>
    <lastmod>2026-10-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/dialogs-and-sheets/hero.png</image:loc>
      <image:title>A dialog is state, not a function you call</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/warm-context-codegen/</loc>
    <lastmod>2026-10-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/warm-context-codegen/header.jpg</image:loc>
      <image:title>One warm context beats five cold ones</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/capability-gaps-are-not-done/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/capability-gaps-are-not-done/header.jpg</image:loc>
      <image:title>A step that never ran is not a step that passed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/content-addressed-staleness/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/content-addressed-staleness/header.jpg</image:loc>
      <image:title>Is this derived thing current? Make it a comparison</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/design-tier-order/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/design-tier-order/header.jpg</image:loc>
      <image:title>Which artifact is actually the design</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/drift-between-spec-and-source/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/drift-between-spec-and-source/header.jpg</image:loc>
      <image:title>The running app and the spec disagree, and only one is documented</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/enumerate-then-drain/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/enumerate-then-drain/header.jpg</image:loc>
      <image:title>Print the list before you touch anything</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/generators-are-the-only-writers/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/generators-are-the-only-writers/header.jpg</image:loc>
      <image:title>The orchestrator that wrote the code itself</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/idea-layer-is-the-source/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/idea-layer-is-the-source/header.jpg</image:loc>
      <image:title>Editing the generated thing is how the spec stops meaning anything</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/provenance-sidecars/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/provenance-sidecars/header.jpg</image:loc>
      <image:title>Every generated file should say what made it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/publication-versus-personal/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/publication-versus-personal/header.jpg</image:loc>
      <image:title>The post that went to the wrong account</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/status-that-lives-in-someones-head/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/status-that-lives-in-someones-head/header.jpg</image:loc>
      <image:title>A status column is wrong within a week</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/tags-are-the-filing-system/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/tags-are-the-filing-system/header.jpg</image:loc>
      <image:title>Twenty-four of my tags file exactly one post</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/text-fields/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/text-fields/hero.png</image:loc>
      <image:title>The TextField overload you&apos;re using is probably the deprecated one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-api-that-succeeded-and-did-nothing/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-api-that-succeeded-and-did-nothing/header.jpg</image:loc>
      <image:title>It returned an identifier and produced nothing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-bidirectional-link/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-bidirectional-link/header.jpg</image:loc>
      <image:title>One of the two links is always missing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-census-that-found-303/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-census-that-found-303/header.jpg</image:loc>
      <image:title>Three hundred and three of three hundred and four</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-gate-that-certified-a-stale-build/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-gate-that-certified-a-stale-build/header.jpg</image:loc>
      <image:title>The audit was green, specific, and about the wrong artifact</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-line-your-loop-dropped/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-line-your-loop-dropped/header.jpg</image:loc>
      <image:title>Never attempted, and the summary said complete</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/warning-is-not-a-refusal/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/warning-is-not-a-refusal/header.jpg</image:loc>
      <image:title>A warning is not a refusal, and the driver could not tell</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-a-good-error-message-names/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-a-good-error-message-names/header.jpg</image:loc>
      <image:title>Name the fault, and rule out the wrong fix</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-publishing-cannot-automate/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-publishing-cannot-automate/header.jpg</image:loc>
      <image:title>The two fields that only exist in the interface</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/context-packs-for-generators/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/context-packs-for-generators/header.jpg</image:loc>
      <image:title>A generator given the wrong context does not stop</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/room-or-memory-not-both/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/room-or-memory-not-both/header.jpg</image:loc>
      <image:title>Two places that both think they are the truth</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/selection-controls/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/selection-controls/hero.png</image:loc>
      <image:title>Checkbox, radio, switch: three controls, three different questions</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stub-that-looks-like-a-feature/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stub-that-looks-like-a-feature/header.jpg</image:loc>
      <image:title>The export engine that exported nothing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/sync-orchestrator-with-backoff/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/sync-orchestrator-with-backoff/header.jpg</image:loc>
      <image:title>A retry queue with nothing to run it is a graveyard</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/training-corpus-is-the-source/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/training-corpus-is-the-source/header.jpg</image:loc>
      <image:title>The corpus your generator reads is production code</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-shipped-kmp-app-play-store/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-shipped-kmp-app-play-store/header.jpg</image:loc>
      <image:title>An agent drove a KMP app to the Play Store. The codegen was the easy half.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/buttons-and-fab/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/buttons-and-fab/hero.png</image:loc>
      <image:title>Five buttons, one hierarchy, and the rule that decides which</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/canonical-before-syndication/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/canonical-before-syndication/header.jpg</image:loc>
      <image:title>Syndicate to a 404 and you donate the SEO</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-compiles-renders-wrong/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-compiles-renders-wrong/header.jpg</image:loc>
      <image:title>It compiles, the test is green, and the screen is a grey box</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/conflict-policy-in-a-type/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/conflict-policy-in-a-type/header.jpg</image:loc>
      <image:title>Last write wins is a decision, not a default</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/dead-routes-nothing-reaches/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/dead-routes-nothing-reaches/header.jpg</image:loc>
      <image:title>A screen nothing navigates to still compiles</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/description-bands-that-get-severed/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/description-bands-that-get-severed/header.jpg</image:loc>
      <image:title>Your meta description is cut mid-sentence</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/design-tokens-or-magic-numbers/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/design-tokens-or-magic-numbers/header.jpg</image:loc>
      <image:title>A hardcoded dp is a token you did not name</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/dev-blog-ad-economics/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/dev-blog-ad-economics/header.jpg</image:loc>
      <image:title>The ad slots on this blog are finished and render nothing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/feeds-are-a-lower-bound/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/feeds-are-a-lower-bound/header.jpg</image:loc>
      <image:title>A tag feed is not a list of your posts</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/fineract-integration-reality/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/fineract-integration-reality/header.jpg</image:loc>
      <image:title>The banking API that deliberately will not tell you things</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/golden-screenshots-that-belong-in-git/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/golden-screenshots-that-belong-in-git/header.jpg</image:loc>
      <image:title>The only screenshots worth committing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/hundred-posts-thirty-days/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/hundred-posts-thirty-days/header.jpg</image:loc>
      <image:title>A hundred posts is the easy half</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/koin-module-nobody-included/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/koin-module-nobody-included/header.jpg</image:loc>
      <image:title>The module that compiled and was never installed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/ksp-generated-registries/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/ksp-generated-registries/header.jpg</image:loc>
      <image:title>Stop hand-registering what a processor can see</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/locale-coverage-is-countable/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/locale-coverage-is-countable/header.jpg</image:loc>
      <image:title>Partial translation is a number, not a feeling</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/measuring-a-blog-honestly/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/measuring-a-blog-honestly/header.jpg</image:loc>
      <image:title>The numbers worth watching, and the ones that flatter</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/no-hardcoded-strings/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/no-hardcoded-strings/header.jpg</image:loc>
      <image:title>The string literal that cannot be translated</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/og-image-per-post/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/og-image-per-post/header.jpg</image:loc>
      <image:title>One social card for every post is one card nobody shares</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/page-swap-in-a-transaction/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/page-swap-in-a-transaction/header.jpg</image:loc>
      <image:title>Your list flickers because the page swap is not atomic</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/recomposition-scope-is-the-bug/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/recomposition-scope-is-the-bug/header.jpg</image:loc>
      <image:title>Compose is doing what you told it; the instruction was wrong</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/seo-zero-to-organic/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/seo-zero-to-organic/header.jpg</image:loc>
      <image:title>An app store is a discovery surface. A website is a building.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testtags-are-an-api/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testtags-are-an-api/header.jpg</image:loc>
      <image:title>A testTag is a contract between the screen and its test</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/three-repo-commit-order/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/three-repo-commit-order/header.jpg</image:loc>
      <image:title>Three repositories, one change, and the order that stops it corrupting</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/vault-killed-dotenv/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/vault-killed-dotenv/header.jpg</image:loc>
      <image:title>Every .env file in my projects is gone and nothing broke</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/act-and-the-macos-gap/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/act-and-the-macos-gap/header.jpg</image:loc>
      <image:title>What act can reproduce, and what it silently cannot</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/branch-names-are-a-protocol/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/branch-names-are-a-protocol/header.jpg</image:loc>
      <image:title>A hand-typed branch name skips the machinery</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/canonical-paths-for-secrets/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/canonical-paths-for-secrets/header.jpg</image:loc>
      <image:title>Where a secret lives should never be a decision</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/commonmain-first/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/commonmain-first/header.jpg</image:loc>
      <image:title>Write it in commonMain until the compiler stops you</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/config-cache-fixed-at-source/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/config-cache-fixed-at-source/header.jpg</image:loc>
      <image:title>A task that captures Project is a bug, not a gap</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/dependency-baseline-as-a-gate/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/dependency-baseline-as-a-gate/header.jpg</image:loc>
      <image:title>A number in CI is the only budget that holds</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/draft-prs-by-default/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/draft-prs-by-default/header.jpg</image:loc>
      <image:title>Open it as a draft and let a human merge</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/expect-actual-is-a-promise-twice/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/expect-actual-is-a-promise-twice/header.jpg</image:loc>
      <image:title>Every expect declaration is a promise you made twice</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/first-release-checks-nobody-runs-twice/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/first-release-checks-nobody-runs-twice/header.jpg</image:loc>
      <image:title>The Play Store checks you only fail once</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/fork-modules-in-the-wrong-file/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/fork-modules-in-the-wrong-file/header.jpg</image:loc>
      <image:title>Thirty-six modules, one sync from deletion</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/generate-before-deploy/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/generate-before-deploy/header.jpg</image:loc>
      <image:title>Your deploy said zero changed because it never looked</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/immutable-pins-for-rehosted-assets/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/immutable-pins-for-rehosted-assets/header.jpg</image:loc>
      <image:title>Pin a commit, not a branch, when someone rehosts your images</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/keychain-surgery-you-should-never-do/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/keychain-surgery-you-should-never-do/header.jpg</image:loc>
      <image:title>The keychain repair that broke signing for a day</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/never-kill-the-build-daemon/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/never-kill-the-build-daemon/header.jpg</image:loc>
      <image:title>Killing the Gradle daemon costs you thirty minutes</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/never-set-a-secret-on-the-repo/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/never-set-a-secret-on-the-repo/header.jpg</image:loc>
      <image:title>Setting a secret on the repo is how it stops having an owner</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/protected-branch-write-refusal/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/protected-branch-write-refusal/header.jpg</image:loc>
      <image:title>Refusing the write is cheaper than recovering the work</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/push-and-pray-ci-loop/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/push-and-pray-ci-loop/header.jpg</image:loc>
      <image:title>Forty-five minutes per CI guess is not a feedback loop</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/release-in-phases/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/release-in-phases/header.jpg</image:loc>
      <image:title>A release is phases, not a button</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/scaffold-and-app-bars/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/scaffold-and-app-bars/hero.png</image:loc>
      <image:title>The Scaffold parameter everyone ignores is the one that breaks the layout</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/search-indexing-has-a-quota/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/search-indexing-has-a-quota/header.jpg</image:loc>
      <image:title>Your sitemap ping has a daily budget</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/secret-names-are-an-interface/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/secret-names-are-an-interface/header.jpg</image:loc>
      <image:title>Two prefixes decide who owns a credential</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/signing-belongs-to-one-flow/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/signing-belongs-to-one-flow/fig-writers.png</image:loc>
      <image:title>Signing state has exactly one owner, or it has none</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/store-assets-are-generated/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/store-assets-are-generated/header.jpg</image:loc>
      <image:title>Screenshots are a build artifact, not a design deliverable</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/store-listing-that-shipped-the-template/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/store-listing-that-shipped-the-template/fig-silent.png</image:loc>
      <image:title>The placeholder listing that almost went live</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/store5-five-ways-to-disagree/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/store5-five-ways-to-disagree/header.jpg</image:loc>
      <image:title>Five ways a cache and its writes drift apart</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stream-versus-streamfresh/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stream-versus-streamfresh/header.jpg</image:loc>
      <image:title>A read path that cannot ask for fresh data</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/submodule-pointer-discipline/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/submodule-pointer-discipline/header.jpg</image:loc>
      <image:title>The submodule pointer you accidentally reverted</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/template-fixes-flow-upstream/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/template-fixes-flow-upstream/header.jpg</image:loc>
      <image:title>Fixing it only in your app is how the template keeps the bug</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-command-that-leaked-a-secret/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-command-that-leaked-a-secret/header.jpg</image:loc>
      <image:title>The command that leaked a secret was not on the list</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-mirror-with-no-command/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-mirror-with-no-command/header.jpg</image:loc>
      <image:title>A documented workflow nothing could execute</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/touch-id-for-a-vault/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/touch-id-for-a-vault/header.jpg</image:loc>
      <image:title>An auth gate you do not resent</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/version-manifest-single-source/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/version-manifest-single-source/header.jpg</image:loc>
      <image:title>Version state belongs in exactly one file</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-a-deploy-should-print/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-a-deploy-should-print/header.jpg</image:loc>
      <image:title>Your deploy output is a verification surface</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/which-feature-module-is-the-real-one/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/which-feature-module-is-the-real-one/header.jpg</image:loc>
      <image:title>Two modules with the same name, one is a demo shell</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/battery-cost-of-inference/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/battery-cost-of-inference/header.png</image:loc>
      <image:title>What a local model does to your battery</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/cold-start-of-a-local-model/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/cold-start-of-a-local-model/header.png</image:loc>
      <image:title>The first inference is the one users judge you on</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/connected-displays/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/connected-displays/hero.png</image:loc>
      <image:title>An external display is a second window, not a bigger one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/coreml-vs-litert/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/coreml-vs-litert/header.png</image:loc>
      <image:title>Core ML and LiteRT solve the same problem differently</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/embeddings-on-device-search/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/embeddings-on-device-search/header.png</image:loc>
      <image:title>On-device semantic search over the user&apos;s own data</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/fallback-when-the-device-cannot/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/fallback-when-the-device-cannot/header.png</image:loc>
      <image:title>Designing the fallback for a device that cannot run your model</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/gemini-nano-what-it-costs/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/gemini-nano-what-it-costs/header.png</image:loc>
      <image:title>Gemini Nano on-device: what it actually costs you</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/hybrid-routing-local-remote/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/hybrid-routing-local-remote/header.png</image:loc>
      <image:title>Routing between a local model and a remote one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/kmp-expect-actual-for-inference/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/kmp-expect-actual-for-inference/header.png</image:loc>
      <image:title>One inference API, two platform runtimes</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/measuring-on-device-quality/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/measuring-on-device-quality/header.png</image:loc>
      <image:title>How to know your on-device model got worse</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/mlkit-genai-in-compose/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/mlkit-genai-in-compose/header.png</image:loc>
      <image:title>Wiring ML Kit GenAI into a Compose screen without blocking it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/model-in-the-apk/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/model-in-the-apk/header.png</image:loc>
      <image:title>Shipping a model in your APK without breaking the size budget</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/model-update-without-store-release/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/model-update-without-store-release/header.png</image:loc>
      <image:title>Updating a model without shipping an app release</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/offline-first-ai-feature/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/offline-first-ai-feature/header.png</image:loc>
      <image:title>An AI feature that still works on a plane</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/privacy-argument-that-is-real/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/privacy-argument-that-is-real/header.png</image:loc>
      <image:title>The on-device privacy argument, stated honestly</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/prompt-injection-on-device/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/prompt-injection-on-device/header.png</image:loc>
      <image:title>Prompt injection does not go away because the model is local</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/quantization-quality-cliff/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/quantization-quality-cliff/header.png</image:loc>
      <image:title>Quantization has a quality cliff, and you can see it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/streaming-tokens-into-compose/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/streaming-tokens-into-compose/header.png</image:loc>
      <image:title>Streaming tokens into Compose without recomposing the world</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-a-nondeterministic-screen/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-a-nondeterministic-screen/header.png</image:loc>
      <image:title>How do you test a screen whose text is generated?</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-nano-cannot-do/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-nano-cannot-do/header.png</image:loc>
      <image:title>What a small on-device model simply cannot do</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/when-on-device-beats-the-api/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/when-on-device-beats-the-api/header.png</image:loc>
      <image:title>The latency maths that decides on-device versus an API call</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/adb-install-r-stale-screenshot/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/adb-install-r-stale-screenshot/header.png</image:loc>
      <image:title>adb install -r doesn&apos;t kill your app, so your screenshot is a lie</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-cost-control/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-cost-control/header.png</image:loc>
      <image:title>Where your AI coding bill actually goes: I measured one long session</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-driven-refactor-receipts/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-driven-refactor-receipts/header.png</image:loc>
      <image:title>An agent-driven refactor, with the receipts</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-in-ci/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-in-ci/header.png</image:loc>
      <image:title>Running an AI agent in CI without it spending your budget</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-memory-that-is-not-a-database/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-memory-that-is-not-a-database/header.png</image:loc>
      <image:title>Agent memory that is just files</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-permissions-model/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-permissions-model/header.png</image:loc>
      <image:title>What should an AI agent never be allowed to do?</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-that-refuses/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-that-refuses/header.png</image:loc>
      <image:title>The most useful thing my agent does is refuse</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-writes-its-own-gate/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-writes-its-own-gate/header.png</image:loc>
      <image:title>The agent that writes the check that blocks it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agents-that-read-the-device/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agents-that-read-the-device/header.png</image:loc>
      <image:title>An agent that installs the app and looks at the screen</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/context-window-is-not-the-constraint/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/context-window-is-not-the-constraint/header.png</image:loc>
      <image:title>The context window is not your constraint — what you put in it is</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/deterministic-control-flow-for-agents/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/deterministic-control-flow-for-agents/header.png</image:loc>
      <image:title>Put the control flow in code, not in the prompt</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/foldables/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/foldables/hero.png</image:loc>
      <image:title>A hinge is a physical object, and your layout should know where it is</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/human-gate-placement/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/human-gate-placement/header.png</image:loc>
      <image:title>Where to put the human</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/mcp-versus-a-shell-script/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/mcp-versus-a-shell-script/header.png</image:loc>
      <image:title>MCP, or a shell script? The honest comparison</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/measuring-before-tuning-the-knob/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/measuring-before-tuning-the-knob/header.png</image:loc>
      <image:title>I swept the parameter instead of arguing about it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/one-rule-one-place-agent-drift/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/one-rule-one-place-agent-drift/header.png</image:loc>
      <image:title>The same rule in two files is how agent-written code drifts</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/orchestrating-without-nesting/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/orchestrating-without-nesting/header.png</image:loc>
      <image:title>One level of fan-out, and why that is enough</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/prompt-is-not-the-artifact/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/prompt-is-not-the-artifact/header.png</image:loc>
      <image:title>The prompt is not the artifact — the runtime is</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/rate-limit-is-not-an-error/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/rate-limit-is-not-an-error/header.png</image:loc>
      <image:title>429 is not an error, it is a schedule</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/self-healing-loops/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/self-healing-loops/header.png</image:loc>
      <image:title>A gate that fixes what it finds</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/six-guardrails-agent-mid-command/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/six-guardrails-agent-mid-command/header.png</image:loc>
      <image:title>Six guardrails that stop my AI agent mid-command</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/skills-versus-tools/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/skills-versus-tools/header.png</image:loc>
      <image:title>Skills, tools, and the difference that matters</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/structured-output-contracts/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/structured-output-contracts/header.png</image:loc>
      <image:title>Stop parsing your AI&apos;s prose. Make it return a schema you can assert on.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/subagents-are-context-isolation/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/subagents-are-context-isolation/header.png</image:loc>
      <image:title>Subagents are context isolation, not parallelism</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/telemetry-for-agents/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/telemetry-for-agents/header.png</image:loc>
      <image:title>What to log when the actor is a model</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/tool-that-returns-too-much/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/tool-that-returns-too-much/header.png</image:loc>
      <image:title>One tool call can destroy your agent&apos;s context window</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/verification-that-can-pass-while-broken/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/verification-that-can-pass-while-broken/header.png</image:loc>
      <image:title>A verification step that can pass while the bug is present is not a verification step</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-the-ledger-is-for/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-the-ledger-is-for/header.png</image:loc>
      <image:title>Write down what you did to an external service</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/when-not-to-let-the-agent-write-it/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/when-not-to-let-the-agent-write-it/header.png</image:loc>
      <image:title>Three kinds of code I stopped letting an agent write</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/when-the-agent-should-halt/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/when-the-agent-should-halt/header.png</image:loc>
      <image:title>Teaching an agent when to stop</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/supporting-pane/</loc>
    <lastmod>2026-09-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/supporting-pane/hero.png</image:loc>
      <image:title>SupportingPaneScaffold is for content that is about other content</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/list-detail-pane/</loc>
    <lastmod>2026-09-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/list-detail-pane/hero.png</image:loc>
      <image:title>ListDetailPaneScaffold: the back button is the whole reason it exists</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/canonical-layouts/</loc>
    <lastmod>2026-09-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/canonical-layouts/hero.png</image:loc>
      <image:title>There are three adaptive layouts, and you probably don&apos;t need a fourth</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/window-size-classes/</loc>
    <lastmod>2026-09-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/window-size-classes/hero.png</image:loc>
      <image:title>Screen size is the wrong thing to branch on. Window size is the right one.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/flexbox-alternative/</loc>
    <lastmod>2026-09-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/flexbox-alternative/hero.png</image:loc>
      <image:title>Porting FlexboxLayout: every flex property maps onto something, but not onto one thing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/grid-layout/</loc>
    <lastmod>2026-09-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/grid-layout/hero.png</image:loc>
      <image:title>Sometimes the right grid is a Column of Rows</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/flow-layout/</loc>
    <lastmod>2026-09-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/flow-layout/hero.png</image:loc>
      <image:title>FlowRow is the chip group you kept writing a custom Layout for</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/pager/</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/pager/hero.png</image:loc>
      <image:title>HorizontalPager is a lazy list that snaps — and PagerState is where the bugs live</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lazy-grid/</loc>
    <lastmod>2026-09-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lazy-grid/hero.png</image:loc>
      <image:title>A grid is not a list with two columns</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lazy-column/</loc>
    <lastmod>2026-09-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lazy-column/hero.png</image:loc>
      <image:title>LazyColumn is not a faster Column, and items(key = …) is not optional</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/custom-modifiers/</loc>
    <lastmod>2026-09-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/custom-modifiers/hero.png</image:loc>
      <image:title>Write a custom modifier only after you&apos;ve ruled out a function</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/constraints-and-modifiers/</loc>
    <lastmod>2026-09-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/constraints-and-modifiers/hero.png</image:loc>
      <image:title>Why fillMaxWidth() sometimes does nothing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/modifiers-part-2-order/</loc>
    <lastmod>2026-09-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/modifiers-part-2-order/hero.png</image:loc>
      <image:title>padding().background() and background().padding() are not the same picture</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/modifiers-part-1/</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/modifiers-part-1/hero.png</image:loc>
      <image:title>A Modifier is a linked list, and that explains almost everything about it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/layout-basics/</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/layout-basics/hero.png</image:loc>
      <image:title>Column, Row, Box — and the single-pass rule that makes them fast</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-holders-pattern/</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-holders-pattern/hero.png</image:loc>
      <image:title>Not every state holder is a ViewModel</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/architectural-layering/</loc>
    <lastmod>2026-09-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/architectural-layering/hero.png</image:loc>
      <image:title>The UI layer has two halves, and merging them is why screens become untestable</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compositionlocal/</loc>
    <lastmod>2026-09-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compositionlocal/hero.png</image:loc>
      <image:title>CompositionLocal is not dependency injection, and using it that way hurts later</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/saving-ui-state/</loc>
    <lastmod>2026-09-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/saving-ui-state/hero.png</image:loc>
      <image:title>rememberSaveable survives what remember doesn&apos;t — and it isn&apos;t a bigger remember</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-pitfalls/</loc>
    <lastmod>2026-09-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-pitfalls/hero.png</image:loc>
      <image:title>Six parameters deep and none of them are used here</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-in-viewmodel/</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-in-viewmodel/hero.png</image:loc>
      <image:title>The ViewModel is not the default place for state. It&apos;s the place for state that outlives the screen.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-basics/</loc>
    <lastmod>2026-09-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-basics/hero.png</image:loc>
      <image:title>State hoisting is one question: who else needs to know?</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/three-phases/</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/three-phases/hero.png</image:loc>
      <image:title>Composition, layout, drawing — and why reading a value in the wrong one costs frames</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/side-effects-intro/</loc>
    <lastmod>2026-09-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/side-effects-intro/hero.png</image:loc>
      <image:title>Your composable ran four times. So did your network call.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lifecycle-of-composables/</loc>
    <lastmod>2026-09-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lifecycle-of-composables/hero.png</image:loc>
      <image:title>A composable&apos;s lifecycle is three events, and none of them is onDestroy</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/recomposition/</loc>
    <lastmod>2026-09-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/recomposition/hero.png</image:loc>
      <image:title>Recomposition doesn&apos;t re-run your screen. It re-runs the scopes that read what changed.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/first-composable/</loc>
    <lastmod>2026-09-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/first-composable/hero.png</image:loc>
      <image:title>What @Composable actually does to your function</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/thinking-in-compose/</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/thinking-in-compose/hero.png</image:loc>
      <image:title>Thinking in Compose: you can&apos;t reach into the UI any more, and that&apos;s the point</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/setup-and-bom/</loc>
    <lastmod>2026-09-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/setup-and-bom/hero.png</image:loc>
      <image:title>Compose has two version problems, and the BOM only solves one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/basics-of-jetpack-compose/</loc>
    <lastmod>2024-03-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/basics-of-jetpack-compose/hero.png</image:loc>
      <image:title>Basics of Jetpack Compose</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/what-is-jetpack-compose/</loc>
    <lastmod>2024-02-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/what-is-jetpack-compose/hero.png</image:loc>
      <image:title>What is Jetpack Compose?</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/analyse-your-android-knowledge/</loc>
    <lastmod>2024-02-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/analyse-your-android-knowledge/hero.png</image:loc>
      <image:title>Analyse your Android knowledge before you learn anything new</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/adversarial-verification/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/adversarial-verification/hero.png</image:loc>
      <image:title>Asking AI to check its own work does not work. Ask it to disprove it.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/agent-said-fixed-it-was-not/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/agent-said-fixed-it-was-not/header.png</image:loc>
      <image:title>The agent said &apos;fixed&apos;. The list said otherwise</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/browser-driving-agent/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/browser-driving-agent/hero.png</image:loc>
      <image:title>An agent that checks the page itself</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/canary-that-cannot-fail/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/canary-that-cannot-fail/hero.png</image:loc>
      <image:title>A test that cannot fail is not a test. Mine passed twice.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/cost-of-an-irreversible-api-call/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/cost-of-an-irreversible-api-call/hero.png</image:loc>
      <image:title>Design for the API call you cannot take back</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/hooks-as-the-enforcement-layer/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/hooks-as-the-enforcement-layer/header.png</image:loc>
      <image:title>Telling an AI agent your rules does not make it follow them</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/hundred-posts-thirty-days-gates/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/hundred-posts-thirty-days-gates/hero.png</image:loc>
      <image:title>100 technical posts, and the gates that stopped them being slop</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/idempotent-agent-actions/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/idempotent-agent-actions/header.png</image:loc>
      <image:title>Every action your AI agent takes should be safe to run twice</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/reading-the-405/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/reading-the-405/hero.png</image:loc>
      <image:title>Read the status code before you believe the README</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/secret-that-reached-the-transcript/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/secret-that-reached-the-transcript/hero.png</image:loc>
      <image:title>The command that leaked a secret was not cat</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stale-doc-is-a-wrong-doc/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stale-doc-is-a-wrong-doc/header.png</image:loc>
      <image:title>A stale doc does more damage than a missing one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/two-hundred-line-runtime/</loc>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/two-hundred-line-runtime/header.png</image:loc>
      <image:title>Why every command runtime is capped at 200 lines</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/company</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/contact</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/privacy</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/terms</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/refund</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/support</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
</urlset>
