<?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[Stories by Durul Dalkanat on Medium]]></title>
        <description><![CDATA[Stories by Durul Dalkanat on Medium]]></description>
        <link>https://medium.com/@duruldalkanat?source=rss-ed0a41b53b8d------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*ndVk98DdDoA_R2VtBFK8eg@2x.jpeg</url>
            <title>Stories by Durul Dalkanat on Medium</title>
            <link>https://medium.com/@duruldalkanat?source=rss-ed0a41b53b8d------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 03 Nov 2026 06:31:12 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@duruldalkanat/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Two Mac Studios Are Not One 1 TB Computer]]></title>
            <link>https://duruldalkanat.medium.com/two-mac-studios-are-not-one-1-tb-computer-abba6561e73c?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/abba6561e73c</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Sun, 18 Oct 2026 18:13:45 GMT</pubDate>
            <atom:updated>2026-10-18T19:22:16.863Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4M0aS1gqqSHJVkar" /><figcaption>Photo by <a href="https://unsplash.com/@solomin_d?utm_source=medium&amp;utm_medium=referral">Dima Solomin</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p><em>Meta’s “one supercomputer” line is right about capacity and misleading about speed. That difference matters to anyone considering a second Mac.</em></p><p>On October 15, 2026, Meta released Muse Spark Open, its new open-weight model. What made it news was that a model with 816 billion parameters runs on two Mac Studios. Here is the line from <a href="https://research.meta.ai/blog/muse-spark-open"><strong>Meta’s blog</strong></a><strong>:</strong></p><blockquote><em>“The result is two Mac Studios behave like one supercomputer with a terabyte of unified memory.”</em></blockquote><p><a href="https://macrumors.com/2026/10/15/meta-muse-spark-open-mac-studio/">MacRumors</a> and <a href="https://engadget.com/2287833/meta-built-a-huge-open-weight-ai-model-for-macs-but-youll-need-1tb-of-ram-to-run-it/">Engadget</a> repeated the line word for word. The same day, Apple published <a href="https://machinelearning.apple.com/research/mlx-distributed-inference">its own measurements</a>. Apple’s article makes no such claim: it describes a model that will not fit on a single machine, so half of it goes on one Mac and half on the other.</p><p>So do two Macs really behave like one computer? The short answer: there is a terabyte of memory, but it isn’t one memory. That distinction explains both why the setup works and what to check before buying a second Mac.</p><h3>What was announced?</h3><ul><li><strong>The model:</strong> Muse Spark Open has 816 billion parameters, of which only 42 billion are active for each token. It has a 1-million-token context window and accepts images, audio, and text. The weights can be downloaded under a license that allows limited commercial use (<a href="https://research.meta.ai/blog/muse-spark-open">Meta</a>).</li><li><strong>The hardware:</strong> Two M5 Ultra Mac Studios with 512 GB of unified memory each, connected over Thunderbolt 5. In its two-machine test, Apple used two cables for the link (<a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Apple</a>).</li><li><strong>The software:</strong> Apple’s MLX framework and its jaccl backend, which uses RDMA over Thunderbolt. RDMA support arrived with macOS 26.2.</li><li><strong>Precision:</strong> In its native format (BF16), the model is larger than 1.6 TB. The tests used the 4-bit NVFP4 version, which is about 493 GB.</li></ul><p>The 512 GB Mac Studio is not on sale yet; Apple says it is coming <a href="https://www.apple.com/newsroom/2026/09/the-new-mac-mini-and-mac-studio-are-available-today/">in late October</a>. Apple had not announced its price as of October 15, but according to <a href="https://macrumors.com/2026/10/15/meta-muse-spark-open-mac-studio/">MacRumors</a>, even the 256 GB model costs more than $10,000. <a href="https://engadget.com/2287833/meta-built-a-huge-open-weight-ai-model-for-macs-but-youll-need-1tb-of-ram-to-run-it/">Engadget</a> puts the alternative, four 256 GB Mac Studios, at about $38,000.</p><h3>What the line gets right: capacity</h3><p>Together, the two Mac Studios have 2 × 512 = 1,024 GB of memory: a terabyte. The model’s 4-bit version is about 493 GB. The weights alone fit under 512 GB, but that leaves no room for the operating system, the intermediate data created during computation, or the conversation’s context. 🧐</p><p><strong>Apple says so plainly:</strong> the model will not fit on a single machine, so the solution is to “store half of the model on one Mac Studio and the other half on another” (<a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Apple</a>).</p><p>In terms of capacity, then, two Macs together hold a model that one Mac cannot. The “terabyte” in Meta’s line is accurate in that sense. 👏🏻</p><h3>What it gets wrong: there is no single memory</h3><p>Inside a Mac, “unified memory” means the CPU and the graphics processor (GPU) share the same memory. On the M5 Ultra, the GPU reads that memory at 1.2 TB per second (<a href="https://www.apple.com/newsroom/2026/09/the-new-mac-mini-and-mac-studio-are-available-today/">Apple</a>).</p><p>Between two Macs, there is a Thunderbolt 5 cable. At best, it carries about 10 GB per second; with two cables, as in Apple’s setup, about 20 GB (<a href="https://www.macg.co/intelligence-artificielle/2026/09/macos-27-simplifie-la-mise-en-place-dun-cluster-de-mac-studio-avec-le-rdma-311231">MacGeneration</a>). That is 60 to 120 times slower than the Mac’s own memory.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z8FC7gz2-3GTZypEZY3EjQ.png" /></figure><p>The gap in latency is even larger: according to MacGeneration, memory responds roughly 1,000 times faster than this link. So each Mac’s GPU can read only its own memory quickly. The two machines’ memories are not one pool; they are two separate pools joined by a cable.</p><h4>What if it were one memory?</h4><p>A thought experiment makes the difference concrete. What if one Mac’s GPU had to read the half of the model stored on the other Mac over the cable?</p><p>The 42 billion parameters active for each token come to about 24 GB, even in the 4-bit version. Half of that, about 12 GB, would have to cross the cable for every token. Even with two cables, that is about 0.6 seconds per token: fewer than 2 tokens per second.</p><blockquote>Apple measured 25 tokens per second. In other words, the system works not because it behaves like one memory but because it avoids doing so.</blockquote><p>Interestingly, the <strong>“supercomputer”</strong> comparison is apt. Supercomputers, too, are made of many nodes, each with its own memory, connected by a fast network. The misleading part is <strong>“unified memory.”</strong></p><h3>So how does it work?</h3><p><strong>Three things come together: </strong>the model’s structure, the way it is split, and the latency of the link between the two Macs.</p><h4>Each token uses a twentieth of the model</h4><p>Muse Spark Open is a mixture-of-experts (MoE) model. Each layer has 256 “expert” subnetworks, and only 8 of them are chosen for each token (<a href="https://docs.nvidia.com/nemo/automodel/model-coverage/vision-language-models/muse/muse-spark-open">NVIDIA</a>). That is why only 42 billion of the 816 billion parameters, roughly a twentieth, are active for each token.</p><p>The sentence just before Meta’s “supercomputer” line makes this point: “the chip’s 1.2 TB/s of memory bandwidth is fast enough to read the small slice each token needs.” That part is accurate. 👏🏻</p><h4>Each Mac reads its share from its own memory</h4><p>There are two ways to split a model across two machines (<a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Apple</a>):</p><ul><li><strong>Pipeline (split by layers):</strong> The first Mac holds the model’s first layers; the second holds the last ones. Each token passes through one Mac, then the other; while one works, the other waits. Apple notes that generation speed stays “very similar to that of a single machine, since the layers are still evaluated sequentially.”</li><li><strong>Tensor parallel (split within layers):</strong> Each Mac holds half of every layer. Both Macs compute each layer at the same time and combine their results. A single conversation gets faster, too; the price is that the machines wait for each other at every layer.</li></ul><p>With Muse Spark Open on two Macs, the pipeline split produced 15.7 tokens per second and the tensor-parallel split 25.0 (<a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Apple</a>).</p><h4>What crosses the cable</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*285dN-I2EB18vcO5DSjJHg.png" /></figure><p>In a tensor-parallel split, the weights never move; each Mac reads its half from its own memory. All that crosses the cable is intermediate results, combined twice in every layer. A rough calculation puts this at 2–4 MB per token: 62 layers × 2 combinations × 8,192 values × 2–4 bytes (<a href="https://docs.nvidia.com/nemo/automodel/model-coverage/vision-language-models/muse/muse-spark-open">architecture</a>).</p><p>A cable carrying 10 GB per second moves that in 0.2–0.4 milliseconds, while a token takes about 40 milliseconds. Cable capacity is not the problem.</p><h4>Latency is what matters</h4><p>In a tensor-parallel split, the two Macs wait for each other about 124 times per token. Over an ordinary network connection (TCP), a message on this link takes about 300 microseconds (<a href="https://gigazine.net/gsc_news/en/20251222-mac-rdma-over-thunderbolt-1-5tb">Gigazine</a>). That adds about 37 milliseconds of waiting per token; by a rough estimate, it would cut 25 tokens per second to 13–14, below even the pipeline split.</p><p>That is why RDMA is critical. With RDMA, added in macOS 26.2, the Thunderbolt controller writes data arriving from the other Mac directly into the application’s memory, without going through the operating system’s network stack (<a href="https://developer.apple.com/documentation/technotes/tn3205-low-latency-communication-with-rdma-over-thunderbolt">Apple TN3205</a>). Latency drops below 50 microseconds (<a href="https://gigazine.net/gsc_news/en/20251222-mac-rdma-over-thunderbolt-1-5tb">Gigazine</a>); MacGeneration speaks of a few tens of microseconds (<a href="https://www.macg.co/intelligence-artificielle/2026/09/macos-27-simplifie-la-mise-en-place-dun-cluster-de-mac-studio-avec-le-rdma-311231">MacGeneration</a>). Total waiting per token falls to at most about 6 milliseconds.</p><p>Independent measurements bear this out. In Jeff Geerling’s test with four Mac Studios, llama.cpp, which splits by layers over TCP, got slower as machines were added: Qwen3 235B ran at 20.4 tokens per second on one machine and 15.2 on four. By contrast, exo, which splits within layers and uses RDMA, sped up from 19.5 to 31.9 (<a href="https://appleinsider.com/articles/25/12/20/ai-calculations-on-mac-cluster-gets-a-big-boost-from-new-rdma-support-on-thunderbolt-5">AppleInsider</a>).</p><h3>What the measurements say</h3><p>Apple measured with an 8,192-token prompt and a single user (<a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Apple</a>).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IDh5H6Wj9CUyuVUIv_bARQ.png" /></figure><ul><li><strong>Adding machines does not scale linearly.</strong> For Muse Spark Open, going from two Macs to four raises speed from 25.0 to 36.7 tokens per second: about 1.47×, not 2×.</li><li><strong>Dense models gain more.</strong> Qwen3.8 27B, which uses all of its parameters for every token, produces 19.7 tokens per second on one M5 Ultra, 33.3 on two (1.69×), and 50.9 on four (2.58×). Apple’s claim of “up to 3x faster performance” than a single system (<a href="https://www.apple.com/newsroom/2026/09/the-new-mac-mini-and-mac-studio-are-available-today/">Apple</a>) also holds for a dense model: Mistral Medium 3.5 goes from 7.7 to 23.4 tokens per second on four machines.</li><li><strong>First token:</strong> With an 8,192-token prompt, Muse Spark Open’s first token arrives in about 8 seconds on two Macs and 4.8 seconds on four.</li><li><strong>The 1-million-token context was not measured.</strong> The model supports 1 million tokens, but Apple’s measurements stop at 65,536. At that length, even four Macs take about 40.6 seconds to produce the first token, or about 50.5 seconds with one cable per link. One million tokens is 16 times longer; even an optimistic linear estimate puts the first token more than 10 minutes away.</li></ul><h3>What it means for the Macs on your desk</h3><p>The first question many readers will have: if I buy a second Mac, can I run a model this big, too?</p><ul><li><strong>Not this model.</strong> The Mac mini with the most memory (M5 Pro) tops out at 64 GB (<a href="https://www.apple.com/newsroom/2026/09/the-new-mac-mini-and-mac-studio-are-available-today/">Apple</a>); two of them make 128 GB. By default, macOS gives the GPU roughly three-quarters of memory, about 48 GB on a 64 GB Mac (<a href="https://llmconfigurator.com/en/guides/troubleshooting/increase-metal-vram-limit-apple-silicon">LLM Configurator</a>). That leaves about 96 GB for the model across two Mac minis, while the 4-bit Muse Spark Open is about 493 GB.</li><li><strong>A bigger model that fits is not necessarily a better model.</strong> Some models fit on two Mac minis but not on one, such as the 65 GB gpt-oss-120b (<a href="https://lmstudio.ai/models/gpt-oss">LM Studio</a>). It scores 12 on Artificial Analysis’s Intelligence Index (v4.3.2). Qwen3.8 27B, which can run on a single 64 GB Mac mini in its 8-bit version, scores 34, and Muse Spark Open scores 39 (<a href="https://artificialanalysis.ai/models/gpt-oss-120b">gpt-oss-120b</a>, <a href="https://artificialanalysis.ai/models/qwen3-8-27b">Qwen3.8 27B</a>, <a href="https://artificialanalysis.ai/models/muse-spark-open">Muse Spark Open</a>). The index is only one measure, but size and quality are less directly linked than many assume.</li><li><strong>The speedup depends on the model.</strong> For dense models, a second machine gives a clear boost (Apple: 1.69× for the 27B on two M5 Ultras). For MoE models, the gain is smaller: two M4 Pro Mac minis sped up Qwen3.5-35B-A3B by about 1.3× (<a href="https://arxiv.org/html/2609.19169">SiliconBench</a>). No measurements have been published yet for M5 Pro Mac minis.</li><li><strong>Both Macs need Thunderbolt 5.</strong> RDMA works only on Apple Silicon Macs with Thunderbolt 5 (<a href="https://developer.apple.com/documentation/technotes/tn3205-low-latency-communication-with-rdma-over-thunderbolt">Apple TN3205</a>). The M5 Pro Mac mini has Thunderbolt 5; the M6 Mac mini has Thunderbolt 4 (<a href="https://www.igeeksblog.com/mac-mini-m6-m5-pro-price-specs-release-date/">iGeeksBlog</a>).</li><li><strong>Setup is not plug-and-play.</strong> In macOS 27, you can turn on RDMA with a single checkbox in System Settings (<a href="https://www.macg.co/intelligence-artificielle/2026/09/macos-27-simplifie-la-mise-en-place-dun-cluster-de-mac-studio-avec-le-rdma-311231">MacGeneration</a>). Splitting a model, though, takes MLX’s command-line tools (mlx.launch, mlx_lm.server) or a tool such as exo. LM Studio&#39;s October 13 release (0.4.26) cannot split a model across several Macs (<a href="https://lmstudio.ai/changelog/lmstudio">LM Studio</a>).</li><li><strong>Two separate models don’t need RDMA.</strong> If each Mac runs its own model, the machines don’t talk to each other; an ordinary network is enough.</li></ul><h3>Five questions to ask when reading news like this</h3><ol><li><strong>Total or active?</strong> Of Muse Spark Open’s 816 billion parameters, 42 billion are active for each token. Total parameters set the memory requirement; active parameters largely set the speed.</li><li><strong>At what precision?</strong> In its native format, the model exceeds 1.6 TB; the Macs ran the 4-bit version (about 493 GB).</li><li><strong>Capacity or access?</strong> “1 TB” is the two machines’ combined capacity. Each GPU can read only its own 512 GB quickly.</li><li><strong>At what context length?</strong> The model supports 1 million tokens; the measurements were taken at 8,192 and 65,536.</li><li><strong>Which hardware, when, and at what price?</strong> The 512 GB Mac Studio in the demo is not on sale yet, and Apple had not announced its price as of October 15.</li></ol><h3>Conclusion</h3><p>What Apple and Meta showed is real and impressive: an 816-billion-parameter model producing 25 tokens per second on two desktop computers. Three things make it possible: the model’s MoE design, a smart way of splitting it, and RDMA’s low latency.</p><p><strong>“One supercomputer with a terabyte of unified memory,”</strong> by contrast, is marketing shorthand that squeezes this engineering into a single sentence. There is a terabyte of memory; it just isn’t one memory.</p><h3>Sources</h3><ul><li><a href="https://research.meta.ai/blog/muse-spark-open">Introducing Muse Spark Open, The Most Capable US Open-Weight Model to Date — Meta</a>, October 15, 2026</li><li><a href="https://machinelearning.apple.com/research/mlx-distributed-inference">Local and Distributed Large LLM Inference with MLX and RDMA on Mac Studio — Apple Machine Learning Research</a>, October 15, 2026</li><li><a href="https://macrumors.com/2026/10/15/meta-muse-spark-open-mac-studio/">Meta and Apple Bring Muse Spark Open AI Model to Mac Studio — MacRumors</a>, October 15, 2026</li><li><a href="https://engadget.com/2287833/meta-built-a-huge-open-weight-ai-model-for-macs-but-youll-need-1tb-of-ram-to-run-it/">Meta built a huge open-weight AI model for Macs, but you’ll need 1TB of RAM to run it — Engadget</a>, October 15, 2026</li><li><a href="https://www.apple.com/newsroom/2026/09/the-new-mac-mini-and-mac-studio-are-available-today/">The new Mac mini and Mac Studio are available today — Apple Newsroom</a>, September 22, 2026</li><li><a href="https://developer.apple.com/documentation/technotes/tn3205-low-latency-communication-with-rdma-over-thunderbolt">TN3205: Low-latency communication with RDMA over Thunderbolt — Apple</a></li><li><a href="https://www.macg.co/intelligence-artificielle/2026/09/macos-27-simplifie-la-mise-en-place-dun-cluster-de-mac-studio-avec-le-rdma-311231">macOS 27 simplifie la mise en place d’un cluster de Mac Studio avec le RDMA — MacGeneration</a> (in French), September 24, 2026</li><li><a href="https://docs.nvidia.com/nemo/automodel/model-coverage/vision-language-models/muse/muse-spark-open">Muse Spark Open — NVIDIA NeMo AutoModel</a></li><li><a href="https://gigazine.net/gsc_news/en/20251222-mac-rdma-over-thunderbolt-1-5tb">This is what happens when you create a 1.5TB VRAM AI cluster with 4 Mac Studios and RDMA over Thunderbolt — Gigazine</a>, December 22, 2025</li><li><a href="https://appleinsider.com/articles/25/12/20/ai-calculations-on-mac-cluster-gets-a-big-boost-from-new-rdma-support-on-thunderbolt-5">AI calculations on Mac cluster get big boosts from new RDMA support on Thunderbolt 5 — AppleInsider</a>, December 20, 2025</li><li><a href="https://arxiv.org/html/2609.19169">SiliconBench: Speed, Memory, and Fidelity for LLM Serving on Unified-Memory Desktops — arXiv</a>, September 12, 2026</li><li>Artificial Analysis: <a href="https://artificialanalysis.ai/models/muse-spark-open">Muse Spark Open</a>, <a href="https://artificialanalysis.ai/models/qwen3-8-27b">Qwen3.8 27B</a>, <a href="https://artificialanalysis.ai/models/gpt-oss-120b">gpt-oss-120b</a></li><li><a href="https://lmstudio.ai/models/gpt-oss">gpt-oss — LM Studio</a> and <a href="https://lmstudio.ai/changelog/lmstudio">LM Studio Changelog</a></li><li><a href="https://www.igeeksblog.com/mac-mini-m6-m5-pro-price-specs-release-date/">Mac mini M6 and M5 Pro: price, specs, release date — iGeeksBlog</a>, August 26, 2026</li><li><a href="https://llmconfigurator.com/en/guides/troubleshooting/increase-metal-vram-limit-apple-silicon">Increase the Metal VRAM limit on Apple Silicon — LLM Configurator</a></li></ul><p>This article was written with AI assistance; all figures come from the linked sources.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=abba6561e73c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Shopify Has Declared “The Future” Again. Its Followers Foot the Bill.]]></title>
            <link>https://duruldalkanat.medium.com/shopify-has-declared-the-future-again-its-followers-foot-the-bill-c90a1117f11e?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/c90a1117f11e</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[shopify]]></category>
            <category><![CDATA[mobile-development]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Mon, 05 Oct 2026 19:31:23 GMT</pubDate>
            <atom:updated>2026-10-05T19:31:23.948Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jERs44fEZIhx4CG1" /><figcaption>Photo by <a href="https://unsplash.com/@hookle?utm_source=medium&amp;utm_medium=referral">hookle.app</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p><em>Moving from React Native back to native may be the right decision for </em><strong><em>Shopify</em></strong><em>. The problem is that these decisions are presented to the industry as “the future” and copied by teams without Shopify’s infrastructure.</em></p><p>Shopify’s post <a href="https://shopify.engineering/back-to-native"><strong>“Native is now the future of mobile at Shopify”</strong></a> was published on September 10. I’ve wanted to write about it ever since. Nearly a month later, I’ve finally put my thoughts into words.</p><p>Shopify is moving its mobile apps from React Native back to Swift and Kotlin. The reasoning, in short: coding agents have changed the cost of building the same app twice.</p><p>If the headline sounds familiar, there’s a reason. In January 2020, the same blog published <a href="https://shopify.engineering/react-native-future-mobile-shopify"><strong>“React Native is the Future of Mobile at Shopify”</strong></a><strong>.</strong> Six years apart, almost the same headline, the exact opposite conclusion.</p><p>I’m not going to criticize Shopify for changing its mind. Revisiting a decision when circumstances change is sensible. My concern is how the industry reads these posts. I’ve seen this repeatedly at companies I’ve worked for: startups read large companies’ engineering blogs, adopt their decisions, and more often than not, the result is chaos.</p><p>Shopify’s last six years make a useful case study in why this pattern is dangerous.</p><h3>“The future” changed three times in six years</h3><p>Read Shopify’s own posts in order, and you’ll find three different “futures” announced over six years: first React Native, then native and React Native together, and now native.</p><ul><li><strong>January 2020:</strong> React Native is declared the future. The team rewriting Arrive feels twice as productive as it did with native development; code sharing between iOS and Android reaches 95% in Arrive and 99% in Compass. Shopify establishes React Native tooling and foundations for teams.</li><li><strong>December 2022:</strong> <a href="https://shopify.engineering/migrating-our-largest-mobile-app-to-react-native"><strong>Shopify Mobile, its largest app with 300 screens per platform</strong></a><strong>,</strong> is being migrated to React Native. The goal is to move all native apps to React Native.</li><li><strong>January 2025: </strong><a href="https://shopify.engineering/five-years-of-react-native-at-shopify"><strong>The five-year retrospective</strong></a> is glowing: feature parity is no longer a problem, screens open in under 500 ms at P75, more than 99.9% of sessions are crash-free, and all apps are on React Native. The conclusion is clear: don’t think in terms of native versus React Native. Think of them together.</li><li><strong>September 2025:</strong> Shopify Mobile and POS are migrated to <a href="https://shopify.engineering/react-native-new-architecture"><strong>React Native’s New Architecture</strong></a>. The weekly release cadence is maintained throughout.</li><li><strong>September 2026:</strong> The direction reverses. The Shop app is rewritten in Swift and Kotlin and shipped to the app stores in 12 weeks; the rewrite of the Shopify app, with its 300-plus screens, is still underway.</li></ul><p>That’s three major transitions: native to React Native, React Native to the New Architecture, and then back to native. The most striking detail: Shopify Mobile’s New Architecture migration was completed in September 2025. A year later, the same app is being rewritten from scratch.</p><p>Shopify addresses this criticism upfront in its post: it doesn’t stick with a decision simply because it once worked, and LLMs have changed one of the fundamental assumptions behind its 2020 decision. For Shopify, this is an internal decision. For the rest of the industry, each post is a signal. And that signal has changed three times in six years.</p><h3>What happened to the teams that took the advice?</h3><p><a href="https://shopify.engineering/five-years-of-react-native-at-shopify"><strong>The January 2025 retrospective</strong></a> didn’t just describe Shopify’s experience. It offered readers direct advice. React Native had come a long way in five years, it said, and most of the limitations that had kept people away were gone. Its recommendation: “now would be a good time to revisit it.”</p><p>Imagine a team that took that advice. It moved to React Native in 2025, adopted Shopify’s libraries, and built its architecture around the model Shopify described. Twenty months later, the company that offered the advice is leaving that same stack.</p><p>That isn’t Shopify’s fault. The company is making decisions based on its own circumstances. But this is exactly the price of treating a company’s blog post as the industry’s roadmap. When the author’s circumstances change, everyone who tied themselves to that decision is left stranded.</p><h3>The followers foot the bill</h3><p>The clearest example of that cost is in open source. Shopify made substantial contributions to the React Native ecosystem for years, and some of its libraries became standards in their categories. <a href="https://shopify.engineering/back-to-native"><strong>With the return to native</strong></a><strong>:</strong></p><ul><li><a href="https://shopify.github.io/flash-list/"><strong>FlashList</strong></a><strong>:</strong> Downloaded roughly two million times a week and widely considered the default way to render high-performance lists in React Native. Shopify will now only address critical compatibility-breaking bugs and is looking for a company to take over long-term maintenance.</li><li><a href="https://github.com/wcandillon/react-native-skia"><strong>React Native Skia</strong></a><strong>:</strong> Shopify’s sponsorship ends at the close of 2026. The library’s creator will fork the project under a new name and continue developing it; the original repository will be archived. Shopify recommends that teams whose apps depend on the library consider sponsoring it.</li><li><a href="https://shopify.github.io/restyle/"><strong>Restyle</strong></a><strong>:</strong> It will remain functional through the end of 2026, after which maintenance will stop.</li></ul><p>Shopify is trying to manage the transition responsibly. Sponsorships, handover plans, and advance announcements are in place. Still, every team that chose these libraries because <strong>“Shopify is behind them”</strong> now has to plan its own migration. On Hacker News, sergiotapia described this as a major loss for the React Native community.</p><p>Following a large company’s technology choices means relying on its maintenance budget. When that budget disappears, the followers are left with the bill.</p><h3>The headline gets copied. The infrastructure doesn’t.</h3><p>A section in Shopify’s post matters far more than the headline but will get far less attention. Shopify explicitly says that feeding React Native code to an LLM and asking it to rewrite features in native in one shot did not work. That approach produced a pile of code too unmaintainable to ship.</p><p><strong>Here’s the infrastructure they describe instead:</strong></p><ul><li><strong>Helix:</strong> A loop used in the Shopify app rewrite that breaks each screen into small, sequential checkpoints. Each checkpoint must prove its behavior through tests, visually match the running app, pass two adversarial code reviewers, and receive human approval.</li><li><strong>Tardis:</strong> A debugging tool from <a href="https://shopify.engineering/shop-app-migration">the Shop app team</a> that gives agents structured access to the running app’s events, logs, and state, and can also send commands to the app.</li><li><strong>Headless architecture:</strong> Business logic is completely separated from the UI and runs headlessly on a desktop. Agents can iterate through a CLI in milliseconds rather than minutes, without touching a simulator.</li></ul><p>A core team of six built the Shop app’s foundation and main user flows. Behind them, hundreds of engineers contributed to the migration to React Native.</p><p>What a startup reading this post will copy is the headline: “Coding agents have made native cheaper. Let’s leave React Native.” It won’t copy Helix, Tardis, the headless architecture, or the review discipline. They take up a few paragraphs in the post, but building them takes a serious engineering investment. The result will be exactly what Shopify warns about in its own post: a pile of code that cannot be shipped or maintained. This time, on two platforms at once.</p><h3>Watching the effect in real time</h3><p>We don’t have to wait until next year to see this effect. The post’s <a href="https://news.ycombinator.com/item?id=49643982">Hacker News discussion</a> has 957 comments, and the pattern was visible within the first few hours.</p><p>robofanatic says the post motivated them to rewrite their Flutter app in Swift. lackoftactics predicts this will become an industry-wide trend, while tzone expects even small teams to go fully native. Vishal_Max asks the question that matters: if the apps already work, why is every company suddenly saying it’s going native?</p><p>The comment that stands out most to me is madrox’s. A year earlier, when they proposed moving to native at their former company, most of the mobile engineers pushed back. But because that company practically worshipped Shopify’s engineering blog, they expect those same people to now call it “the future.”</p><p>In other words, the same decision is rejected when it comes with an engineer’s reasoning and accepted when it appears on Shopify’s blog. The source determines the decision, not the reasoning.</p><p>There are dissenting voices in the discussion, and I think they’re the healthiest ones. SV_BubbleTime writes that, for a small team, the choice isn’t between Flutter and native. It’s between Flutter and not shipping an app at all. afavour also points out that a decision can make sense at Shopify’s or Airbnb’s scale without making sense for a ten-person startup.</p><h3>It may be right for Shopify. Not for you.</h3><p>To be fair, Shopify’s own numbers show that the React Native years were not a failure, and the return to native has brought measurable gains. In <a href="https://shopify.engineering/shop-app-migration">the new version of the Shop app</a>, launch time is down 23% on iOS and 50% on Android. The Android app is 109 MB smaller, crashes have dropped by a factor of ten, and Android build time is down 75%.</p><p>The timing also makes sense. The Shop app’s next major React Native investment, the New Architecture migration, was approaching. Shopify tested the alternative before committing to that investment. This isn’t a story of incompetence. It’s a context-specific decision. And that’s precisely the problem: the context doesn’t get copied along with the blog post.</p><p>There are costs the post doesn’t show that will hit small teams much harder:</p><ul><li><strong>The cost of divergence.</strong> hermitwriter, who wrote the strongest critique on Hacker News, sums it up in one sentence: “Feature parity isn’t an implementation cost. It’s a divergence cost.” Two codebases may look identical today. The real question is whether they’ll stay that way as experiments, accessibility fixes, and platform changes accumulate over the years.</li><li><strong>The organizational burden of staying in sync.</strong> According to nfw2, the real cost isn’t an extra engineer. It’s the product and organizational overhead of keeping two products in sync when they have to remain identical.</li><li><strong>Losing OTA updates.</strong> In React Native, bugs in the JavaScript layer could be fixed through OTA updates without waiting for app store review. In native, every hotfix enters Apple’s and Google’s queues. joshstrange writes that their last three updates spent 40, 67, and 98 hours in review. Shopify’s main post doesn’t address this at all.</li><li><strong>Agent and token costs.</strong> Maintaining two implementations with agents isn’t free, and the main post doesn’t provide a single figure for that spending.</li></ul><p>The numbers Shopify has shared are today’s numbers: rewrite speed, launch time, app size. Maintenance costs accumulate over years, and no one has measured those yet.</p><p>Here’s my takeaway from this discussion: if cross-platform’s biggest advantage is the cost of writing code, coding agents reduce the economic value of that advantage. But they don’t eliminate the costs of shared semantics, parity, testing, and maintenance. Shopify is shifting those costs from shared code to shared specifications, tests, and review checkpoints. It has the infrastructure to make that bet. Most teams don’t.</p><h3>Five questions before turning an engineering post into a decision</h3><p>The chaos I’ve seen at startups came from following large companies without questioning their choices. Before turning an engineering post into your own decision, ask these five questions:</p><ol><li><strong>Is this company operating at a scale similar to mine?</strong> Team size, budget, user count. Shopify’s optimal architecture isn’t everyone’s optimal architecture.</li><li><strong>Does the post describe the result, or the infrastructure that made it possible?</strong> Which one can I actually replicate? Shopify’s 12 weeks won’t be 12 weeks for a team without the same infrastructure.</li><li><strong>What is being measured?</strong> Rewrite speed and two years of maintenance costs are not the same thing.</li><li><strong>What will it cost me if this company announces the opposite a year from now?</strong> Which libraries, tools, and processes am I tying myself to?</li><li><strong>Is the problem they’re solving actually my problem?</strong> Shopify is dealing with an app that has more than 300 screens, widgets, an Apple Watch app, and Siri Shortcuts. What am I dealing with?</li></ol><p>For teams that want native interfaces but can’t support two separate codebases, there’s also a middle ground frequently suggested on Hacker News: keep business logic in a shared core using something like Kotlin Multiplatform or Rust, and write only the UI natively. Shopify’s post doesn’t mention this option at all.</p><h3>Let’s talk again in a year</h3><p>Shopify’s bet may pay off. Coding agents may genuinely be changing the economics of mobile architecture. But the proof won’t be the time it took to rewrite an app in 2026. It will be the numbers from 2027 and 2028: parity bugs, engineering hours per feature, accessibility regressions, review overhead, model spending, and the human effort required to keep two implementations equivalent. That’s exactly what hermitwriter is asking Shopify to report.</p><p>Until those numbers arrive, Shopify’s post isn’t a conclusion. It’s a bet. Shopify is betting its own money. You’re betting yours.</p><p>Six years of headlines sum it up: <strong>React Native is the Future of Mobile at Shopify</strong> → <strong>Five years of React Native at Shopify</strong> → <strong>Native is now the future of mobile at Shopify.</strong> The next time you read a post about <strong>“the future of mobile,”</strong> ask whose future it’s talking about first.</p><h3>Sources</h3><ul><li><a href="https://shopify.engineering/react-native-future-mobile-shopify">React Native is the Future of Mobile at Shopify</a>, Shopify Engineering, January 2020</li><li><a href="https://shopify.engineering/migrating-our-largest-mobile-app-to-react-native">Migrating our Largest Mobile App to React Native</a>, Shopify Engineering, December 2022</li><li><a href="https://shopify.engineering/five-years-of-react-native-at-shopify">Five years of React Native at Shopify</a>, Shopify Engineering, January 2025</li><li><a href="https://shopify.engineering/react-native-new-architecture">Migrating to React Native’s New Architecture</a>, Shopify Engineering, September 2025</li><li><a href="https://shopify.engineering/back-to-native">Native is now the future of mobile at Shopify</a>, Shopify Engineering, September 2026</li><li><a href="https://shopify.engineering/shop-app-migration">Migrating Shop app from React Native to native</a>, Shopify Engineering, September 2026</li><li><a href="https://news.ycombinator.com/item?id=49643982">Shopify is moving from React Native back to Swift and Kotlin</a>, Hacker News discussion, 957 comments</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c90a1117f11e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Swift and SwiftUI in iOS 27 and macOS 27]]></title>
            <link>https://duruldalkanat.medium.com/swift-and-swiftui-in-ios-27-and-macos-27-d3fd854eab31?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/d3fd854eab31</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[ios-development]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Sun, 20 Sep 2026 20:03:09 GMT</pubDate>
            <atom:updated>2026-09-21T13:20:33.799Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*3ZSAlVCN3SinmvvA" /><figcaption>Photo by <a href="https://unsplash.com/@sorasagano?utm_source=medium&amp;utm_medium=referral">Sora Sagano</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Apple ships no source code with iOS or macOS, but the binaries it does ship record which toolchains produced them. This census reads that record across two corpora: the iOS 27 simulator runtime and macOS 27.</p><p>Swift signals appear in 48.7% of the iOS simulator binaries examined and 34.5% of the macOS binaries. SwiftUI links appear in roughly a third of the binaries that link the UI frameworks measured here.</p><p>Those are presence measurements. They describe the compiled artifacts in these two corpora, not the fraction of Apple’s source code written in Swift or the amount of UI rendered by SwiftUI.</p><p>This census follows the compilation-artifact approach described in Timac’s <a href="https://blog.timac.org/2024/1208-state-of-swift-and-swiftui-ios18/">Apple’s use of Swift and SwiftUI in iOS 18</a>. The measurements were taken on <strong>20 September 2026</strong>, using:</p><ul><li><strong>iOS 27.0, build 24A434:</strong> simulator runtime.</li><li><strong>macOS 27.0, build 26A428.</strong></li><li><strong>Xcode 27.0, build 27A266a.</strong></li></ul><h3>What was counted</h3><p>The iOS corpus contains <strong>5,705 Mach-O binaries</strong>: 3,879 on disk and 1,826 in the dyld simulator shared cache.</p><p>The macOS corpus contains <strong>9,395 binaries</strong>: 5,311 on disk and 4,084 additional cache images after deduplication. The cache’s full image table contains 4,088 entries; four also exist on disk. The counting details are below.</p><p>The iOS total is from a simulator runtime, not a device image. Its composition differs from the device corpus behind Timac’s 6,800-binary iOS 18 count. These totals are not a like-for-like time series. Percentages describe each measured corpus; they should not be treated as device-wide estimates.</p><h3>Swift appears in nearly half of the iOS simulator binaries examined</h3><p>A Swift signal means a __swift5_* section or a link against libswiftCore.dylib. That test identifies <strong>2,780 of 5,705 iOS simulator binaries (48.7%)</strong> and <strong>3,238 of 9,395 macOS binaries (34.5%)</strong>.</p><p>A binary with one Swift file counts exactly like a binary written entirely in Swift. This does not measure the fraction of Apple’s source code that is Swift; how much of each binary is Swift is a separate measurement, covered below. Nothing here supports the stronger claim that half of iOS is written in Swift.</p><figure><img alt="Grouped bars compare language presence in iOS 27 simulator and macOS 27 binaries. Swift: 48.7% and 34.5%; Objective-C: 93.4% and 75.8%; C++: 12.7% and 17.3%, respectively." src="https://cdn-images-1.medium.com/max/1024/1*vL8-hOCq2LdBH5Lm05cF1A.png" /><figcaption>Language signals in the measured binaries. iOS means the simulator runtime. Categories overlap: a binary can carry Swift, Objective-C, and C++ signals.</figcaption></figure><p>Objective-C metadata remains widespread: <strong>5,329 binaries (93.4%)</strong> on iOS and <strong>7,126 (75.8%)</strong> on macOS. C++ library links appear in <strong>722 (12.7%)</strong> and <strong>1,627 (17.3%)</strong>, respectively.</p><p>Separating the Swift and Objective-C signals shows how often they coexist:</p><ul><li><strong>iOS simulator:</strong> 2,552 Objective-C without Swift (44.7%); 2,777 with both (48.7%); 3 Swift without Objective-C (0.1%); 373 with neither (6.5%).</li><li><strong>macOS:</strong> 3,945 Objective-C without Swift (42.0%); 3,181 with both (33.9%); 57 Swift without Objective-C (0.6%); 2,212 with neither (23.5%).</li></ul><p>“Without Objective-C” means no detected Objective-C metadata, not proof that the binary is exclusively Swift. The result is clear at the binary level: Swift signals usually coexist with Objective-C signals.</p><h3>How much of each binary is Swift</h3><p>The counts above answer a yes-or-no question: does a binary carry any Swift at all? How much of a binary is Swift needs a magnitude instead, and one is available: the byte sizes of the __swift5_* and __objc_* sections. Both runtimes read their own metadata, so unlike a symbol table it survives stripping. The section sizes come from a rescan of the same builds on 21 September 2026.</p><p>Swift’s share of each binary’s language metadata, across the binaries that carry a Swift signal:</p><ul><li><strong>iOS simulator (2,780 binaries):</strong> no Swift metadata at all, 30 (1.1%); under 1%, 197 (7.1%); 1–10%, 497 (17.9%); 10–50%, 990 (35.6%); 50–90%, 802 (28.8%); 90% and over, 264 (9.5%).</li><li><strong>macOS (3,238 binaries):</strong> no Swift metadata at all, 88 (2.7%); under 1%, 174 (5.4%); 1–10%, 434 (13.4%); 10–50%, 1,011 (31.2%); 50–90%, 1,166 (36.0%); 90% and over, 365 (11.3%).</li></ul><p>The presence figure holds up under this check. On iOS, 227 of the 2,780 Swift-signal binaries (8.2%) carry less than 1% Swift metadata, 30 of them none at all. Excluding them lowers this from 48.7% to 44.8%; on macOS, it drops from 34.5% to 31.7%. At the other end, 1,066 of the iOS Swift-signal binaries (38.3%) are more than half Swift by this measure.</p><p>This is not a source-line ratio. Swift and Objective-C do not emit comparable amounts of metadata per declaration: Swift’s reflection sections are verbose, while Objective-C’s method lists are compact. The shares compare binaries with each other, not the two languages in absolute terms.</p><p>Two shortcuts give the wrong answer. Counting Swift-mangled symbols with nm measures whether a binary kept its local symbol table, not what language it is in: Freeform reads as 100% Swift that way and Music as 0%, while by section bytes they are 17.6% and 8.8%. Freeform is stripped; Music is not. And __objc_classlist is not an Objective-C class count, because Swift classes are emitted into it too: otool -ov labels all 507 of Weather’s entries “Swift class”.</p><p>Object files cannot be counted either. Apple ships linked, stripped Mach-O rather than .o files. The only structure that preserves object-file boundaries is the debug map, the N_OSO stabs, and stripping removes it. A per-object-file language split is not available from a shipped system.</p><h3>SwiftUI links appear in roughly a third of UI-linking binaries</h3><p>Comparing SwiftUI against every binary includes command-line tools and services with no UI framework link. Restricting the denominator to binaries that link AppKit, UIKit or SwiftUI — whichever the platform has — gives a more relevant comparison.</p><p>UIKit is a macOS UI framework too: 578 Mac binaries link it, 464 of them under /System/iOSSupport — Mac Catalyst. An AppKit-only denominator drops the 283 binaries that link UIKit and neither AppKit nor SwiftUI, and files the 106 Catalyst binaries that link both UIKit and SwiftUI under “SwiftUI without a native framework”.</p><p>SwiftUI appears in <strong>749 of 2,504 UI-linking binaries on iOS (29.9%)</strong> and 767 of 2,426 on macOS (31.6%).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G8uyYm8Wj_wvIKIv7eXDmQ.png" /></figure><p><em>Composition of the UI-linking corpus. “SwiftUI only” means no detected link to AppKit or UIKit. It does not rule out indirect dependencies.</em></p><ul><li><strong>iOS simulator:</strong> 1,755 link UIKit without SwiftUI (70.1%); 746 link both (29.8%); 3 link SwiftUI without UIKit (0.1%).</li><li>macOS: 1,659 link AppKit or UIKit without SwiftUI (68.4%); 622 link a native framework and SwiftUI (25.6%); 145 link SwiftUI with no direct AppKit or UIKit dependency (6.0%).</li></ul><p>The two platforms are closer than a per-platform denominator suggests, but these are dependency patterns. They do not establish how much of an app’s interface uses SwiftUI, which code runs, or whether an entire app has replaced UIKit or AppKit.</p><h3>AppKit and the Dock link SwiftUICore</h3><p>Timac documented the introduction of SwiftUICore in iOS 18 and its link from UIKitCore. In this census, the direct links include AppKit and the Dock on macOS.</p><p>The complete detected lists are short:</p><ul><li><strong>iOS:</strong> UIKitCore, SwiftUI, DesignLibrary, AnimationKit, and TextAnimationSupport.</li><li><strong>macOS:</strong> AppKit, Dock, SwiftUI, UIKitCore, DesignLibrary, AnimationKit, SwiftUITracingSupport, and TextAnimationSupport.</li></ul><p>These links place SwiftUICore as a dependency of both UI frameworks and system components. They do not, on their own, identify which visible features use it or when each dependency was introduced.</p><h3>FoundationModels links extend across system components</h3><p><strong>38 iOS binaries and 36 macOS binaries</strong> link FoundationModels. The iOS list includes HomeKit, ActionKit, Shortcuts, SafariCore, PasswordManagerUI, PassKitUI, HealthExperience, CalendarUIKitInternal, and CoreSpotlightAgenticCore.</p><p>Other examples include CallIntelligenceRuntime, TextUnderstandingRuntime, IntelligenceFlowPlannerRuntime, and the fm executable. The dependencies span multiple parts of the system; a link alone doesn’t demonstrate an active model call or a user-facing feature.</p><p>For context, SwiftData links appear in <strong>30 iOS binaries and 42 macOS binaries</strong>. Those counts are in a similar order of magnitude. A single snapshot cannot establish which framework is being adopted faster.</p><h3>Swift signals are more common in apps and frameworks</h3><p>The iOS simulator’s directory breakdown shows a gradient:</p><ul><li><strong>/Applications:</strong> 195 of 294 binaries carry Swift signals (66.3%).</li><li><strong>/System/Library/PrivateFrameworks:</strong> 1,711 of 2,938 (58.2%).</li><li><strong>/System/Library/Frameworks:</strong> 248 of 466 (53.2%).</li><li><strong>/usr/libexec:</strong> 53 of 125 (42.4%).</li><li><strong>/usr/lib:</strong> 54 of 263 (20.5%).</li></ul><p>Across the framework binaries counted, the Swift-positive share is <strong>57.5% on iOS</strong> and <strong>47.6% on macOS</strong>. These selected directory groups describe where the signals occur; they do not exhaustively partition either corpus.</p><h3>58 executables across the two corpora carry the SwiftUI App protocol signal</h3><p>A more specific signal than a framework link is the mangled 7SwiftUI3AppP marker in an app’s main executable. The census uses it to identify the SwiftUI App lifecycle and finds <strong>26 apps in the iOS simulator runtime and 32 on macOS</strong>.</p><p>The iOS examples include Passwords, Preferences, Preview, Image Playground, Batteries, MusicRecognition, and ShortcutsActions. On macOS, the list includes System Settings, Calculator, Passwords, Weather, Print Center, Font Book, Games, and iPhone Mirroring.</p><p>This is still a static binary heuristic, not a runtime trace of each app’s entry point. Timac reported 19 SwiftUI-lifecycle apps in iOS 18, but the device-versus-simulator difference prevents reading 19 to 26 as a clean measure of growth.</p><h3>How the numbers were produced</h3><p>Mach-O magic values identify the binaries. Load commands provide linked dylibs, segments provide section names, and LC_BUILD_VERSION provides platform and SDK information.</p><p>The classification rules are:</p><ul><li><strong>Swift:</strong> a __TEXT,__swift5_* section or a link to libswiftCore.dylib.</li><li><strong>Objective-C:</strong> an __objc_* section.</li><li><strong>C++:</strong> a link to libc++ or libstdc++.</li></ul><p>Framework identities are matched on the dylib basename, so Foo.framework/Versions/A/Foo and Foo.framework/Foo resolve to the same framework.</p><p>System frameworks also live inside the dyld shared cache. The parser walks cache mapping tables to translate virtual addresses into file offsets, then reads Mach-O headers in place. The iOS cache examined here spans two files totaling about 3.8 GB; the macOS cache spans 80 files.</p><p>Five implementation problems were found and corrected:</p><ul><li><strong>Framework path matching.</strong> Looking only for SwiftUI.framework/SwiftUI missed the versioned macOS path. The contradiction became visible when 32 app executables carried the lifecycle marker while the framework-link count read zero.</li><li><strong>Simulator runtime discovery.</strong> In this setup, Xcode 27 mounted the runtime under /private/var/run/com.apple.security.cryptexd/mnt/, with a changing suffix. Discovery used simctl’s Bundle Path output instead of a hardcoded mount path.</li><li><strong>Subcache filenames.</strong> Probing only sequential numeric suffixes missed names such as .25.dylddata, .26.dyldreadonly, and .79.dyldlinkedit. That had truncated macOS cache coverage to 1,133 of 4,088 images.</li><li><strong>Lazy dylib load commands.</strong> The dependency scan did not read LC_LAZY_LOAD_DYLIB (0x20), so a binary that linked libswiftCore.dylib only lazily was classified as not Swift. Adding that load command to the scan corrected the Swift counts reported here.</li><li><strong>Volume ratio.</strong> The first version of the volume measurement compared __swift5_types entries with __objc_classlist entries. Because Swift classes are also listed in __objc_classlist, that ratio was meaningless. The measurement now uses section byte sizes.</li></ul><h3>Validation and the four-image overlap</h3><p>I compared the macOS cache using Apple’s dyld_info and the Python parser. Both found <strong>4,088 images</strong> and agreed on Objective-C, C++, SwiftUI, UIKit, and AppKit classifications.</p><p>There was <strong>one observed Swift-classification discrepancy</strong>. dyld_info reports a lazy dependency from libobjc.A.dylib to libswiftCore.dylib that the header-based parser does not detect; that edge is not expressed as a load command, so reading LC_LAZY_LOAD_DYLIB does not surface it. This is a known limitation of the comparison, not a global error bound on the census. Agreement between tools does not prove that every heuristic correctly captures source-language or runtime behavior.</p><p>The cache’s 4,088 images include four that also exist on disk: <strong>/usr/lib/dyld and the </strong><strong>libsystem_kernel, </strong><strong>libsystem_platform, and </strong><strong>libsystem_pthread stubs</strong>. Deduplicating that overlap gives:</p><p><strong>4,088 − 4 = 4,084 additional cache images.</strong></p><p><strong>5,311 on-disk binaries + 4,084 additional cache images = 9,395 unique binaries.</strong></p><p>The comparison uses the full cache image table; the system total uses the deduplicated contribution. Both figures describe the same scan at different counting stages.</p><h3>Source and scope</h3><p>Methodological reference: Timac, <a href="https://blog.timac.org/2024/1208-state-of-swift-and-swiftui-ios18/">Apple’s use of Swift and SwiftUI in iOS 18</a>, 8 December 2024. The iOS 27 and macOS 27 figures above are from this census, measured on 20 September 2026. Timac’s article provides historical context, not independent verification of these measurements.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d3fd854eab31" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Vision Pro Developer Strap: Forensic Proof of the “USB 2.0 Bottleneck” with IORegistryExplorer]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://duruldalkanat.medium.com/vision-pro-developer-strap-forensic-proof-of-the-usb-2-0-bottleneck-51f50806c20e?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/2600/1*m9hu7_4htPbUgjU9Y0qn3w.jpeg" width="2752"></a></p><p class="medium-feed-snippet">An IORegistryExplorer deep dive revealing why your $300 accessory is limited to 480 Mbps.</p><p class="medium-feed-link"><a href="https://duruldalkanat.medium.com/vision-pro-developer-strap-forensic-proof-of-the-usb-2-0-bottleneck-51f50806c20e?source=rss-ed0a41b53b8d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://duruldalkanat.medium.com/vision-pro-developer-strap-forensic-proof-of-the-usb-2-0-bottleneck-51f50806c20e?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/51f50806c20e</guid>
            <category><![CDATA[apple-vision-pro]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[xcode]]></category>
            <category><![CDATA[reverse-engineering]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Mon, 22 Dec 2025 02:15:33 GMT</pubDate>
            <atom:updated>2025-12-22T02:19:06.725Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[The Spatial Memory Manifesto: The Future of Nostalgia on Vision Pro ᯅ]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/design-bootcamp/the-spatial-memory-manifesto-the-future-of-nostalgia-on-vision-pro-%E1%AF%85-df2c06def487?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/2600/1*Omm408UC37EBEmdi6toSNw.jpeg" width="2816"></a></p><p class="medium-feed-snippet">Why Apple isn&#x2019;t trying to rewrite your memories, but to give them a physical place in your room.</p><p class="medium-feed-link"><a href="https://medium.com/design-bootcamp/the-spatial-memory-manifesto-the-future-of-nostalgia-on-vision-pro-%E1%AF%85-df2c06def487?source=rss-ed0a41b53b8d------2">Continue reading on Bootcamp »</a></p></div>]]></description>
            <link>https://medium.com/design-bootcamp/the-spatial-memory-manifesto-the-future-of-nostalgia-on-vision-pro-%E1%AF%85-df2c06def487?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/df2c06def487</guid>
            <category><![CDATA[photography]]></category>
            <category><![CDATA[apple-vision-pro]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[spatial-computing]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Fri, 19 Dec 2025 22:19:28 GMT</pubDate>
            <atom:updated>2025-12-20T18:55:05.657Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Creating Engaging Fuel Gauge Animations in SwiftUI]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://duruldalkanat.medium.com/creating-engaging-fuel-gauge-animations-in-swiftui-1b76c1abeecc?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/2600/0*VJC99vD1mZN8Jcw2" width="6000"></a></p><p class="medium-feed-snippet">In iOS development, creating intuitive and visually appealing user interfaces is paramount. SwiftUI, Apple&#x2019;s declarative UI framework&#x2026;</p><p class="medium-feed-link"><a href="https://duruldalkanat.medium.com/creating-engaging-fuel-gauge-animations-in-swiftui-1b76c1abeecc?source=rss-ed0a41b53b8d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://duruldalkanat.medium.com/creating-engaging-fuel-gauge-animations-in-swiftui-1b76c1abeecc?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/1b76c1abeecc</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[animation]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[swiftui]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Sat, 29 Mar 2025 21:38:06 GMT</pubDate>
            <atom:updated>2025-03-29T21:47:22.008Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Pressable vs. TouchableOpacity in React Native: Making the Right Choice]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://duruldalkanat.medium.com/pressable-vs-touchableopacity-in-react-native-making-the-right-choice-4e5212f289d0?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/2600/0*KdILaAlyOEaE1fcu" width="4515"></a></p><p class="medium-feed-snippet">I started working with React Native a while ago and follow this roadmap. One of the titles I encountered was Pressable, but I already knew&#x2026;</p><p class="medium-feed-link"><a href="https://duruldalkanat.medium.com/pressable-vs-touchableopacity-in-react-native-making-the-right-choice-4e5212f289d0?source=rss-ed0a41b53b8d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://duruldalkanat.medium.com/pressable-vs-touchableopacity-in-react-native-making-the-right-choice-4e5212f289d0?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/4e5212f289d0</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[app-development]]></category>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Wed, 01 Jan 2025 22:17:45 GMT</pubDate>
            <atom:updated>2025-01-01T23:00:36.807Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Building Beautiful, Functional Text Fields in SwiftUI]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://duruldalkanat.medium.com/building-beautiful-functional-text-fields-in-swiftui-399a6cb54907?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/1024/1*qDNYkMIivvHamyTLyunMNg.png" width="1024"></a></p><p class="medium-feed-snippet">As iOS developers, crafting a delightful user experience is one of our top priorities. One critical UI element we often need to get right&#x2026;</p><p class="medium-feed-link"><a href="https://duruldalkanat.medium.com/building-beautiful-functional-text-fields-in-swiftui-399a6cb54907?source=rss-ed0a41b53b8d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://duruldalkanat.medium.com/building-beautiful-functional-text-fields-in-swiftui-399a6cb54907?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/399a6cb54907</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[swift-programming]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Tue, 05 Nov 2024 18:30:55 GMT</pubDate>
            <atom:updated>2024-11-05T18:30:55.239Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Asynchronous Data Processing in Swift with adjacentPairs()]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://duruldalkanat.medium.com/asynchronous-data-processing-in-swift-with-adjacentpairs-b8174cb2fbbb?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/2304/1*MzpVCZGx4pxxiT3n8qy00Q.jpeg" width="2304"></a></p><p class="medium-feed-snippet">Swift&#x2019;s async/await paradigm has revolutionized how we handle asynchronous operations. The Swift Async Algorithms package takes this&#x2026;</p><p class="medium-feed-link"><a href="https://duruldalkanat.medium.com/asynchronous-data-processing-in-swift-with-adjacentpairs-b8174cb2fbbb?source=rss-ed0a41b53b8d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://duruldalkanat.medium.com/asynchronous-data-processing-in-swift-with-adjacentpairs-b8174cb2fbbb?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/b8174cb2fbbb</guid>
            <category><![CDATA[concurrency]]></category>
            <category><![CDATA[asynchronous]]></category>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Mon, 21 Oct 2024 19:53:33 GMT</pubDate>
            <atom:updated>2024-11-05T18:30:31.283Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[In-Depth Comparison: Flutter vs Jetpack Compose UI Components]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://duruldalkanat.medium.com/in-depth-comparison-flutter-vs-jetpack-compose-ui-components-875e05843084?source=rss-ed0a41b53b8d------2"><img src="https://cdn-images-1.medium.com/max/2304/1*JZIJNTioG13xc4avZXbuPg.jpeg" width="2304"></a></p><p class="medium-feed-snippet">In the ever-evolving world of mobile app development, two frameworks have been gaining significant traction: Flutter and Jetpack Compose&#x2026;</p><p class="medium-feed-link"><a href="https://duruldalkanat.medium.com/in-depth-comparison-flutter-vs-jetpack-compose-ui-components-875e05843084?source=rss-ed0a41b53b8d------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://duruldalkanat.medium.com/in-depth-comparison-flutter-vs-jetpack-compose-ui-components-875e05843084?source=rss-ed0a41b53b8d------2</link>
            <guid isPermaLink="false">https://medium.com/p/875e05843084</guid>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Durul Dalkanat]]></dc:creator>
            <pubDate>Tue, 01 Oct 2024 22:02:04 GMT</pubDate>
            <atom:updated>2024-11-05T18:30:15.710Z</atom:updated>
        </item>
    </channel>
</rss>