<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Cross Commit - Medium]]></title>
        <description><![CDATA[Practical stories on Swift, SwiftUI, Kotlin, Jetpack Compose, mobile architecture, AI, and the latest tech, written by engineers who ship real apps. Open to writers worldwide. - Medium]]></description>
        <link>https://medium.com/cross-commit?source=rss----c529b14d1f55---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Cross Commit - Medium</title>
            <link>https://medium.com/cross-commit?source=rss----c529b14d1f55---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 21:38:50 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/cross-commit" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[7 AI Tools Every Content Creator Should Know About in 2026]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/7-ai-tools-every-content-creator-should-know-about-in-2026-351e1afb9e34?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1672/1*Hd9amQScYwrxHI1iWWnKDw.png" width="1672"></a></p><p class="medium-feed-snippet">Discover seven powerful AI tools transforming content creation in 2026, helping creators write, design, edit videos, generate visuals, and&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/7-ai-tools-every-content-creator-should-know-about-in-2026-351e1afb9e34?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/7-ai-tools-every-content-creator-should-know-about-in-2026-351e1afb9e34?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/351e1afb9e34</guid>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[social-media]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[content-creation]]></category>
            <category><![CDATA[content-marketing]]></category>
            <dc:creator><![CDATA[Chandan Jha]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 14:59:29 GMT</pubDate>
            <atom:updated>2026-11-13T14:59:28.451Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Your CLAUDE.md Is Quietly Holding Claude Back. Two New Features Fix It.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/your-claude-md-is-quietly-holding-claude-back-two-new-features-fix-it-457b38fa6b0b?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1600/1*NPFi5vUlapWpBDsvlx8-EQ.png" width="1600"></a></p><p class="medium-feed-snippet">Claude Code now reads AGENTS.md, and a single command audits every instruction file you&#x2019;ve ever written.</p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/your-claude-md-is-quietly-holding-claude-back-two-new-features-fix-it-457b38fa6b0b?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/your-claude-md-is-quietly-holding-claude-back-two-new-features-fix-it-457b38fa6b0b?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/457b38fa6b0b</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[developer-tools]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Jerry PM]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 08:52:04 GMT</pubDate>
            <atom:updated>2026-11-13T08:52:03.117Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[10 Niche Mac Apps for Real-World Problems]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/10-niche-mac-apps-for-real-world-problems-8ee4864fa1fe?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1672/1*29_SzOyV-T29Ll-4Sf-dgw.png" width="1672"></a></p><p class="medium-feed-snippet">Discover 10 niche Mac apps for offline Wikipedia, searchable PDFs, local captions, web archiving, photo privacy, and testing USB drives.</p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/10-niche-mac-apps-for-real-world-problems-8ee4864fa1fe?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/10-niche-mac-apps-for-real-world-problems-8ee4864fa1fe?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/8ee4864fa1fe</guid>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[self-improvement]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Halil Özel]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 02:30:18 GMT</pubDate>
            <atom:updated>2026-11-13T02:30:16.737Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[SwiftUI @Environment: The Overlooked Performance Overhead]]></title>
            <link>https://medium.com/cross-commit/swiftui-environment-the-overlooked-performance-overhead-37307b3b9e7d?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/37307b3b9e7d</guid>
            <category><![CDATA[environment-swiftui]]></category>
            <category><![CDATA[swiftui-performance]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <dc:creator><![CDATA[Rajveer]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 09:04:49 GMT</pubDate>
            <atom:updated>2026-11-12T09:04:47.938Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*okG-j7Dldr06K7jtnHQJnA.png" /></figure><p>At a <strong>“Meet with Apple”</strong> developer event, an Apple engineer made a statement:</p><blockquote><em>“Writing a value to the Environment doesn’t only affect the views that read the key you’re updating. It updates any view that reads from any Environment key.”</em></blockquote><p>That means a single environment write can trigger checks across the affected view subtree.</p><p>In this post, we’ll look at the difference between a cheap <strong>dependency check</strong> and an actual body re-evaluation, why even skipped updates have a cumulative cost, and the rules to avoid unnecessary environment overhead.</p><h3>Understanding O(n) in a Mobile Context</h3><p><strong>O(n)</strong>, or linear time complexity, simply means that the amount of work grows with the number of items involved.</p><p>In this case, the items are the views in the affected subtree. A smaller subtree means fewer views to check; a larger one means more work. When these checks happen frequently, such as during interactive UI updates, that cost can start to matter.</p><p>Changing an environment value causes SwiftUI to walk through the relevant view subtree and check the views that depend on the environment.</p><h4>The View Hierarchy and Environment Propagation</h4><p>EnvironmentValues are propagated downward through a view hierarchy from parent to child. When you apply an <em>.environment()</em> modifier, the value you set affects the view you modify and all its descendants, until a different environment modifier overrides it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XgrcV0TaCvZ0u3XBBI1Dyg.png" /></figure><p>Here is a critical distinction: The Environment is not a true global store; it’s a hierarchical propagation mechanism:</p><ul><li>A view only receives environment values from its ancestors.</li><li>Changes to environment values only propagate to descendants, not to ancestors or siblings.</li><li>As Apple engineers clarified: <em>“This only applies to child views of the </em>.environment<em> modifier that you’re writing with”</em>. If View B applies an environment modifier on View C and View D, only C and D are affected, not View A or View B themselves.</li></ul><h4>The Convenience-Performance Trade-off</h4><p>The Environment solves the problem of passing data through deep view hierarchies without “prop drilling.” You can inject a value at the root and access it five levels deep with a single line of code.</p><p>However, this convenience comes at a cost. Every environment read creates a dependency that must be checked during <em>every</em> environment write.</p><p>The Environment is designed for cross-cutting concerns such as themes, localization, managed object contexts. It is not designed for frequently-changing application state like GPS coordinates, timer values, or scroll offsets.</p><h3>The Anatomy of an Environment Write</h3><h4>The Propagation Traversal</h4><p>When an environment value changes, SwiftUI first needs to determine which views might be affected. It does this by walking down the view hierarchy from the point where the .environment() modifier was applied.</p><p>In Instruments’ Cause and Effect Graph, you’ll typically see two types of environment update nodes:</p><ol><li><strong>External Environment updates</strong>: changes originating outside SwiftUI, such as a system-level colour scheme change when the device switches to Dark Mode.</li><li><strong>EnvironmentWriter updates</strong>: changes made within SwiftUI, such as updating a value through the .environment() modifier.</li></ol><p>The important part is what happens next: SwiftUI doesn’t immediately re-evaluate every view it encounters. It first performs a much cheaper dependency check.</p><h4>The “Mailbox Check” -The Cheap Part</h4><p>For each view in the affected subtree, SwiftUI check:</p><ol><li>Does this view’s body read from the environment?</li><li>If it does, is the environment key that changed one of the keys it reads?</li></ol><p>If the answer is no, SwiftUI can <strong>skip re-evaluating the view’s body</strong>. These appear as <strong>skipped updates</strong> in Instruments.</p><p>Apple describes this behaviour explicitly as:</p><blockquote><em>“The view bodies are only run if the body uses the environment value for the key(s) used in that view and the value changes.”</em></blockquote><p>So if a view reads <em>.name </em>and you change <em>.age</em>, its body doesn’t run because it doesn’t depend on <em>.age</em>.</p><p>W<strong>alking the subtree and checking dependencies is not the same thing as re-evaluating every body</strong>.</p><h4>The “Unpacking” -The Expensive Part</h4><p>If a view does read the environment key that changed, SwiftUI needs to re-evaluate that view’s body.</p><p>Remember that body is a computed property. SwiftUI can evaluate it frequently. But there’s an important performance detail here: even when a view is skipped, SwiftUI still had to visit it and perform the dependency check. Across a large subtree, those small checks can add up.</p><p>Apple’s Instruments guidance highlights exactly this behavior: skipped updates can have a <strong>significant cumulative cost</strong>, even though their associated view bodies never run.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kVTIsMIbEf7a5-BRWDLj8g.png" /></figure><h4>The Cost of Comparison: Equatable and the Default Value</h4><p>When SwiftUI reaches an environment reader, it compares the old and new values using Equatable to determine if a body re-evaluation is necessary. This comparison itself carries a cost: comparing an Int is a single CPU instruction, whereas comparing a massive Dictionary or a 20-property Struct forces SwiftUI to check every element or property.</p><p>If a value is not Equatable, SwiftUI lacks the information to detect a change. It defensively assumes the value <em>did</em> change, triggering unnecessary re-evaluations.</p><p><strong>Reference types</strong> (Classes) add another layer: they compare by memory address (pointer), not content. Two distinct class instances with identical properties are considered “changed” because their pointers differ.</p><p><strong>The Default Value Trap</strong>: If a view reads an environment key that wasn’t explicitly provided, it falls back to the key’s default. If this default is an unstable reference type (e.g., a computed default returning a new class instance), it appears different across environment passes. This invalidates the view even when the write was for an unrelated key.</p><p>Performance isn’t just about how many body properties run. The dependency checks, value comparisons, and how defaults are provisioned all contribute to the final cost.</p><h3>Three Scenarios for Cost Evaluation</h3><h4>Scenario A: Changing a Value No One Uses</h4><p>What happens when you change an environment value that no view in the subtree actually uses?</p><p>SwiftUI still needs to walk through the affected subtree and perform its <strong>“mailbox check”</strong> on each view. The views can ultimately be skipped, but SwiftUI still has to visit them to determine that they don’t need to update.</p><p>This is visible in Apple’s Instruments demonstrations: even when a view’s body doesn’t execute, the update itself still has an associated cost.</p><p>The important takeaway is that the cost isn’t limited to views whose body is re-evaluated. <strong>Every view that SwiftUI checks contributes to the cost.</strong></p><h4>Scenario B: Changing a Value Used Deep in the Hierarchy</h4><p>Now consider a value that’s actually used by a deeply nested view.</p><p>SwiftUI still traverses the relevant subtree. The root and sibling views perform their dependency checks and are skipped because they don’t depend on the changed key. The deeply nested view that does read that key, however, needs to re-evaluate its body.</p><p>The important distinction is that <strong>a view’s body only runs when the body uses the changed environment key and the value actually changes</strong>.</p><p>You can see this distinction in the Cause and Effect Graph:</p><ul><li>A view that reads the changed environment value shows the environment update followed by execution of its body.</li><li>A view that reads the environment but doesn’t use the specific key that changed still shows the environment update as a cause, but its body isn’t executed. Instruments represents this as a skipped or dimmed update.</li></ul><p>So, a single environment write can contain both kinds of work: <strong>cheap checks for views that can be skipped and more expensive body evaluations for views that actually depend on the changed value.</strong></p><h4>Scenario C: High-Frequency Writes</h4><p>This is where the cost becomes much more noticeable. Suppose you put a frequently changing value such as a timer, GPS coordinate, or scroll offset into the environment. If that value changes 60 times per second, SwiftUI has to perform the propagation and dependency checks 60 times per second.</p><p>The exact numbers will vary with the hierarchy and workload, but the underlying pattern is what matters: <strong>frequent writes multiplied by a large affected subtree can create a substantial amount of unnecessary work.</strong></p><p>Apple explicitly warns against putting frequently updated values, such as geometry values or timers, into the environment for this reason.</p><h4>The “Skipped” Update Cost</h4><p>This is an easy detail to overlook because a skipped view doesn’t execute its body. It can therefore look like SwiftUI did almost no work.</p><p>But the traversal still happened, and every skipped view still required a dependency check. Apple’s WWDC session and related discussions demonstrate that these skipped updates can have a significant cumulative cost.</p><p><strong><em>Environment performance isn’t about how many views re-evaluate. It’s about how many views SwiftUI has to check and how often those checks happen.</em></strong></p><h3>Some Rules of Environment Usage</h3><p>These rules establish the foundation for using the Environment without unnecessarily expanding the cost of propagation.</p><h4>Rule 1: Keep Values Tiny and Specific</h4><p>Avoid putting one large AppState containing dozens of unrelated properties into the environment.</p><p>Instead, split independent pieces of state into <strong>small, specific environment values</strong>.</p><pre>// AVOID: One massive struct<br>struct AppState {<br>    var isLoggedIn: Bool<br>    var preferredColor: Color<br>    var language: String<br>    var lastLocation: CLLocation?<br>    // ... 10 more properties<br>}<br><br>ContentView().environmentObject(AppState())<br><br>// PREFER: Tiny, specific keys<br>ContentView()<br>    .environment(\.isLoggedIn, true)<br>    .environment(\.preferredColor, .blue)<br>    .environment(\.language, &quot;en&quot;)</pre><p>This makes the values themselves simpler to compare and, more importantly, keeps dependencies more focused. A view that only needs .language doesn’t need to depend on unrelated pieces of application state.</p><p><strong><em>Keep environment values small enough that a view only depends on what it actually needs.</em></strong></p><h4>Rule 2: Isolate the View</h4><p>If only a small part of a view needs an environment value, move that dependency into a dedicated child view.</p><p>Consider this example from a Location app:</p><pre>struct ContentView: View {<br>    @EnvironmentObject var locationManager: LocationManager<br><br>    var body: some View {<br>        VStack {<br>            Text(&quot;Welcome&quot;)<br>            Text(&quot;Lat: \(locationManager.lastLocation?.latitude ?? 0)&quot;)<br>            Text(&quot;Long: \(locationManager.lastLocation?.longitude ?? 0)&quot;)<br>        }<br>    }<br>}</pre><p>Here, ContentView reads locationManager directly, even though only the latitude and longitude display actually needs the location. When the location changes, ContentView becomes one of the views that needs to be considered for the update.</p><p>A better approach is to isolate that dependency:</p><pre>struct ContentView: View {<br>    // ContentView does NOT read location data<br>    var body: some View {<br>        VStack {<br>            Text(&quot;Welcome&quot;)<br>            LocationDisplayView()<br>        }<br>    }<br>}<br><br>struct LocationDisplayView: View {<br>    @EnvironmentObject var locationManager: LocationManager<br><br>    var body: some View {<br>        if let location = locationManager.lastLocation {<br>            Text(&quot;Lat: \(location.coordinate.latitude)&quot;)<br>            Text(&quot;Long: \(location.coordinate.longitude)&quot;)<br>        }<br>    }<br>}</pre><p>Now the environment dependency is scoped to LocationDisplayView. The larger ContentView doesn’t need to re-evaluate its body just because the location changes.</p><p><strong><em>Don’t make a large view listen to a value when only a small part of that view needs it.</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h70qE47jswye49kVE3YLlw.png" /></figure><h4>Rule 3: Never Put High-Frequency Data in the Environment</h4><p>The third rule is the most important one for performance-sensitive code: <strong>avoid putting frequently changing data in the Environment.</strong></p><p>GPS coordinates, timer values, scroll offsets, and drag gesture values can change many times during normal interaction. Putting those values high in the environment can turn every update into repeated propagation and dependency checks across a potentially large subtree.</p><p>For example:</p><pre>class LocationManager: ObservableObject {<br>    @Published var currentLocation: CLLocation? // DON&#39;T put this in environment!<br>}</pre><p>A better architecture is to keep the <strong>manager itself</strong> as a stable dependency while scoping the frequently changing data closer to the views that actually need it.</p><p><strong><em>Stable dependencies can live high in the hierarchy. Frequently changing data should stay as close as possible to the views that actually use it.</em></strong></p><p>The important thing to understand is the difference between a <strong>check</strong> and a <strong>re-evaluation</strong>.</p><p>A <em>check</em> is SwiftUI walking through the affected subtree and determining whether a view depends on the environment value that changed. A <em>re-evaluation</em> is when SwiftUI actually calls that view’s body. The second is more expensive, but the first isn’t free either.</p><p><strong><em>Use the Environment for relatively stable, cross-cutting values such as theme, locale, and other shared dependencies. Keep frequently changing data in local state or scoped observation, and throttle updates when appropriate.</em></strong></p><p>The Environment isn’t inherently a performance problem. The problem comes from placing the wrong kind of data in it, especially data that changes frequently and sits high in the view hierarchy.</p><p>We’ll see a little more about Environment in <a href="https://medium.com/@raajveer/swiftui-environment-performance-optimisation-through-smarter-architecture-051e50db381d">Part 2</a>, till then see ya, 👋 .</p><h3>Thanks for reading Cross Commit</h3><p>Before you go:</p><figure><img alt="Follow Cross Commit: practical Swift, Kotlin and mobile AI stories from engineers who ship real apps" src="https://cdn-images-1.medium.com/max/1024/1*aojKTaZmGnisRaGyAL1g0g.png" /><figcaption>Follow Cross Commit on Medium: <a href="https://medium.com/cross-commit">medium.com/cross-commit</a></figcaption></figure><p>👉 <strong>Clap</strong> and <strong>follow</strong> <a href="https://medium.com/u/a769be0a8ae0">Rajveer</a> so their next story lands in your feed 👏</p><p>👉 Want their stories by email? After you follow, tap <strong>Following</strong> on their profile and choose <strong>Email notifications on</strong> 📩</p><p>👉 <strong>Follow </strong><a href="https://medium.com/cross-commit"><strong>Cross Commit</strong></a> for practical iOS, Android and mobile AI stories from engineers who ship real apps</p><p>👉 Writing about Swift, Kotlin or mobile AI? Cross Commit is open to writers worldwide. Leave a response below and we’ll get in touch ✍️</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=37307b3b9e7d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/cross-commit/swiftui-environment-the-overlooked-performance-overhead-37307b3b9e7d">SwiftUI @Environment: The Overlooked Performance Overhead</a> was originally published in <a href="https://medium.com/cross-commit">Cross Commit</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Claude Fable 5.2 Shipped. My Usage Bar Hit 100% Anyway.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/claude-fable-5-2-shipped-my-usage-bar-hit-100-anyway-d2a6860b40b5?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1600/1*QoRQoof6nNfYzZNOLKVfeQ.png" width="1600"></a></p><p class="medium-feed-snippet">What a free Fable reset really gives back, tested on launch day.</p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/claude-fable-5-2-shipped-my-usage-bar-hit-100-anyway-d2a6860b40b5?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/claude-fable-5-2-shipped-my-usage-bar-hit-100-anyway-d2a6860b40b5?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/d2a6860b40b5</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[fable]]></category>
            <dc:creator><![CDATA[Jerry PM]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 02:44:33 GMT</pubDate>
            <atom:updated>2026-11-12T02:44:34.367Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Why Moving Code to @MainActor Can Create Performance Problems]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/why-moving-code-to-mainactor-can-create-performance-problems-f73bb4b60104?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1672/1*kMOY-5TcisGdkidBQ6fBJw.png" width="1672"></a></p><p class="medium-feed-snippet">Adding @MainActor can fix a UI update problem. But it can also create another problem that developers might not notice until the&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/why-moving-code-to-mainactor-can-create-performance-problems-f73bb4b60104?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/why-moving-code-to-mainactor-can-create-performance-problems-f73bb4b60104?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/f73bb4b60104</guid>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Kavya Sri]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 02:43:02 GMT</pubDate>
            <atom:updated>2026-11-12T02:43:01.459Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Centralized Network & API Error Handling in Compose Multiplatform (Ktor 3 + Kotlin 2.4)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/centralized-network-api-error-handling-in-compose-multiplatform-ktor-3-kotlin-2-4-ffb767764710?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/2600/1*dG4WCV7deIBDS7w3mhPPCA.png" width="2800"></a></p><p class="medium-feed-snippet">A single 60-line ApiResult boundary that normalizes OkHttp and iOS Darwin failures without leaking try/catch into ViewModels.</p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/centralized-network-api-error-handling-in-compose-multiplatform-ktor-3-kotlin-2-4-ffb767764710?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/centralized-network-api-error-handling-in-compose-multiplatform-ktor-3-kotlin-2-4-ffb767764710?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/ffb767764710</guid>
            <category><![CDATA[compose-multiplatform]]></category>
            <category><![CDATA[kotlin]]></category>
            <dc:creator><![CDATA[Aslam Hossin]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 13:53:13 GMT</pubDate>
            <atom:updated>2026-11-11T13:53:12.012Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Fine-Tuning Small Language Models(SLMs) on a $20 Budget]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/fine-tuning-small-language-models-slms-on-a-20-budget-42691e4437f4?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1352/1*tStZOEdkJCqLLDX3NkLLdw.png" width="1352"></a></p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/fine-tuning-small-language-models-slms-on-a-20-budget-42691e4437f4?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/fine-tuning-small-language-models-slms-on-a-20-budget-42691e4437f4?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/42691e4437f4</guid>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[indiehackers]]></category>
            <category><![CDATA[lms]]></category>
            <category><![CDATA[small-language-model]]></category>
            <dc:creator><![CDATA[Jason Kwon]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 03:59:40 GMT</pubDate>
            <atom:updated>2026-11-11T03:59:38.732Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[The Local-First Architecture Blueprint for Solo Founders]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/the-local-first-architecture-blueprint-for-solo-founders-25e7f141d208?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1024/1*0aaLVg8b5kY-vXi01pMHWg.png" width="1024"></a></p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/the-local-first-architecture-blueprint-for-solo-founders-25e7f141d208?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/the-local-first-architecture-blueprint-for-solo-founders-25e7f141d208?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/25e7f141d208</guid>
            <category><![CDATA[indiehackers]]></category>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[sqlite]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[solopreneur]]></category>
            <dc:creator><![CDATA[Jason Kwon]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 03:58:41 GMT</pubDate>
            <atom:updated>2026-11-11T03:58:39.970Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[KMP Essential: Bridge to Native with expect and actual]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/cross-commit/kmp-essential-bridge-to-native-with-expect-and-actual-bfb041a77f99?source=rss----c529b14d1f55---4"><img src="https://cdn-images-1.medium.com/max/1024/1*5s6sG5DlMPJ4peYdopGFqg.png" width="1024"></a></p><p class="medium-feed-link"><a href="https://medium.com/cross-commit/kmp-essential-bridge-to-native-with-expect-and-actual-bfb041a77f99?source=rss----c529b14d1f55---4">Continue reading on Cross Commit »</a></p></div>]]></description>
            <link>https://medium.com/cross-commit/kmp-essential-bridge-to-native-with-expect-and-actual-bfb041a77f99?source=rss----c529b14d1f55---4</link>
            <guid isPermaLink="false">https://medium.com/p/bfb041a77f99</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[kotlin-multiplatform]]></category>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[Jason Kwon]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 03:58:04 GMT</pubDate>
            <atom:updated>2026-11-11T03:58:03.473Z</atom:updated>
        </item>
    </channel>
</rss>