<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Those Who Swift]]></title><description><![CDATA[Your weekly Swift news delivered directly to your inbox!]]></description><link>https://thosewhoswift.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!FQA8!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png</url><title>Those Who Swift</title><link>https://thosewhoswift.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 16 Jul 2026 22:00:15 GMT</lastBuildDate><atom:link href="https://thosewhoswift.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Those Who Swift]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thosewhoswift@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thosewhoswift@substack.com]]></itunes:email><itunes:name><![CDATA[Those Who Swift]]></itunes:name></itunes:owner><itunes:author><![CDATA[Those Who Swift]]></itunes:author><googleplay:owner><![CDATA[thosewhoswift@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thosewhoswift@substack.com]]></googleplay:email><googleplay:author><![CDATA[Those Who Swift]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Those Who Swift - Issue 275]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-275</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-275</guid><pubDate>Wed, 15 Jul 2026 21:18:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p><strong>We have a new team member! &#128587;&#8205;&#9792;&#65039;</strong></p><p>Divya Ravi, Senior iOS Engineer at Unity and creator of <a href="https://divyaravidev.substack.com/p/introducing-foundationmodelskit-production">FoundationModelsKit</a>, is joining <em>Those Who Swift</em> as a new newsletter editor.</p><p>If you&#8217;d like to get to know Divya, check out her <a href="https://www.linkedin.com/in/divya-ravi-955378105/">LinkedIn</a> and <a href="https://x.com/DivyaRaviIos">X</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xv4-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xv4-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 424w, https://substackcdn.com/image/fetch/$s_!Xv4-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 848w, https://substackcdn.com/image/fetch/$s_!Xv4-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 1272w, https://substackcdn.com/image/fetch/$s_!Xv4-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xv4-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:454072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/205959331?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xv4-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 424w, https://substackcdn.com/image/fetch/$s_!Xv4-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 848w, https://substackcdn.com/image/fetch/$s_!Xv4-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 1272w, https://substackcdn.com/image/fetch/$s_!Xv4-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbafe630a-0cf7-4488-acd7-aca4fe01a151_1584x396.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Anton isn&#8217;t going anywhere!</p><p>He&#8217;s now the editor of our <strong><a href="https://thosewhoswift.com/">new website</a></strong> - which brings me to the second big news. &#129395;</p><p>We now have a blog with unique, quality content.</p><p>New content, collaborations, partnerships, special deals, and more coming soon. Stay tuned! &#128526;&#129304;</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nS4n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nS4n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!nS4n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!nS4n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!nS4n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nS4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/205959331?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nS4n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!nS4n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!nS4n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!nS4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a7ff44-2c38-4846-9ee6-d942ebcea4df_1200x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>Own Your web2app Funnel and Get Paid in Days</strong></h2><p><span>web2wave lets subscription apps sell on the web first: users complete a quiz flow, pay, then download the app with an active subscription. The sale closes before install, so you don&#8217;t pay 15-30% app store fees on it.</span></p><ul><li><p><span>Get paid in 1-2 days instead of 30+, for much faster cash flow.</span></p></li><li><p><span>Build the full funnel with the no-code editor, or in a minute with Wavy AI or the web2wave MCP.</span></p></li><li><p><span>Ship A/B tests and cancellation flows without waiting on app releases.</span></p></li><li><p><span>Keep full web-side tracking and UTM attribution, even post-ATT.</span></p></li></ul><p>Payment coverage in web2app: direct integrations with Paddle, Stripe, Solidgate, FastSpring, Zotlo, Unlimit, Xsolla, PayPal, Billerix, and 100+ more via Primer.</p><p>Free to use until you launch paid traffic.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://web2wave.com/?utm_source=thosewhoswift&amp;utm_medium=newsletter&amp;utm_campaign=sponsorship2&quot;,&quot;text&quot;:&quot;Try web2wave free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://web2wave.com/?utm_source=thosewhoswift&amp;utm_medium=newsletter&amp;utm_campaign=sponsorship2"><span>Try web2wave free</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kSUd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kSUd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 424w, https://substackcdn.com/image/fetch/$s_!kSUd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 848w, https://substackcdn.com/image/fetch/$s_!kSUd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 1272w, https://substackcdn.com/image/fetch/$s_!kSUd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kSUd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png" width="1456" height="276" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:276,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131570,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/205959331?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kSUd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 424w, https://substackcdn.com/image/fetch/$s_!kSUd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 848w, https://substackcdn.com/image/fetch/$s_!kSUd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 1272w, https://substackcdn.com/image/fetch/$s_!kSUd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff19657fb-691d-412f-b0f2-e1656dc6fb73_1584x300.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h1>Post-WWDC26: The 3 On-Device AI Patterns That Will Actually Ship This Year</h1><p><em>with Divya Ravi &#8212; Technical Editor &amp; iOS engineer, creator of FoundationModelsKit</em></p><p>Every June, WWDC produces the same split-screen reaction: a keynote full of features that sound revolutionary, followed by a developer community quietly asking which of them will actually be usable in a shipping app before next June. This year is no different. Between Siri AI, Private Cloud Compute, and a redesigned Foundation Models framework, there&#8217;s a lot to sort through &#8212; and most of the coverage so far has just listed announcements rather than telling you what to actually build against.</p><p>So here are the three patterns from WWDC26 I think are worth architecting around this cycle &#8212; not because they&#8217;re the flashiest, but because they&#8217;re the ones you can ship on, today, without waiting for a keynote demo to become real.</p><p><strong>1. Model portability is no longer a side project &#8212; it&#8217;s a protocol.</strong></p><p>Apple&#8217;s new LanguageModel protocol means your app&#8217;s AI logic doesn&#8217;t have to be married to Apple&#8217;s on-device model anymore. Swap in Claude, swap in Gemini, or fall back to on-device &#8212; all through the same session interface, with your tool calls and context management untouched. In practice, this turns a decision that used to require re-architecting your AI layer into a Swift Package Manager dependency change.</p><p>Why it matters: most teams have been quietly hedging against being locked into Apple&#8217;s model quality, especially for anything requiring nuanced reasoning. This protocol makes that hedge free. If your app currently has model logic tangled into your view layer or business logic, this is the year that tech debt gets expensive &#8212; everyone else&#8217;s app is about to be able to swap providers in an afternoon, and yours won&#8217;t be if the session boundary isn&#8217;t clean.</p><p><strong>2. Bring-your-own-model finally has a real home: Core AI.</strong></p><p>Core AI is Apple&#8217;s new answer to teams who don&#8217;t want to use Apple&#8217;s model at all &#8212; a full on-device deployment framework with a Python conversion pipeline and a Swift runtime, tuned to run across CPU, GPU, and Neural Engine without a server dependency. This has existed in rougher form via Core ML for years, but Core AI is the first version that feels like a first-class platform citizen rather than a workaround.</p><p>Why it matters: if you&#8217;ve been holding off on shipping a proprietary or fine-tuned model because the on-device tooling felt like a science project, that excuse is gone. The teams who move now &#8212; while most of the ecosystem is still only using Apple&#8217;s default model &#8212; get a real differentiation window before &#8220;on-device AI&#8221; becomes table stakes and looks identical across every app in a category.</p><blockquote><p><strong>&#8220;None of these patterns are really about AI capability &#8212; they&#8217;re about architecture. The apps that struggle won&#8217;t fail because the AI is bad. They&#8217;ll fail because the plumbing underneath was never built to be swapped, extended, or exposed in the first place.&#8221;</strong></p></blockquote><p><strong>3. App discovery is moving into the OS, not your app&#8217;s UI.</strong></p><p>Between the Spotlight semantic index, App Intents schemas, and the new View Annotations API, Apple is making a clear bet: the primary way people invoke your app&#8217;s functionality is about to be Siri asking on their behalf, not someone tapping your icon. Annotate your views, expose your actions through App Intents, and your content becomes something the system can reason about and act on &#8212; conversationally, without you building any of that interface yourself.</p><p>Why it matters: this is the one pattern that&#8217;s easy to underestimate because it doesn&#8217;t produce a flashy demo. But it&#8217;s the one most likely to quietly redefine what &#8220;distribution&#8221; means for an app over the next two years. Ignore it and you&#8217;re opting out of an entire invocation surface your competitors will be inside of.</p><p><strong>The thread connecting all three</strong></p><p>Model portability rewards apps with clean session boundaries. Core AI rewards apps that already separate inference from UI. App Intents rewards apps that expose actions as first-class objects instead of burying them in view controllers. None of this is really about AI capability &#8212; it&#8217;s about whether your architecture was ready for it.</p><p>If you&#8217;re planning your roadmap around this WWDC cycle, the highest-leverage work isn&#8217;t picking which shiny feature to bolt on first. It&#8217;s making sure your architecture can say yes to any of the three.</p><p><em>Agree, disagree, or think I&#8217;m missing a pattern? Just hit reply &#8212; I read every one.</em></p><div><hr></div><h1>                               Apple &#127823;</h1><h3><a href="https://blakecrosley.com/blog/foundation-models-tool-calling-ios-27">Foundation Models in iOS 27: Tool-Calling Control</a></h3><p>Blake Crosley digs into the new ToolCallingMode API and Apple&#8217;s built-in OCR and barcode tools &#8212; the kind of detail that matters once you&#8217;re past the keynote demo and into shipping.</p><ul><li><p>The new ToolCallingMode structure lets you control how aggressively the model calls tools mid-generation, and the framework can auto-switch modes to bound activity within a single request.</p></li><li><p>OCRTool and BarcodeReaderTool run entirely on-device, in your app&#8217;s own sandbox &#8212; Apple maintaining the recognition code changes who owns it, not where it runs.</p></li></ul><h4><a href="https://blakecrosley.com/blog/foundation-models-tool-calling-ios-27">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://jonbrown.org/blog/apple-intelligence-xcode-wwdc26-platform-control/">Apple&#8217;s WWDC26 AI Story Is About Control, Not Just Models</a></h3><p>Jon Brown&#8217;s read on the keynote pairs directly with this issue&#8217;s essay &#8212; if you only click one link this week, make it this one.</p><ul><li><p>Argues Apple Intelligence has less to work with when an app&#8217;s data model is vague or its actions aren&#8217;t cleanly represented &#8212; architecture first, AI second.</p></li><li><p>Makes the case that App Intents should be treated as core app structure from day one, not a Siri checkbox bolted on near ship.</p></li></ul><h4><a href="https://jonbrown.org/blog/apple-intelligence-xcode-wwdc26-platform-control/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://andrew.ooo/answers/wwdc-2026-developer-tools-xcode-swift-foundation-models-june-2026/">WWDC 2026 Developer Tools: Xcode 27, Swift, Foundation Models</a></h3><p>A blunt, opinionated take &#8212; and one I don&#8217;t think is right, which is exactly why it&#8217;s worth reading.</p><ul><li><p>Argues App Intents adoption is now effectively mandatory, since apps without it become invisible to Siri as an entry point.</p></li><li><p>I&#8217;d push back on &#8220;mandatory&#8221; for anything outside the productivity/utility category &#8212; but the underlying pressure is real and worth planning around either way.</p></li></ul><h4><a href="https://andrew.ooo/answers/wwdc-2026-developer-tools-xcode-swift-foundation-models-june-2026/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1>                               Tutorials &#128210;</h1><h3><a href="https://artemnovichkov.com/blog/getting-started-with-apple-foundation-models">Getting Started with Apple&#8217;s Foundation Models</a></h3><p>Artem Novichkov builds a HealthKit-powered health coaching feature using a custom Tool &#8212; the most practical, code-first entry point in this issue.</p><ul><li><p>Walks through defining a custom Tool that pulls live blood pressure data from HealthKit into a LanguageModelSession.</p></li><li><p>Good starting point if you haven&#8217;t touched Foundation Models yet &#8212; minimal boilerplate to get a working tool-calling session running.</p></li></ul><h4><a href="https://artemnovichkov.com/blog/getting-started-with-apple-foundation-models">Read more.</a>&#128205;Level: Beginner<br></h4><h3><a href="https://substack.com/@divyaravidev/p-204675868">Introducing FoundationModelsKit: Production Patterns for Foundation Models on iOS</a></h3><p><em>Full disclosure: this one&#8217;s mine &#8212; including it because it&#8217;s directly on-theme for this issue, not just because I wrote it.</em> At WWDC26, Apple made a bold move: Foundation Models now ship with iOS, on-device, with no download or external dependency.</p><ul><li><p>Walks through production patterns for actually shipping with Foundation Models, not just prototyping with it.</p></li><li><p>If you want the deeper technical background behind this issue&#8217;s essay, this is where it comes from.</p></li></ul><h4><a href="https://substack.com/@divyaravidev/p-204675868">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1>                                 Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://www.avanderlee.com/ai-development/swiftui-best-practices-xcode-27-agent-skill/">SwiftUI Best Practices, straight from Apple&#8217;s Xcode 27 Agent Skill</a></h3><p>Antoine van der Lee dissects the actual Markdown reference files Apple bundled into Xcode 27&#8217;s SwiftUI agent skill &#8212; and it&#8217;s basically a written confirmation of this issue&#8217;s whole thesis.</p><ul><li><p>The skill&#8217;s reference files split cleanly by concern &#8212; structure, data flow, environment, modifiers &#8212; all built around one idea: a view is SwiftUI&#8217;s unit of invalidation, and most performance problems come from invalidating more than you need to.</p></li><li><p>Worth reading even if you don&#8217;t use agents &#8212; it&#8217;s effectively Apple&#8217;s own internal SwiftUI style guide, now public.</p></li></ul><h4><a href="https://www.avanderlee.com/ai-development/swiftui-best-practices-xcode-27-agent-skill/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://antongubarenko.substack.com/p/swift-bits-my-top-xcode-ci-environment">Swift Bits: My Top Xcode CI Environment Variables</a></h3><p>Anton digs into Apple&#8217;s environment variable reference for Xcode Cloud &#8212; unglamorous, but exactly the kind of thing that saves you an afternoon of debugging why CI behaves differently from your local machine.</p><ul><li><p>Covers the popular variables for detecting which workflow, build action, and app target is running &#8212; the context most custom ci_scripts builds actually need.</p></li><li><p>A good reminder that hardcoded CI scripts age badly; context-aware ones survive team and project changes.</p></li></ul><h4><a href="https://antongubarenko.substack.com/p/swift-bits-my-top-xcode-ci-environment">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1>                                   Design &#127912;</h1><h3><a href="https://www.cultofmac.com/news/liquid-glass-changes-ios-27-macos-27">5 biggest Liquid Glass changes in iOS 27 and macOS 27</a></h3><p>A clear rundown of how Apple is walking back a year of Liquid Glass complaints &#8212; legibility, corner-radius consistency, and icon clarity all got real fixes this cycle.</p><ul><li><p>Apple&#8217;s HI design director confirmed most of these improvements apply automatically to apps already using the Liquid Glass framework, with minimal developer work required.</p></li><li><p>macOS 27 finally standardizes corner radius across apps &#8212; a small detail, but one that&#8217;s been a visible inconsistency since Liquid Glass launched.</p></li></ul><h4><a href="https://www.cultofmac.com/news/liquid-glass-changes-ios-27-macos-27">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1>                        Other cool stuff &#129520;</h1><h3><a href="https://www.donnywals.com/how-i-use-flowdeck-to-let-my-ai-agent-build-and-run-my-apps/">How I use FlowDeck to let my AI agent build and run my apps</a></h3><p>Donny Wals on folding an agentic coding tool into his existing workflow &#8212; a good counterweight to the rest of this issue, since it&#8217;s about AI helping you build, not AI features inside what you ship.</p><ul><li><p>Started using FlowDeck after the tool&#8217;s builder reached out following a post Donny made about managing AI agent context windows.</p></li><li><p>The interesting part isn&#8217;t the tool itself &#8212; it&#8217;s the workflow shift of agents opening PRs against real crash reports while you&#8217;re away from the keyboard.</p></li></ul><h4><a href="https://www.donnywals.com/how-i-use-flowdeck-to-let-my-ai-agent-build-and-run-my-apps/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1>                                   Video &#127909;</h1><h3><a href="https://developer.apple.com/videos/play/wwdc2026/240/">Build intelligent Siri experiences with App Schemas</a></h3><p>Straight from Apple&#8217;s own WWDC26 session &#8212; Dan Niemeyer walks through exactly how Siri understands and acts on your app&#8217;s content, which pairs directly with pattern 3 in this issue&#8217;s essay.</p><ul><li><p>Covers how App Entities model your existing content (a calendar event, a mail message, a photo) so the system can reason about it without you rebuilding your data model.</p></li><li><p>Demonstrates real cross-app actions, like Siri sending someone&#8217;s latest report by name &#8212; worth watching before you scope your own App Intents work this cycle.</p></li></ul><h4><a href="https://developer.apple.com/videos/play/wwdc2026/240/">Watch here.</a>&#128205;Level: Intermediate</h4><div><hr></div><p>Thanks for reading! </p><p><strong>Got a pick worth featuring? &#128236;</strong> Use the <strong><a href="https://thosewhoswift.com/submit-an-article/">submission form</a></strong> and share with more than 15,000 developers.</p><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 274]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-274</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-274</guid><pubDate>Wed, 08 Jul 2026 20:56:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>Fable 5 is back! At least for a little while. &#129310;</p><p>Anthropic has extended its availability until July 12, giving developers a few more weeks to work with the model before the next planned change.</p><p>The announcement turned out to be more controversial than expected. When access to Fable 5 was initially reduced, many users were automatically moved back to Claude 4.8. While still a capable model, plenty of developers noticed the difference. Longer reasoning, more consistent code generation, and overall responsiveness were among the areas where Fable 5 had earned its reputation. Going back felt less like a version update and more like losing a favorite development tool.</p><p>This situation also highlights an interesting challenge of cloud AI. Unlike traditional software, where you decide when to upgrade or downgrade, modern AI services can change underneath your workflow. The same prompt may produce different results depending on the currently available model, making consistency another variable developers have to consider.</p><p>Whether Fable 5 stays longer or not, one thing is clear: developers quickly adapt to better tools, and going backwards is never an easy sell.</p><p>Are you using Fable 5 in your daily workflow, or has another model become your primary coding assistant?</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://livsycode.com/best-practices/ai-agent-skills-for-ios-development/">AI Agent Skills For iOS Development</a></h3><p>Artem Mirzabekian gives a clean mental model for something a lot of teams are still treating as vague tooling folklore.</p><p>&#8226; The article separates repository rules, Claude project memory, and reusable skills into distinct jobs<br>&#8226; The practical value is in making agents less guessy: small instruction files for always-on rules, skills for repeatable workflows, and CI for anything that must be enforced</p><h4><a href="https://livsycode.com/best-practices/ai-agent-skills-for-ios-development/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.swift.org/blog/whats-new-in-swift-june-2026/">What&#8217;s New In Swift: June 2026 Edition</a></h3><p>Swift&#8217;s June digest feels more substantial than usual because WWDC26 gave it a lot to work with, from language changes to ecosystem moves and major open-source announcements.</p><p>&#8226; The biggest updates include Swift 6.4 previews, Swift in parts of Apple&#8217;s kernel, an open-sourced QUIC transport layer, and new Foundation Models utilities<br>&#8226; It also works well as a community snapshot, pulling in Swift Package Index joining Apple, the new Networking workgroup, notable package releases, and a few evolution proposals worth tracking</p><h4><a href="https://www.swift.org/blog/whats-new-in-swift-june-2026/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://www.avanderlee.com/swift/defer-usage-swift/">Defer In Swift Explained With Code Examples</a></h3><p>Antoine van der Lee revisits defer through a modern Swift lens, which makes the article more useful than a basic keyword refresher.</p><p>&#8226; It covers both the classic cleanup use case and the newer Swift 6.4 ability to await inside defer when the surrounding context is async<br>&#8226; One of the clearest points is why Task { ... } is not a real replacement here: unstructured cleanup can outlive the function, while async defer preserves the guarantee that cleanup finishes before scope exit</p><h4><a href="https://www.avanderlee.com/swift/defer-usage-swift/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://tanaschita.com/swift-concurrency-sendable/">Understanding Sendable In Swift</a></h3><p>Natascha Fadeeva explains Sendable from the angle that matters most in real code: what happens when values cross tasks, actors, and other concurrency boundaries.</p><p>&#8226; Sendable marks types that are safe to pass across concurrency boundaries, and Swift 6 treats violations much more strictly than Swift 5&#8217;s default mode<br>&#8226; The article is strongest where it gets practical about classes: immutable final classes can conform, mutable shared state usually belongs in an actor, and @unchecked Sendable should be treated as a manual safety promise, not a warning silencer</p><h4><a href="https://tanaschita.com/swift-concurrency-sendable/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://swiftui-garden.com/Reference/ConcentricRectangle-and-ContainerRelativeShape">ConcentricRectangle And ContainerRelativeShape</a></h3><p>Ralf Ebert&#8217;s note is short, but it clears up a visual detail that is easy to miss when trying the new shape APIs.</p><p>&#8226; ConcentricRectangle and ContainerRelativeShape both adapt to outer rounded container shapes, but they do not behave the same once positioning shifts<br>&#8226; The key distinction is practical: ConcentricRectangle is more tied to actual corner geometry, while ContainerRelativeShape stays more uniform as a general container-aware shape</p><h4><a href="https://swiftui-garden.com/Reference/ConcentricRectangle-and-ContainerRelativeShape">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://antongubarenko.substack.com/p/ios27-cadisplaylink-for-uiwindowscene">iOS27: CADisplayLink for UIWindowScene</a></h3><p>Article explains a small beta API change to make a bigger point about how display-driven work should be modeled in modern UIKit.</p><p>&#8226; The article clearly separates <code>Timer</code> from <code>CADisplayLink</code>: one is interval-based, the other is tied to frame boundaries and visual smoothness<br>&#8226; The new part in iOS 27 is scene ownership, where display-synchronized work can be attached to a specific <code>UIWindowScene</code> instead of feeling like a loose global loop</p><h4><a href="https://antongubarenko.substack.com/p/ios27-cadisplaylink-for-uiwindowscene">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://nilcoalescing.com/blog/CustomBindingsInSwiftUIClosuresVsSubscripts/">Custom Bindings In SwiftUI: Closures Vs Subscripts</a></h3><p>Natalia Panferova takes a very specific SwiftUI pattern and turns it into a useful performance lesson about how bindings are represented.</p><p>&#8226; Binding(get:set:) is flexible, but recreating closure-based bindings in body can trigger extra row updates when unrelated state changes <br>&#8226; A subscript-based binding gives SwiftUI a more stable projection to track, so child views only reevaluate when the relevant state actually changes</p><h4><a href="https://nilcoalescing.com/blog/CustomBindingsInSwiftUIClosuresVsSubscripts/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://claude.com/blog/cowork-web-mobile">Claude Cowork On Web And Mobile</a></h3><p>Anthropic is expanding Claude Cowork beyond desktop, which changes the product from a laptop-bound agent into something that can follow work across devices.</p><p>&#8226; Cowork is rolling out to web and mobile first for Max users, with more plans to follow over the next several weeks<br>&#8226; The bigger shift is background continuity: sessions, files, and approvals can now move between desktop, phone, and web while Claude keeps working even when no device is online</p><h4><a href="https://claude.com/blog/cowork-web-mobile">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://www.sagarunagar.com/blog/swiftui-crossfade-navigation-transition/">SwiftUI .crossFade Navigation Transition In iOS 27</a></h3><p>Sagar Unagar highlights a small SwiftUI addition that will probably get used a lot more than its size suggests.</p><p>&#8226; .crossFade gives SwiftUI a built-in fade transition with almost no setup<br>&#8226; It fits screens like settings, forms, editors, and login flows better than zoom-style transitions</p><h4><a href="https://www.sagarunagar.com/blog/swiftui-crossfade-navigation-transition/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=F7cvw2_m_b4">Modern iOS Performance Myths: Episode 1</a></h3><p>Artem Mirzabekian and Bogdan Poplauschi use the first Swift Academy episode to push performance discussions away from vague &#8220;fast or slow&#8221; claims and toward how apps actually feel in production.</p><p>&#8226; A technically fast app can still feel slow if feedback arrives late, state updates wake too much UI, or performance only looks good on modern devices<br>&#8226; The episode also cuts through common myths around SwiftUI, UIKit, averages, and concurrency, with one clear message: measure real user experience, not just pretty local metrics</p><h4><a href="https://www.youtube.com/watch?v=F7cvw2_m_b4">Watch here.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.youtube.com/watch?v=m5VdG-EKnmk">Reordering SwiftData In List And Grid</a></h3><p>Stewart Lynch walks through two different reordering paths for SwiftData-backed content, starting with the built-in List move flow and then building full drag-and-drop behavior for a grid.</p><p>&#8226; The list version is simple: use onMove, update sortOrder, and save back through modelContext<br>&#8226; The grid version is the more useful part: keep a local display array for drag state, reorder it with a custom drop delegate, then persist the final order only when the drop completes</p><h4><a href="https://www.youtube.com/watch?v=m5VdG-EKnmk">Watch here.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Books &#128218;</h1><h3><a href="https://anubhav52.gumroad.com/l/txbtwg?layout=discover&amp;recommended_by=search&amp;_gl=1*1e2sg2v*_ga*MTAxODg0NTgzOC4xNzgzNTE0MDA0*_ga_6LJN6D94N6*czE3ODM1MTQwMDQkbzEkZzEkdDE3ODM1MTQwMjckajM3JGwwJGgw">The iOS Core Engineering Series &#8212; Volume 1</a></h3><p>Anubhav Giri positions this as a fundamentals-first iOS engineering resource built around two topics that trip up a lot of developers once apps get real.</p><p>&#8226; Volume 1 focuses on memory and concurrency<br>&#8226; From the page snippet, it looks aimed at system-level foundations rather than framework tips</p><h4><a href="https://anubhav52.gumroad.com/l/txbtwg?layout=discover&amp;recommended_by=search&amp;_gl=1*1e2sg2v*_ga*MTAxODg0NTgzOC4xNzgzNTE0MDA0*_ga_6LJN6D94N6*czE3ODM1MTQwMDQkbzEkZzEkdDE3ODM1MTQwMjckajM3JGwwJGgw">Get here.</a>&#128205;</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 273]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-273</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-273</guid><pubDate>Wed, 01 Jul 2026 20:30:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>This week, Apple announced price increases across most of its hardware lineup, including MacBooks, iPads, HomePods, and Apple TV. The notable exception is the iPhone. According to the company, soaring memory and storage chip prices, driven largely by AI data center demand, have reached a point where Apple can no longer absorb the additional costs. Even Apple, with one of the strongest supply chains in the industry, isn&#8217;t immune to the global memory shortage.</p><p>This has another consequence for developers. Running open-source LLMs locally is becoming increasingly attractive as cloud services tighten token limits and subscription models. But local AI needs RAM, and lots of it. Machines with 64 GB, 96 GB, or 128 GB of unified memory are now significantly more expensive, with many high-memory Mac configurations selling at substantial premiums, even on the secondary market and major retailers. The cost of moving away from cloud AI is rising alongside the cost of staying with it.</p><p>We&#8217;re entering an interesting phase where AI isn&#8217;t limited by model quality anymore. Instead, it&#8217;s becoming constrained by infrastructure, memory availability, and cost. Choosing between cloud-hosted models and running them locally is no longer just a technical decision. It&#8217;s increasingly a financial one.</p><p>If hardware prices continue to rise, would you rather invest in a powerful local machine for open-source LLMs or continue relying on cloud AI subscriptions?</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://www.sagarunagar.com/blog/swiftui-reorderable-lazy-layouts-ios-27/">Reordering Beyond List - SwiftUI iOS 27</a></h3><p>Sagar Unagar highlights one of the most overdue SwiftUI upgrades in iOS 27: drag-to-reorder is no longer trapped inside List.</p><p>&#8226; reorderable() and reorderContainer(for:) bring native reordering to stacks, grids, and custom Layout types<br>&#8226; SwiftUI reports a ReorderDifference, while your app stays responsible for applying and persisting the move</p><h4><a href="https://www.sagarunagar.com/blog/swiftui-reorderable-lazy-layouts-ios-27/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://livsycode.com/swiftui/a-custom-pull-to-refresh-in-swiftui/">A Custom Pull-to-Refresh In SwiftUI</a></h3><p>Artem Mirzabekian treats pull-to-refresh as a state machine problem, which is what makes this custom approach feel more deliberate than most one-off gesture hacks.</p><p>&#8226; The component exposes the full refresh lifecycle, from pull progress to finishing animation<br>&#8226; It is built for cases where .refreshable is not enough, like branded indicators, custom thresholds, and tighter layout control</p><h4><a href="https://livsycode.com/swiftui/a-custom-pull-to-refresh-in-swiftui/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://tanaschita.com/ios-privacy-manifests/">Understanding Privacy Manifests In iOS</a></h3><p>Natascha Fadeeva lays out privacy manifests as a practical Xcode task, not just another compliance checkbox.</p><p>&#8226; A PrivacyInfo.xcprivacy file declares collected data, tracking use, and required reason API access for your app or SDK. <br>&#8226; The article is especially useful around third-party SDKs and required reason APIs like UserDefaults, file timestamps, disk space, boot time, and active keyboard access.</p><h4><a href="https://tanaschita.com/ios-privacy-manifests/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://azamsharp.com/2026/06/24/where-should-loading-state-live-in-swiftui.html">Where Should Loading State Live In SwiftUI?</a></h3><p>Mohammad Azam uses a simple products example to make a larger architectural point about where state duplication starts to creep in.</p><p>&#8226; He argues for keeping loading state in the view while the store stays the single source of truth for data<br>&#8226; The article is really about tradeoffs: some solutions can work, but they can also duplicate state and make updates like add or refresh feel more awkward</p><h4><a href="https://azamsharp.com/2026/06/24/where-should-loading-state-live-in-swiftui.html">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://aleahim.com/blog/swiftui-is-one-graph/">SwiftUI Is One Graph, Over 40+ Years of Engineering</a></h3><p>Mihaela Mihaljevi&#263; Jaki&#263;&#8217;s post is less a SwiftUI tutorial and more an attempt to strip the framework down to its engine room.</p><p>&#8226; The central claim is that SwiftUI behaves like a single demand-driven graph, not a view tree that gets broadly diffed and rebuilt. <br>&#8226; It gets more interesting when the article connects that graph to the older stack beneath it &#8212; Core Animation, Core Graphics, Core Text, and Core Image &#8212; and argues that SwiftUI only really makes sense once you see the deeper machinery it sits on top of.</p><h4><a href="https://aleahim.com/blog/swiftui-is-one-graph/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://www.pointfree.co/blog/posts/217-proposing-task-local-test-traits-for-swift-testing">Proposing Task-Local Test Traits For Swift Testing</a></h3><p>Point-Free&#8217;s proposal is small on the surface, but it targets a very real annoyance in test setup for task-local values.</p><p>&#8226; It would add a built-in .taskLocal trait, so tests could bind task locals without writing a custom trait for each one. <br>&#8226; The bigger benefit is less boilerplate and less need for separate test-support modules just to make task locals usable in Swift Testing.</p><h4><a href="https://www.pointfree.co/blog/posts/217-proposing-task-local-test-traits-for-swift-testing">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://openai.com/index/previewing-gpt-5-6-sol/">Previewing GPT-5.6 Sol: A Next-Generation Model</a></h3><p>OpenAI is introducing a new three-tier GPT-5.6 family, with Sol as the flagship model, Terra as the balanced middle tier, and Luna as the faster lower-cost option.</p><p>&#8226; Sol adds new max reasoning and an ultra mode that uses subagents for more complex work. <br>&#8226; The preview is limited at first, with OpenAI emphasizing stronger safeguards, better coding performance, and broader availability in the coming weeks.</p><h4><a href="https://openai.com/index/previewing-gpt-5-6-sol/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://www.anthropic.com/news/claude-sonnet-5">Introducing Claude Sonnet 5</a></h3><p>Anthropic is positioning Claude Sonnet 5 as its most agentic Sonnet yet, aiming to bring Opus-like follow-through and tool use to a cheaper tier.</p><p>&#8226; It narrows the gap with Opus 4.8 on reasoning, coding, tool use, and knowledge work, while launching as the default model for Free and Pro plans. <br>&#8226; Pricing starts at $2 input / $10 output per million tokens through August 31, 2026, then moves to $3 / $15, with Anthropic also saying Sonnet 5 is safer than 4.6 overall and weaker than Opus models on dangerous cyber tasks.</p><h4><a href="https://www.anthropic.com/news/claude-sonnet-5">Read more.</a>&#128205;Level: Beginner</h4><h3><a href="https://www.anthropic.com/news/claude-science-ai-workbench">Claude Science, An AI Workbench For Scientists, Is Now Available</a></h3><p>Anthropic is pushing deeper into scientific workflows with a product that feels less like a chatbot and more like a research environment.</p><p>&#8226; Claude Science brings literature analysis, code, figures, manuscripts, and compute management into one workflow for scientists. <br>&#8226; It launches in beta on macOS and Linux for Pro, Max, Team, and Enterprise users, with a strong focus on biology and biomedical research.</p><h4><a href="https://www.anthropic.com/news/claude-science-ai-workbench">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://www.polpiella.dev/cursor-xcode-27/">Using Cursor In Xcode 27</a></h3><p>Pol Piella shows that Xcode 27&#8217;s agent support is open enough to bring Cursor into the workflow, not just Apple&#8217;s built-in or officially listed assistants.</p><p>&#8226; The setup is surprisingly direct: install Cursor&#8217;s CLI, point Xcode at the agent executable, and run it with the acpargument. <br>&#8226; The bigger story is Xcode 27 itself: ACP support means custom agents can now sit inside Xcode&#8217;s intelligence flow alongside first-party options.</p><h4><a href="https://www.polpiella.dev/cursor-xcode-27/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=tNxEqyUVGck">What&#8217;s New In SwiftUI For iOS 27?</a></h3><p>Paul Hudson&#8217;s walkthrough makes it clear this is another unusually strong SwiftUI year, with improvements that range from under-the-hood compiler wins to features developers will feel immediately in app architecture and UI polish.</p><p>&#8226; The biggest changes are surprisingly quiet ones: @State is now a macro, View became a content builder, and both shifts aim to cut wasted work and reduce those infamous type-checking errors<br>&#8226; The visible additions are broad and practical &#8212; reordering outside List, swipe actions in custom layouts, prominent tabs, AsyncImage caching, crossfade navigation, smarter toolbars, and new APIs that hint at a more resizable future for iPhone apps</p><h4><a href="https://www.youtube.com/watch?v=tNxEqyUVGck">Watch here.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Books &#128218;</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8lEj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8lEj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!8lEj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!8lEj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!8lEj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8lEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png" width="1100" height="220" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:220,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190488,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/203559038?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8lEj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!8lEj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!8lEj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!8lEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855d5ea4-6658-416a-832c-81fe1caaa253_1100x220.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Mohammad Azam&#8217;s <em>SwiftData Architecture</em> is focused on the part most SwiftData content skips: how to build production apps, not toy samples.</p><p>It covers architecture, debugging, migrations, CloudKit, and performance.</p><p>Get <strong>20% off</strong> with code: <strong>THS2026</strong></p><h4><a href="https://azamsharp.school/swiftdata-architecture.html">Buy here.</a>&#128205;</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 272]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-272</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-272</guid><pubDate>Wed, 24 Jun 2026 20:16:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>This week brought two interesting pieces of news that, at first glance, seem unrelated. One is about trust and identity in the AI era. The other is about trust and community in the Swift ecosystem.</p><p>Anthropic has started <a href="https://support.claude.com/en/articles/14328960-identity-verification-on-claude">rolling out identity verification</a> for certain Claude users. Depending on the situation, users may be asked to provide a government-issued ID and a selfie through a third-party verification provider called Persona. Anthropic states that the data is used for safety, abuse prevention, and regulatory compliance, and that verification images are stored by Persona rather than directly by Anthropic. The company also says this information is not used for model training.</p><p>The timing is interesting. Over the last year we&#8217;ve seen multiple <a href="https://www.them.us/story/discord-has-stopped-using-peter-thiel-backed-software-tied-to-us-surveillance">discussions</a> around privacy, data leaks, account verification, and surveillance concerns across various platforms. As AI tools become more powerful and gain access to more capabilities, providers are naturally moving toward stronger identity controls. Whether users will accept that trade-off is another question entirely. Some developers are already looking at alternative models and providers that require fewer verification steps and collect less personal information.</p><p>On the Swift side, there was much more cheerful news. Swift Package Index is <a href="https://swiftpackageindex.com/blog/swift-package-index-joins-apple">joining Apple</a>. For years, SPI has been one of the most valuable community resources for discovering packages, evaluating maintenance quality, and helping developers make better dependency decisions. What started as a community project by Dave Verwer and Sven Schmidt has become such an important part of the ecosystem that Apple decided to bring it under its umbrella.</p><p>This is a great example of how community efforts can grow into essential infrastructure. Documentation, open-source libraries, newsletters, podcasts, and package indexes are all created by people who care enough to invest their time before anyone else sees the value. Apple recognizing that contribution is a positive signal for the entire Swift community.</p><p>As AI services move toward stricter identity checks and ecosystem platforms become more centralized, where do you draw the line between convenience and privacy? Would you consider switching to another LLM if it required fewer verification steps?</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://livsycode.com/uikit/exploring-_uiportalview-live-view-replication-without-copying-or-snapshots/">UIPortalView: From Live Mirroring to Liquid Glass-Style Effects</a></h3><p>Artem Mirzabekian uses _UIPortalView as a way to peek behind some of iOS&#8217;s most interesting visual tricks, especially where live mirroring starts to feel more like composition than ordinary view rendering.</p><p>&#8226; The article shows why portals are different from snapshots: the source stays alive, updates in real time, and can be projected into overlays, lenses, reflections, or warped slices<br>&#8226; Just as important, it keeps the line clear between research and production: _UIPortalView is a fascinating private API to study, but not something to ship in an App Store build</p><h4><a href="https://livsycode.com/uikit/exploring-_uiportalview-live-view-replication-without-copying-or-snapshots/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.avanderlee.com/concurrency/swift-6-4-whats-new-in-concurrency/">Swift 6.4: What&#8217;s New In Concurrency</a></h3><p>Antoine van der Lee&#8217;s overview is useful because it focuses on the small Swift 6.4 concurrency changes that are easy to miss, but likely to show up quickly in real code.</p><p>&#8226; The biggest additions include async defer, cancellation shields, async Result, typed throwing Task initializers, and warnings for ignored throwing tasks <br>&#8226; He also flags two changes that matter beyond pure concurrency syntax: weak let for cleaner Sendable code, and ~Sendablefor making intentionally non-sendable public types explicit</p><h4><a href="https://www.avanderlee.com/concurrency/swift-6-4-whats-new-in-concurrency/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://www.swiftdifferently.com/blog/swift/concurrency/how-actors-work">Actors In Swift: The Problem They Solve And How It Works</a></h3><p>Omar Elsayed breaks actors down from first principles, which makes this feel more like a mental model repair than just another concurrency explainer. </p><p>&#8226; It clarifies what actors actually protect, how cross-actor access works, and why await is required even for synchronous actor methods across isolation boundaries <br>&#8226; The most valuable section is reentrancy: actor calls are safe from data races, but state can still change across suspension points, and that is where the confusing bugs begin</p><h4><a href="https://www.swiftdifferently.com/blog/swift/concurrency/how-actors-work">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://www.sagarunagar.com/blog/swiftui-item-based-alert-confirmation-dialog/">SwiftUI&#8217;s New Item Based Presentations In iOS 27</a></h3><p>Sagar Unagar highlights one of those SwiftUI changes that looks small, but quietly fixes a long-standing state smell.</p><p>&#8226; Alerts and confirmation dialogs can now be driven directly from optional item state<br>&#8226; That means no extra Boolean flags, fewer impossible states, and cleaner presentation logic</p><h4><a href="https://www.sagarunagar.com/blog/swiftui-item-based-alert-confirmation-dialog/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=umq9wxmm">Updated Apple Developer Program License Agreement Now Available</a></h3><p>Apple has revised Attachment 12 of the Apple Developer Program License Agreement to spell out terms for iOS apps in Brazil.</p><p>&#8226; The update covers alternative distribution, alternative payments, out-of-app offers, and the Core Technology Commission. <br>&#8226; Developers need to sign in and accept the new terms, while translated versions will appear on the Apple Developer website within a month.</p><h4><a href="https://developer.apple.com/news/?id=umq9wxmm">Read more.</a>&#128205;</h4><h3><a href="https://developer.apple.com/news/?id=dhwadr2x">Changes To iOS In Brazil</a></h3><p>Apple is opening up iOS in Brazil under a new agreement with CADE, and the change is much bigger than a policy footnote.</p><p>&#8226; Starting with iOS 26.5, developers in Brazil can use alternative app marketplaces and external payment options for digital goods and services. <br>&#8226; Apple is pairing that with new safeguards like iOS notarization, marketplace authorization, and child-safety requirements, and developers must accept updated program terms by July 6, 2026</p><h4><a href="https://developer.apple.com/news/?id=dhwadr2x">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://antongubarenko.substack.com/p/wwdc26-swiftui-group-lab-2nd-q-and">WWDC26: SwiftUI Group Lab 2nd - Q&amp;A</a></h3><p>Article turns another dense SwiftUI lab into something you can actually come back to after WWDC.</p><p>&#8226; It covers practical SwiftUI topics like navigation, layout, geometry, identity, overlays, and UIKit interop. <br>&#8226; The big win is readability: grouped answers and time codes make the session much easier to revisit.</p><h4><a href="https://antongubarenko.substack.com/p/wwdc26-swiftui-group-lab-2nd-q-and">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://iosapptemplates.com/blog/liquid-glass-swiftui-app-template-modernization/">Liquid Glass In SwiftUI: How To Modernize An iOS App Template</a></h3><p>Beniamin Marcu frames Liquid Glass as a structural redesign problem, not a quick visual polish pass.</p><p>&#8226; Start with navigation, surfaces, and shared components before touching colors <br>&#8226; The article also pushes a careful rollout: design tokens, system components where they help, layered icons, and small reversible updates</p><h4><a href="https://iosapptemplates.com/blog/liquid-glass-swiftui-app-template-modernization/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://swiftpackageindex.com/blog/swift-package-index-joins-apple">Swift Package Index Joins Apple</a></h3><p>Ted Kremenek, Dave Verwer, and Sven A. Schmidt announce that Swift Package Index is now part of Apple, with the goal of building a more robust package registry for the Swift ecosystem.</p><p>&#8226; Swift Package Index will keep operating as it does today, with no immediate changes for package consumers or authors. <br>&#8226; Apple&#8217;s backing is meant to push things further in areas like scale, package signing, identity, and long-term ecosystem reliability.</p><h4><a href="https://swiftpackageindex.com/blog/swift-package-index-joins-apple">Read more.</a>&#128205;Level: Beginner</h4><h3><a href="https://dkvekariya.medium.com/swift-conditionals-if-switch-guard-pattern-matching-131e509d4d82">Swift Conditionals: if, switch, guard and Pattern Matching</a></h3><p>Divyesh Vekariya&#8217;s article is aimed at fundamentals, but it does a good job showing where Swift&#8217;s conditionals stop being familiar syntax and start becoming expressive language tools.</p><p>&#8226; It walks from optional binding into Swift&#8217;s much more powerful switch, including ranges, tuples, value binding, and whereclauses. <br>&#8226; The other big theme is guard: not just as syntax, but as a way to flatten functions and make preconditions obvious.</p><h4><a href="https://dkvekariya.medium.com/swift-conditionals-if-switch-guard-pattern-matching-131e509d4d82">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://www.linkedin.com/pulse/how-use-ollama-models-xcode-27-amos-gyamfi-m91nf/">How To Use Ollama Models In Xcode 27</a></h3><p>Amos Gyamfi shows how Xcode 27&#8217;s new Chat Provider path opens the door to both local and cloud-hosted Ollama models inside the coding assistant workflow.</p><p>&#8226; The setup is straightforward for local models: install Ollama, run a model, then point Xcode&#8217;s locally hosted provider<br>&#8226; The article also covers the hosted route, where Ollama Cloud models are added through Xcode&#8217;s internet-hosted provider using an API key and standard auth headers</p><h4><a href="https://www.linkedin.com/pulse/how-use-ollama-models-xcode-27-amos-gyamfi-m91nf/">Read more.</a>&#128205;Level: XXX</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=7W6R2TIoEW8">Swift Macros Demystified: Build A Freestanding Expression Macro</a></h3><p>Stewart Lynch takes one of Swift&#8217;s more intimidating features and makes it feel much more approachable by building a freestanding expression macro step by step.</p><p>&#8226; The video is focused on understanding, not just copying code<br>&#8226; It is a practical walk through of how macros expand and how to build one yourself</p><h4><a href="https://www.youtube.com/watch?v=7W6R2TIoEW8">Watch here.</a>&#128205;Level: Intermediate</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 271]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-271</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-271</guid><pubDate>Wed, 17 Jun 2026 20:01:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>WWDC is calmly leaving us with a lot of new frameworks, reviews, and guides to explore. This year, however, felt different from previous conferences. There were no traditional one-on-one Labs, but plenty of group Labs. No dedicated app consultation appointments where you could discuss your product and ask for best practices tailored to your use case. The format is evolving, just like the industry itself.</p><p>Software development has changed dramatically over the last few years. Old habits, learning plans, and even tutorials become outdated faster than ever. Even the biggest companies are adapting to new realities. And it&#8217;s not only developers who face these changes. The tools we rely on have their own growing pains.</p><p>It was hard to find a developer community this week where Fable 5&#8217;s blocking policies weren&#8217;t discussed. From memes to deep technical analyses, everyone seemed to have an opinion on who might be affected and why. Combined with stricter token limits and changing subscription models across AI platforms, it raises an interesting question: will these restrictions accelerate the adoption of local open-source models?</p><p>Models like Qwen, Gemma, and others continue to improve, offering developers more control over privacy, costs, and availability. Running AI locally still requires hardware and setup, but the trade-off may become increasingly attractive as cloud services adjust pricing and usage policies.</p><p>One thing WWDC reminded us is that adaptation is part of our profession. Frameworks change, conferences change, AI tools change, and so do our workflows. The important part is staying curious and finding the right balance between shiny new technologies and practical everyday development.</p><p>Have you already tried a local LLM, and could you imagine it becoming part of your daily toolkit?</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://www.massicotte.org/blog/wwdc26-unanswered-qa/">(Some) Unanswered Swift Group Questions</a></h3><p>Matt Massicotte picks up the Swift Group Lab questions that never made it onto the stage and gives them the kind of direct, experience-heavy answers many teams probably needed more than the live format allowed.</p><p>&#8226; Swift 6 defaults are powerful, but easy to misuse<br>&#8226; Matt&#8217;s answers are valuable because they show when defaults help and when nonisolated becomes necessary</p><h4><a href="https://www.massicotte.org/blog/wwdc26-unanswered-qa/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://antongubarenko.substack.com/p/wwdc26-swift-group-lab-q-and-a">WWDC26: Swift Group Lab &#8211; Q&amp;A</a></h3><p>Post turns a long live lab into something much easier to keep and reuse after WWDC.</p><p>&#8226; The Q&amp;A covers real Swift pain points<br>&#8226; Grouped answers and time codes make it much easier to scan</p><h4><a href="https://antongubarenko.substack.com/p/wwdc26-swift-group-lab-q-and-a">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://livsycode.com/swift/async-cleanup-in-defer-with-swift-6-4/">Async Cleanup In defer With Swift 6.4</a></h3><p>Artem Mirzabekian highlights one of those language changes that looks small on paper but removes a very real annoyance from modern async code.</p><p>&#8226; defer can now contain await in Swift 6.4<br>&#8226; That makes async cleanup much cleaner around teardown, actor calls, and resource handling</p><h4><a href="https://livsycode.com/swift/async-cleanup-in-defer-with-swift-6-4/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.wesleymatlock.com/testing-on-device-ai-swift-testing/">Testing Foundation Models: Code That Won&#8217;t Give The Same Answer Twice</a></h3><p>Wesley Matlock tackles the testing problem almost everyone runs into with on-device AI: the feature works, the code is covered, but the model itself sits outside the test strategy because its output refuses to stay still.</p><p>&#8226; The framework uses contract checks, mocks, and rubric-based evals<br>&#8226; Test shape and behavior first, then score model quality over time</p><h4><a href="https://www.wesleymatlock.com/testing-on-device-ai-swift-testing/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=dz9wvq0r">Deprecation Of The ImageCreator Class</a></h3><p>Apple is drawing a hard line around ImageCreator: the API is being discontinued and will stop working on iOS 27, iPadOS 27, macOS 27, and visionOS 27.</p><p>&#8226; Beta builds still compile, but warn in Xcode and fail in TestFlight<br>&#8226; Before release, apps need to move to Image Playground or another image service</p><h4><a href="https://developer.apple.com/news/?id=dz9wvq0r">Read more.</a>&#128205;</h4><h3><a href="https://developer.apple.com/news/?id=sus6t6ab">New Domain For Sign In With Apple And iCloud+ Hide My Email</a></h3><p>Apple is unifying relay email addresses under private.icloud.com later this summer, which means Sign in with Apple and Hide My Email will start generating new aliases on the same shared domain.</p><p>&#8226; Existing relay emails will keep working<br>&#8226; Developers should update allowlists and email validation rules for private.icloud.com</p><h4><a href="https://developer.apple.com/news/?id=sus6t6ab">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://www.sagarunagar.com/blog/swiftui-prominent-tab-is-not-a-floating-action-button/">SwiftUI&#8217;s New .prominent Tab In iOS 27 Is Not A Floating Action Button</a></h3><p>Sagar Unagar makes a sharp design point that a lot of teams will probably need to hear during the iOS 27 cycle.</p><p>&#8226; .prominent highlights a destination, not an action<br>&#8226; If it opens a flow or sheet, it probably is not the right fit</p><h4><a href="https://www.sagarunagar.com/blog/swiftui-prominent-tab-is-not-a-floating-action-button/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://nilcoalescing.com/blog/CustomScrollLayoutsWithSwipeActionsInSwiftUIOnIOS27/">Custom Scroll Layouts With Swipe Actions In SwiftUI On iOS 27</a></h3><p>Natalia Panferova highlights one of those small WWDC additions that immediately removes a long-standing SwiftUI annoyance.</p><p>&#8226; swipeActions now works beyond List, including ScrollView layouts and custom Layout types<br>&#8226; onPresentationChanged helps track which row is currently open</p><h4><a href="https://nilcoalescing.com/blog/CustomScrollLayoutsWithSwipeActionsInSwiftUIOnIOS27/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://azamsharp.com/2026/06/12/whats-new-in-swiftdata.html">What&#8217;s New In SwiftData For iOS 27</a></h3><p>Mohammad Azam roundup is a good reminder that SwiftData did not get one giant headline feature this year &#8212; it got a set of fixes that make everyday modeling and querying feel much less awkward.</p><p>&#8226; iOS 27 fills in several long-missing SwiftData gaps<br>&#8226; The update reduces enum workarounds, custom filtering, and schema friction</p><h4><a href="https://azamsharp.com/2026/06/12/whats-new-in-swiftdata.html">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://divyaravidev.substack.com/p/wwdc26-group-labs-the-real-story">WWDC26 Group Labs: The Real Story Isn&#8217;t Foundation Models. It&#8217;s Evaluation.</a></h3><p>Divya Ravi&#8217;s piece pulls one idea out of multiple WWDC26 labs and makes it feel much bigger than any single framework announcement.</p><p>&#8226; OS-bundled models make evaluation a product requirement, not a nice-to-have<br>&#8226; Apple&#8217;s labs also exposed practical limits around context windows, routing, schemas, and prompt-injection risk</p><h4><a href="https://divyaravidev.substack.com/p/wwdc26-group-labs-the-real-story">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://www.anthropic.com/news/fable-mythos-access">Statement On The US Government Directive To Suspend Access To Fable 5 And Mythos 5</a></h3><p>Anthropic says it was ordered by the US government on June 12, 2026 to suspend Fable 5 and Mythos 5 for all users, including foreign nationals inside Anthropic, while leaving other Anthropic models unaffected.</p><p>&#8226; Anthropic says the directive was based on a narrow jailbreak, not broad dangerous capability<br>&#8226; The company is complying, but warns this standard could chill frontier model releases</p><h4><a href="https://www.anthropic.com/news/fable-mythos-access">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://artemnovichkov.com/blog/using-claude-with-apple-foundation-models">Using Claude With Apple Foundation Models</a></h3><p>Artem Novichkov shows how quickly Anthropic&#8217;s package turns Claude into a drop-in remote model for Apple&#8217;s Foundation Models API, so the same LanguageModelSession, @Generable, and tool-calling patterns can work with either on-device or server-side models.</p><p>&#8226; It covers real product tradeoffs like auth, model switching, and context limits<br>&#8226; It also shows where this is heading: one API, swappable models, and richer tool use</p><h4><a href="https://artemnovichkov.com/blog/using-claude-with-apple-foundation-models">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=hqDurFnEJs8">Build a Swift Terminal Developer Toolkit with TUIkit</a></h3><p>Stewart Lynch uses Tuikit to build a real multi-panel terminal app in Swift, not just a toy demo.</p><p>&#8226; The app combines navigation, persisted state, Git status, and a release tracker inside one terminal UI<br>&#8226; It also shows the full path to something usable: third-party packages, build steps, and installing the tool so it can run anywhere</p><h4><a href="https://www.youtube.com/watch?v=hqDurFnEJs8">Watch here.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Books &#128218;</h1><h3>Packt Publishing Sale</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!32FU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!32FU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 424w, https://substackcdn.com/image/fetch/$s_!32FU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 848w, https://substackcdn.com/image/fetch/$s_!32FU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 1272w, https://substackcdn.com/image/fetch/$s_!32FU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!32FU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png" width="1456" height="291" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:291,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:509254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/201548262?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!32FU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 424w, https://substackcdn.com/image/fetch/$s_!32FU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 848w, https://substackcdn.com/image/fetch/$s_!32FU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 1272w, https://substackcdn.com/image/fetch/$s_!32FU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d7c683-ac4b-4ec7-b23c-ad5e30c0d6e8_3300x660.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Packt Publishing is running a huge sale across many of its books, including &#8220;<em>AI Driven Swift Architecture&#8221;</em> by Walid SASSI and Dave Poirier.</p><p>If modern AI development sometimes feels like sailing through unpredictable seas, this book can serve as a lighthouse. It combines practical guides with real-world examples to help you understand AI tools, improve your workflow, and build better Swift applications.</p><h4><a href="https://www.packtpub.com/en-us/product/ai-driven-swift-architecture-9781835886557">Buy here.</a>&#128205;</h4><h3><a href="https://cdn.prod.website-files.com/6889473510b50328dbb70ae6/69fe2a55b93bb0732b1fe33c_The-Founders-Playbook-05062026_v3%20(1).pdf">The Founder&#8217;s Playbook: Building An AI-Native Startup</a></h3><p>Anthropic&#8217;s playbook reframes the startup journey around what small teams can do when AI is baked into the company from day one, not bolted on later.</p><p>&#8226; It breaks the journey into Idea, MVP, Launch, and Scale<br>&#8226; The big shift is from building everything yourself to orchestrating AI-assisted work</p><h4><a href="https://cdn.prod.website-files.com/6889473510b50328dbb70ae6/69fe2a55b93bb0732b1fe33c_The-Founders-Playbook-05062026_v3%20(1).pdf">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 270]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-270</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-270</guid><pubDate>Wed, 10 Jun 2026 20:40:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>It&#8217;s easy to write a note this week because&#8230; you know why. It&#8217;s WWDC week!</p><p>Whether you&#8217;re attending in person or, like most of us, following online, this is one of the most exciting periods of the year for Apple developers. There&#8217;s also a touch of history to it. Many expect this to be Tim Cook&#8217;s last WWDC as Apple&#8217;s CEO, making the event even more memorable. Whatever the future holds, the technologies presented this week will shape our work for years to come.</p><p>To make the most of the conference, here are a few tips:</p><p>&#8226; Start with the Keynote and the Platforms State of the Union. The Keynote gives you the big picture, while the State of the Union dives into the technical details and often reveals features developers care about the most.</p><p>&#8226; Bookmark the sessions you&#8217;re most interested in and watch them at your own pace. A few years ago, Apple started releasing almost all videos on Day 1, so you no longer have to worry about booking a lab before seeing the related session.</p><p>&#8226; Don&#8217;t skip the Labs! They&#8217;re one of the best opportunities to ask Apple engineers direct questions in a more informal setting. Sometimes a five-minute conversation can save hours of debugging.</p><p>&#8226; Rewatching is absolutely encouraged. If a concept doesn&#8217;t click during the first viewing, don&#8217;t worry. WWDC content ages well, and you can always return to it weeks or even months later when you need it.</p><p>A comfortable pace is probably the best WWDC strategy. There&#8217;s no prize for watching every session in a single week, and a healthy sleep schedule will help more than another late-night video marathon.</p><p>The reward is worth it. Every year we discover new techniques and fresh approaches to code we use every day. This year is no exception. Even familiar concepts like task cancellation received thoughtful improvements, including new cleanup capabilities for concurrent tasks.</p><p>Enjoy the conference, take notes, ask questions, and remember: WWDC is not a sprint but a library you can keep returning to throughout the year.</p><p>What is the one announcement that would make your WWDC unforgettable?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L62e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L62e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 424w, https://substackcdn.com/image/fetch/$s_!L62e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 848w, https://substackcdn.com/image/fetch/$s_!L62e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 1272w, https://substackcdn.com/image/fetch/$s_!L62e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L62e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png" width="654" height="1451.5865384615386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2770,&quot;width&quot;:1248,&quot;resizeWidth&quot;:654,&quot;bytes&quot;:445647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/200576437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L62e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 424w, https://substackcdn.com/image/fetch/$s_!L62e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 848w, https://substackcdn.com/image/fetch/$s_!L62e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 1272w, https://substackcdn.com/image/fetch/$s_!L62e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0423062c-40f8-4e5f-87cd-836a4f08ce22_1248x2770.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://www.swiftjectivec.com/ios-27-notable-uikit-additions/">iOS 27: Notable UIKit Additions</a></h3><p>Jordan Morgan rounds up this year&#8217;s UIKit changes with a clear pattern: most of the work is not flashy, but aimed at adaptable navigation, scene management, and tab or sidebar behavior in a more multi-window, resizable world.</p><h4><a href="https://www.swiftjectivec.com/ios-27-notable-uikit-additions/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://swiftwithmajid.com/2026/06/08/what-is-new-in-swiftui-after-wwdc26/">What Is New In SwiftUI After WWDC26</a></h3><p>Majid Jabrayilov&#8217;s WWDC26 SwiftUI roundup feels refreshingly grounded: not a reinvention of the framework, but a steady removal of real production pain points around containers, navigation, toolbar control, and document workflows.</p><h4><a href="https://swiftwithmajid.com/2026/06/08/what-is-new-in-swiftui-after-wwdc26/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://livsycode.com/swiftui/swiftuis-state-is-now-a-macro/">SwiftUI&#8217;s State Is Now A Macro</a></h3><p>Artem Mirzabekian explains that Apple has changed <code>@State</code> under the hood from a property-wrapper presentation to a macro-based one, without changing the way SwiftUI code is written day to day.</p><h4><a href="https://livsycode.com/swiftui/swiftuis-state-is-now-a-macro/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://www.swift.org/blog/whats-new-in-swift-may-2026/">What&#8217;s New In Swift: May 2026 Edition</a></h3><p>Dave Lester&#8217;s monthly Swift digest works best as a quick radar sweep rather than one big headline, pulling together meetup talks, WebAssembly progress, mentorship news, notable package releases, and a few Swift Evolution updates worth tracking.</p><h4><a href="https://www.swift.org/blog/whats-new-in-swift-may-2026/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.swift.org/blog/announcing-networking-workgroup/">Announcing The Networking Workgroup</a></h3><p>Swift&#8217;s Ecosystem Steering Group has created a new Networking workgroup to push the platform toward a more unified and interoperable networking stack, from low-level I/O and shared protocol implementations up to modern client and server APIs.</p><h4><a href="https://www.swift.org/blog/announcing-networking-workgroup/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://www.nsvasilev.com/posts/swiftui-observable-macro/">SwiftUI: Observable Macro Under The Hood</a></h3><p>Nikita Vasilev unpacks <code>@Observable</code> by showing that it is not just nicer syntax, but a compile-time transformation that rewrites stored properties, injects an <code>ObservationRegistrar</code>, and tracks reads and writes at the key-path level.</p><h4><a href="https://www.nsvasilev.com/posts/swiftui-observable-macro/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=0d2gpmml">Introducing Time Allowances</a></h3><p>Apple is adding <strong>Time Allowances</strong> in iOS 27, iPadOS 27, and macOS 27 so parents can manage kids&#8217; app time more flexibly across categories like Entertainment, Games, and Social Media. For developers, the part to watch is classification: social features will soon need to be declared in the age rating questionnaire, can trigger a <strong>13+ minimum age rating</strong>, and become a required disclosure for new submissions and updates starting in <strong>September 2026</strong>.</p><h4><a href="https://developer.apple.com/news/?id=0d2gpmml">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://developer.apple.com/news/?id=a233fmpw">Updated Apple Developer Program License Agreement And App Review Guidelines Now Available</a></h3><p>Apple has revised both the Apple Developer Program License Agreement and the App Review Guidelines to cover new frameworks, updated AI terms, kid and teen safety guidance, and a handful of policy clarifications across areas like Live Activities, accessibility-related content changes, and developer identity requirements. This one is worth skimming even if you usually ignore agreement updates, because the changes touch practical areas such as Foundation Models, Trust Insights, Suggested Actions, Customer Engagement APIs, App Store Connect disclosures for minors, and stricter wording around spam or phishing through Live Activities</p><h4><a href="https://developer.apple.com/news/?id=a233fmpw">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://developer.apple.com/news/?id=sg176nne">Update For Apps Distributed In Texas</a></h3><p>Apple says new Apple Accounts in Texas will start falling under SB 2420 on <strong>June 4, 2026</strong>, which means age assurance, parent or guardian consent for minors under 18, and support for consent revocation now matter for downloads, in-app purchases, and significant app changes. For developers, this is less a policy footnote than an integration checklist: review the Declared Age Range API, PermissionKit&#8217;s Significant Change API, the new StoreKit age rating property, and the related App Store server notification flow.</p><h4><a href="https://developer.apple.com/news/?id=sg176nne">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://developer.apple.com/news/?id=f0jfy9py">Apple Developer Centers Are Expanding To Berlin</a></h3><p>Apple is opening its fifth Developer Center in Berlin later in 2026, giving developers across Europe closer access to in-person sessions, workshops, labs, and one-on-one appointments with Apple experts. The post reads less like a product announcement and more like an ecosystem investment, especially with multilingual support and hands-on consultation spaces built into the new center.</p><h4><a href="https://developer.apple.com/news/?id=f0jfy9py">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://nilcoalescing.com/blog/AnimationTimingInSwiftUI/">SwiftUI Animation Timing</a></h3><p>Natalia Panferova breaks SwiftUI animation timing into three layers &#8212; easing curves, spring animations, and fully custom timing &#8212; and explains them in a way that makes the presets feel much less like magic.</p><h4><a href="https://nilcoalescing.com/blog/AnimationTimingInSwiftUI/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-25">What We Learned Hitting #1 on Product Hunt</a></h3><p>Philip S&#248;rensen, Co-founder &amp; CEO of Brew, shares how they hit #1 on Product Hunt and what lessons they picked up along the way. Also what surprised him and the one thing he wishes someone had told him before launching.</p><h4><a href="https://indieappdevs.substack.com/p/indie-app-devs-25">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://nilcoalescing.com/blog/StylingMeasurementUnitFontsInSwiftUI/">Styling Measurement Unit Fonts In SwiftUI</a></h3><p>Natalia Panferova shows a neat way to style the value and unit of a formatted <code>Measurement</code> differently in SwiftUI by using <code>AttributedString</code> instead of treating the whole output as one uniform <code>Text</code>.</p><h4><a href="https://nilcoalescing.com/blog/StylingMeasurementUnitFontsInSwiftUI/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://www.anthropic.com/news/claude-fable-5-mythos-5">Claude Fable 5 and Claude Mythos 5</a></h3><p>Anthropic is drawing a sharper line between broad access and frontier capability here, releasing Claude Fable 5 for general use while keeping the less-restricted Mythos 5 behind trusted-access programs for cyberdefense and life sciences.</p><h4><a href="https://www.anthropic.com/news/claude-fable-5-mythos-5">Read more.</a>&#128205;Level: Beginner</h4><h3><a href="https://medium.com/@wesleymatlock/master-of-puppets-foundation-models-tool-calling-in-swift-cc626b2c1a87">Master Of Puppets: Foundation Models Tool Calling In Swift</a></h3><p>Wesley Matlock shows how Apple&#8217;s on-device model can stop guessing and start asking your app for facts mid-generation by calling Swift tools inside a single <code>respond</code> flow. The article becomes much more than a framework tour once it reaches the real constraints: SwiftData isolation, <code>Sendable</code> boundaries, actor-owned stores, and the surprisingly important detail that tool results should come back as readable ground truth, not just raw structured blobs.</p><h4><a href="https://medium.com/@wesleymatlock/master-of-puppets-foundation-models-tool-calling-in-swift-cc626b2c1a87">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://www.sagarunagar.com/blog/swiftui-app-language-switching-without-restart/">SwiftUI Localization Guide &#8212; Change Language Without Restarting The App</a></h3><p>Sagar Unagar shows how to make in-app language switching feel truly native in SwiftUI, with instant updates, persisted selection, and proper RTL support instead of sending users to Settings and forcing a relaunch.</p><h4><a href="https://www.sagarunagar.com/blog/swiftui-app-language-switching-without-restart/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://developer.apple.com/videos/play/wwdc2026/101">WWDC26: Keynote</a></h3><p>Apple&#8217;s WWDC26 keynote is the broadest possible reset, with the official chapter list pointing to four big beats: platform improvements, trust and safety, Apple Intelligence and Siri, and the usual sweep across the latest software releases. It is less of a deep technical session than a map of the year ahead, so its real value is in showing where Apple wants developer attention to go before the detailed platform talks begin.</p><h4><a href="https://developer.apple.com/videos/play/wwdc2026/101">Watch here.</a>&#128205;</h4><h3><a href="https://developer.apple.com/videos/play/wwdc2026/102">WWDC26: Platforms State Of The Union</a></h3><p>Apple&#8217;s companion session to the keynote is the developer-facing version of the week, framed around &#8220;the newest advancements on Apple platforms&#8221; rather than big public-facing announcements. In practice, this is usually the talk that matters more once the keynote ends, because it points developers toward the APIs, platform changes, and technical direction that will shape the rest of WWDC26.</p><h4><a href="https://developer.apple.com/videos/play/wwdc2026/102">Watch here.</a>&#128205;</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 269]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-269</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-269</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 03 Jun 2026 20:25:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>Anthropic has confidentially <a href="https://www.wsj.com/tech/anthropic-ipo-paperwork-9a48c35e?st=ZPuSPC&amp;reflink=desktopwebshare_permalink&amp;mod=tldr&amp;utm_source=tldrnewsletter">filed for an IPO</a> that could bring the company to the public market as early as this fall. OpenAI is reportedly moving in the same direction. Looks like this year will become one of the biggest for AI-related IPOs and investments. The race is no longer just about models and benchmarks. It&#8217;s about infrastructure, profitability, market positioning, and who will shape the next generation of tools developers use daily.</p><p>And meanwhile, we are preparing for WWDC.</p><p>Apple has already released its <a href="https://developer.apple.com/videos/play/wwdc2026/394">intro video</a>, mentioning Labs, popular sessions, and even music. Yes, WWDC has its own official <a href="https://music.apple.com/ru/playlist/wwdc26-hello/pl.c2b332d45b194756aeb66a44329a2a08?l=en-GB">Apple Music playlist</a>, and surprisingly BTS made it there too. The conference keeps evolving from a purely technical event into a full ecosystem experience around development and creativity.</p><p>Last week&#8217;s poll showed fairly predictable but very realistic expectations from developers: a more stable Xcode with fewer crashes, smarter predictions that actually work as intended, and deeper UIKit adaptation of controls and features for SwiftUI. Many developers still feel that SwiftUI lacks parity in important areas, especially for complex production apps.</p><p>Hopefully next week will show whether these expectations are finally met.</p><p>And to demonstrate how inspiring WWDC can be, in collaboration with TheSwiftVlad we&#8217;re sharing a beautiful SF Symbols animation. Because honestly, wouldn&#8217;t it be great to see this level of polish and creativity presented directly during the conference itself?</p><p>What is the one WWDC announcement that would instantly make your daily development workflow better?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yxni!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yxni!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 424w, https://substackcdn.com/image/fetch/$s_!yxni!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 848w, https://substackcdn.com/image/fetch/$s_!yxni!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 1272w, https://substackcdn.com/image/fetch/$s_!yxni!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yxni!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif" width="800" height="997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:997,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:449436,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/199800389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yxni!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 424w, https://substackcdn.com/image/fetch/$s_!yxni!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 848w, https://substackcdn.com/image/fetch/$s_!yxni!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 1272w, https://substackcdn.com/image/fetch/$s_!yxni!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02446b7e-b572-4eda-bd87-904fd858a5b9_800x997.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xz1U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xz1U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xz1U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><a href="https://www.revenuecat.com/release/meet-rico-your-embedded-app-growth-advisor-2026-05-05/?utm_medium=sponsored&amp;utm_source=iOSDevTools&amp;utm_campaign=newsletter&amp;utm_content=rico">The AI Agent for Your RevenueCat Data</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e6Jg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e6Jg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 424w, https://substackcdn.com/image/fetch/$s_!e6Jg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 848w, https://substackcdn.com/image/fetch/$s_!e6Jg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 1272w, https://substackcdn.com/image/fetch/$s_!e6Jg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e6Jg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png" width="1425" height="651" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:651,&quot;width&quot;:1425,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279702,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/199800389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e6Jg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 424w, https://substackcdn.com/image/fetch/$s_!e6Jg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 848w, https://substackcdn.com/image/fetch/$s_!e6Jg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 1272w, https://substackcdn.com/image/fetch/$s_!e6Jg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267a311c-d2b9-4e2b-bf10-9049ced9e612_1425x651.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Meet Rico! &#128075;</p><p>RevenueCat's embedded AI app growth advisor for subscription apps. Ask questions about churn, trials, pricing, paywalls, or retention and get answers using your app's real subscription data directly inside RevenueCat and Slack.</p><p>Built to help iOS developers make smarter monetization decisions faster.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.revenuecat.com/release/meet-rico-your-embedded-app-growth-advisor-2026-05-05/?utm_medium=sponsored&amp;utm_source=iOSDevTools&amp;utm_campaign=newsletter&amp;utm_content=rico&quot;,&quot;text&quot;:&quot;Try Rico today!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.revenuecat.com/release/meet-rico-your-embedded-app-growth-advisor-2026-05-05/?utm_medium=sponsored&amp;utm_source=iOSDevTools&amp;utm_campaign=newsletter&amp;utm_content=rico"><span>Try Rico today!</span></a></p><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://www.massicotte.org/stateless-actors/">Stateless Actors</a></h3><p>Matt Massicotte explores a deceptively simple question: if actors exist to protect mutable state, does an actor with no state make any sense at all? His answer is more nuanced than a yes or no, showing that stateless actors can still be useful for off-main execution, custom executors, or protecting external state like the file system &#8212; but only when the trade-offs are clearly understood.</p><h4><a href="https://www.massicotte.org/stateless-actors/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://artemnovichkov.com/blog/task-names-in-swift-concurrency">Task Names In Swift Concurrency</a></h3><p>Artem Novichkov walks through Swift&#8217;s new task naming support and shows why it matters once concurrent work gets large enough to debug, profile, or inspect in Instruments. A nice detail in the article is that names are meant for diagnostics, not app logic, with clear examples across <code>Task</code>, detached tasks, task groups, SwiftUI&#8217;s <code>.task</code>, and the current limitation that <code>async let</code> children still cannot be named.</p><h4><a href="https://artemnovichkov.com/blog/task-names-in-swift-concurrency">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://www.swiftdifferently.com/blog/swift/concurrency/how-do-you-build-a-mutex-that-works-with-async-await">How Do You Build A Mutex That Works With Async/Await?</a></h3><p>Omar Elsayed explores a subtle concurrency problem: actors do not guarantee mutual exclusion across suspension points, and Swift&#8217;s native <code>Mutex</code> cannot safely span <code>await</code>. The article gets especially interesting when it breaks down Matt Massicotte&#8217;s TaskGate approach, using continuations and a small internal lock to hand ownership from one waiting task to the next without blocking cooperative threads.</p><h4><a href="https://www.swiftdifferently.com/blog/swift/concurrency/how-do-you-build-a-mutex-that-works-with-async-await">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://tanaschita.com/ios-notifications-registering-in-swiftui/">Registering For Push Notifications In SwiftUI</a></h3><p>Natascha Fadeeva walks through the full push registration flow in SwiftUI, from requesting permission and checking the current authorization state to registering with APNs and handling the returned device token. A useful reminder here is that SwiftUI still relies on an app delegate for the APNs callbacks, so <code>UIApplicationDelegateAdaptor</code> remains part of the picture even in a modern app.</p><h4><a href="https://tanaschita.com/ios-notifications-registering-in-swiftui/">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=q7tgn1rr">All Systems Glow</a></h3><p>Apple is using this short post as another WWDC26 countdown marker, with the conference now just one week away and the full event staying online and free. This is more of a mood-setting signal than a product update, but it does mark the final stretch before the June 8, 2026 kickoff.</p><h4><a href="https://developer.apple.com/news/?id=q7tgn1rr">Read more.</a>&#128205;</h4><h3><a href="https://developer.apple.com/news/?id=tu7pk9oy">Get Ready With The Latest Beta Releases</a></h3><p>Apple has released new beta builds for iOS 26.6, iPadOS 26.6, macOS 26.6, tvOS 26.6, visionOS 26.6, and watchOS 26.6, alongside the recommendation to build and test with Xcode 26.5. It is the usual signal to start validation early, especially if your app depends on newer SDK behavior or platform-specific edge cases.</p><h4><a href="https://developer.apple.com/news/?id=tu7pk9oy">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://allenpike.com/2026/voice-in-visuals-out/">Building For Voice In, Visuals Out</a></h3><p>Allen Pike argues that AI is moving toward a more natural interaction pattern where people speak and computers respond with interfaces, visuals, and structured output instead of long spoken replies. What makes the piece stand out is its focus on latency: voice feels magical only when it is fast enough to avoid awkward turn-taking, which is why voice-in and visuals-out may be the most practical near-term direction for real products.</p><h4><a href="https://allenpike.com/2026/voice-in-visuals-out/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h2><a href="https://indieappdevs.substack.com/p/indie-app-devs-24">Marketing Apps as a Developer</a></h2><p>Oleh Stasula, the founder of WinWinKit and Usage is coming back for the part 2. In the part 1 he shared a few personal <strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-22">tips on how he designs apps users love</a></strong>.</p><p>This is part 2 - about what to do once you&#8217;ve shipped, because shipping without marketing will keep your product invisible.</p><h4><a href="https://indieappdevs.substack.com/p/indie-app-devs-24">Read more.</a>&#128205;Level: Beginner</h4><h3><a href="https://livsycode.com/best-practices/reactive-is-no-longer-the-default-in-swift/">Reactive Frameworks Vs Async/Await Vs AsyncAlgorithms</a></h3><p>Artem Mirzabekian looks at the shift in Swift&#8217;s center of gravity: reactive frameworks once gave iOS developers one clean model for asynchronous code, but async/await, actors, Observation, AsyncSequence, and AsyncAlgorithms now cover most of that ground with less conceptual weight.</p><h4><a href="https://livsycode.com/best-practices/reactive-is-no-longer-the-default-in-swift/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://deliveryhero.jobs/blog/scaling-ios-application-development-with-tuist/">Scaling iOS Application Development With Tuist</a></h3><p>Michael Gerasymenko and Ashutosh Dubey show how Delivery Hero used Tuist to keep Xcode and Swift Package Manager in place while making a fast-growing modular codebase much easier to scale. The numbers make the story land: local clean builds dropped from 2.5 minutes to 0.5 minutes, incremental builds roughly halved, and CI build plus unit-test time improved by 2.5x &#8212; with the trade-off being migration effort, caching-related debugging limits, and the discipline needed to maintain project structure as code.</p><h4><a href="https://deliveryhero.jobs/blog/scaling-ios-application-development-with-tuist/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://medium.com/@wesleymatlock/enter-sandman-mode-three-months-inside-xcode-26-3s-agentic-coding-cbe67ce46df9">Enter Sandman Mode: Three Months Inside Xcode 26.3&#8217;s Agentic Coding</a></h3><p>Wesley Matlock treats Xcode 26.3&#8217;s agentic coding less like magic and more like a sharp new tool: excellent at grounded multi-file refactors, compiler-driven fix loops, and SwiftUI preview iteration, but still prone to losing the thread or inventing neat-looking abstractions that do not belong.</p><h4><a href="https://medium.com/@wesleymatlock/enter-sandman-mode-three-months-inside-xcode-26-3s-agentic-coding-cbe67ce46df9">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://serialcoder.dev/text-tutorials/swiftui/enabling-haptic-feedback-with-sensoryfeedback-in-swiftui/">Enabling Haptic Feedback With </a><code>sensoryFeedback</code><a href="https://serialcoder.dev/text-tutorials/swiftui/enabling-haptic-feedback-with-sensoryfeedback-in-swiftui/"> In SwiftUI</a></h3><p>Gabriel Theodoropoulos shows how SwiftUI&#8217;s <code>sensoryFeedback</code> modifier makes haptics feel like a natural part of view code, with semantic styles like <code>selection</code>, <code>success</code>, <code>error</code>, <code>start</code>, and <code>stop</code>, plus custom <code>impact</code> variations when more control is needed. The article is especially helpful in the way it explains the trigger model: feedback is tied to changes in an <code>Equatable</code> value, not to the button tap itself, which is an easy detail to miss at first.</p><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/enabling-haptic-feedback-with-sensoryfeedback-in-swiftui/">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=KlCqHP32c8M">Apple&#8217;s Hidden AI: Unlock Foundation Models on Your Mac with Apfel</a></h3><p>Stewart Lynch turns Apple&#8217;s on-device models into something much more tangible by using Appfel from Terminal instead of starting with a full Xcode project. The video gets even more practical in the second half, where he installs it with Homebrew, tries prompt, chat, and server modes, then uses agentic coding to reshape an existing Appfel-based Mac utility into something that better fits his workflow.</p><h4><a href="https://www.youtube.com/watch?v=KlCqHP32c8M">Watch here.</a>&#128205;Level: Advanced</h4><h3><a href="https://www.youtube.com/watch?v=Jtk4O1rDKTI">Modern iOS Security: Attacks, Defenses &amp; AI</a></h3><p>This Swift Academy episode turns iOS security into a very current discussion, mixing real production failures with a broader look at how AI is changing both attack speed and defense workflows. Conversation with Dave Poirier and Deya Elkhawaldeh is especially valuable because it stays practical: weak storage, unsafe assumptions about &#8220;secure by default&#8221; platforms, and shallow threat modeling are still common, while AI is rapidly lowering the barrier for reverse engineering and automated security review.</p><h4><a href="https://www.youtube.com/watch?v=Jtk4O1rDKTI">Watch here.</a>&#128205;Level: Advanced</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 268]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-268</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-268</guid><pubDate>Wed, 27 May 2026 20:55:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>WWDC is getting closer and closer, and this time it feels less like gentle notification sounds and more like a huge bell ringing about upcoming changes. AI Agent videos are already appearing outside the usual WWDC flow, leadership changes are making headlines, and many are even speculating that this could be one of the last conferences where Tim Cook still takes such a central role on stage.</p><p>Of course, Apple is presenting technologies that have been in development for years, not just between conference cycles. Whatever we see this June will continue shaping the ecosystem for many years ahead. That&#8217;s why this period always becomes the season of wishlists. Developers start sharing hopes for iOS, visionOS, tvOS, Swift, Xcode, and everything around them. Better multitasking, smarter Siri, more open frameworks, improved AI integrations, fewer restrictions, and more stability.</p><p>One topic that keeps surfacing again and again is SwiftUI. Despite all the progress, many developers still struggle with hidden behaviors, unpredictable rendering, navigation edge cases, and debugging complexity. Discussions around &#8220;SwiftUI should become open source&#8221; appear more frequently every year. Not because developers dislike the framework, but because they want to understand it better, contribute fixes faster, and build more predictable architectures on top of it. Swift itself became stronger after opening up to the community, and many wonder whether SwiftUI could benefit from the same path.</p><p>But expectations are tricky things. The lower they are, the easier it is to be surprised in a good way.</p><p>So instead of asking about cold expectations, let&#8217;s ask something different: what change would genuinely make your everyday development experience better?</p><div class="poll-embed" data-attrs="{&quot;id&quot;:517860}" data-component-name="PollToDOM"></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Justas here&#8230; &#128587;&#8205;&#9794;&#65039;</h1><p>I would like to share something you might find valuable.</p><p>My friend Simonas and I launched a <strong>100% FREE</strong> invoicing tool called - <strong><a href="https://invcly.com">Invcly</a></strong></p><p>Nothing super fancy, just a simple invoicing tool that allows you to send and track invoices. The main reason we built it is because I was tired of paying $20 a month for invoicing software, paying extra for features, for more saved clients, and other upsells. Companies always find ways to charge you more.</p><p>With Invcly, you can:</p><p>&#128204; Create and track invoices.<br>&#128204; Save clients.<br>&#128204; Create and save templates.<br>&#128204; Send recurring invoices (still in beta).<br>&#128204; Create different products.</p><p>And most importantly, it&#8217;s <strong>always FREE</strong>. No hidden fees or hard paywalls (you know what I&#8217;m talking about).</p><p>Feel free to use it, share it with friends, and most importantly, send me an email with any bugs or features you would like to see.</p><p>Enjoy, and let&#8217;s make invoicing simple and free! &#129534;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://invcly.com&quot;,&quot;text&quot;:&quot;Try Invcly!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://invcly.com"><span>Try Invcly!</span></a></p><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://www.sagarunagar.com/blog/swift-task-lifecycle-management/">Swift Task Lifecycle Management - Structured vs Unstructured Concurrency</a></h3><p>Sagar Unagar shows why concurrency structure in Swift is not just a style choice, but something that directly affects task lifetime, cancellation, error propagation, and UI consistency. His guidance is refreshingly clear: start with structured tools like <code>async let</code>, <code>TaskGroup</code>, and SwiftUI&#8217;s <code>.task</code>, and only move to unstructured <code>Task</code> or <code>Task.detached</code> when the work is genuinely independent.</p><h4><a href="https://www.sagarunagar.com/blog/swift-task-lifecycle-management/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://livsycode.com/swift/uniquebox-ref-and-mutableref-in-swift-6-4/">UniqueBox, Ref, And MutableRef In Swift 6.4</a></h3><p>Artem Mirzabekian explores how Swift 6.4 expands the language&#8217;s ownership vocabulary with <code>UniqueBox</code>, <code>Ref</code>, and <code>MutableRef</code>, giving developers more precise tools than class boxes or unsafe pointers for expressing heap ownership and scoped access. A useful way to read this addition is as a split between storage and access, which makes these types especially relevant for lower-level libraries, custom storage, interop layers, and performance-sensitive code.</p><h4><a href="https://livsycode.com/swift/uniquebox-ref-and-mutableref-in-swift-6-4/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://danielsaidi.com/blog/2026/05/22/making-a-swiftui-sheet-automatically-size-to-fit-its-content">Making A SwiftUI Sheet Automatically Size To Fit Its Content</a></h3><p>Daniel Saidi shows a neat workaround for one of SwiftUI&#8217;s missing sheet features: sizing a sheet to its actual content instead of forcing it into <code>.medium</code>, <code>.large</code>, or a guessed fixed height.</p><h4><a href="https://danielsaidi.com/blog/2026/05/22/making-a-swiftui-sheet-automatically-size-to-fit-its-content">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://tanaschita.com/ios-keychain-secure-data-storage/">Working With The Keychain In iOS</a></h3><p>Natascha Fadeeva explains the Keychain through its core query model, showing how the same dictionary-based structure powers save, read, update, and delete operations for sensitive data like passwords and tokens.</p><h4><a href="https://tanaschita.com/ios-keychain-secure-data-storage/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://nilcoalescing.com/blog/TimelineViewInSwiftUI/">Refreshing And Animating Views Using TimelineView In SwiftUI</a></h3><p>Natalia Panferova shows how <code>TimelineView</code> gives SwiftUI a clean way to reevaluate views on a schedule, which makes it especially useful for clocks, timed refreshes, and visuals that need to stay in sync with time. A helpful distinction in her article is that <code>TimelineView</code> belongs to the UI layer, while <code>Timer</code> is still the better fit for background work, data refreshes, or logic that should live outside the view.</p><h4><a href="https://nilcoalescing.com/blog/TimelineViewInSwiftUI/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=yrrb45pw">Upcoming Changes To Age Ratings In Australia And Vietnam</a></h3><p>Apple is updating App Store age ratings in Australia and Vietnam on June 18, 2026, with Australia dropping the 15+ category and Vietnam introducing local age ratings aligned with national law. The key thing for developers is to revisit the App Store Connect age rating questionnaire now, since existing ratings may be recalculated automatically from the answers already on file.</p><h4><a href="https://developer.apple.com/news/?id=yrrb45pw">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://www.basbroek.nl/making-accessibility-acceessible">Making Accessibility Accessible</a></h3><p>Bas Broek lowers the barrier to accessibility work by focusing on practical tools like Voice Control labels, Hover Text, and the VoiceOver caption panel instead of starting with deep theory. The most useful takeaway is that accessibility becomes easier to improve when teams can quickly see what assistive technologies expose and spot where labels, traits, or element exposure break down.</p><h4><a href="https://www.basbroek.nl/making-accessibility-acceessible">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://www.swiftdifferently.com/blog/system-desgin/modern-isnot-a-value-fit-Is">Modern Isn&#8217;t A Value. Fit Is.</a></h3><p>Omar Elsayed argues that &#8220;modern&#8221; APIs like <code>async/await</code>, actors, or new architectures are not automatically better when they make the surrounding codebase harder to read and integrate with. The most useful takeaway is the boundary rule: modernize internals when it helps, but keep external APIs aligned with the system your team already speaks.</p><h4><a href="https://www.swiftdifferently.com/blog/system-desgin/modern-isnot-a-value-fit-Is">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://troz.net/post/2026/swiftui_praise/">In Praise Of SwiftUI</a></h3><p>SwiftUI&#8217;s biggest win may not be &#8220;UI in Swift&#8221; at all, but the reactive data flow that keeps complex interfaces in sync without so much manual plumbing. Sarah Reichelt makes a grounded case for treating it as the default choice for speed and maintainability, then reaching for AppKit or UIKit only when a real gap, bug, or performance limit shows up.</p><h4><a href="https://troz.net/post/2026/swiftui_praise/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://macguru.dev/swiftui-should-become-open-source/">SwiftUI Should Become Open-Source</a></h3><p>Max Seelemann argues that SwiftUI still struggles with core platform behaviors like keyboard focus timing and macOS drag and drop, which makes Apple&#8217;s &#8220;best way to build an app&#8221; promise harder to defend. His bigger point is that open-sourcing SwiftUI could speed up fixes, reduce its dependence on OS release cycles, and give developers a way to help move the framework forward where Apple has been too slow.</p><h4><a href="https://macguru.dev/swiftui-should-become-open-source/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://www.anthropic.com/news/chris-olah-pope-leo-encyclical">Anthropic Co-Founder Chris Olah&#8217;s Remarks On Pope Leo XIV&#8217;s Encyclical &#8220;Magnifica Humanitas&#8221;</a></h3><p>Chris Olah argues that AI should be examined not only by the labs building it, but also by outside critics willing to question its broader social and moral impact. He centers that case on three concerns in particular: global inequality, human flourishing, and how little we still understand about advanced models, while candidly noting that commercial and geopolitical pressure can push frontier labs away from acting responsibly.</p><h4><a href="https://www.anthropic.com/news/chris-olah-pope-leo-encyclical">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://shankarmadeshvaran.medium.com/create-and-style-app-shortcuts-in-ios-using-appshortcutsprovider-4d903f302899">Create And Style App Shortcuts In iOS Using AppShortcutsProvider</a></h3><p>Shankar Madeshvaran walks through the full App Shortcuts flow, from <code>AppIntent</code> and <code>AppShortcutsProvider</code> setup to branded tiles with custom tint, solid backgrounds, gradients, and Light/Dark variants. Shortcut styling lives in <code>Info.plist</code> and asset catalogs, not Swift code, and the same branded look also carries into Spotlight results.</p><h4><a href="https://shankarmadeshvaran.medium.com/create-and-style-app-shortcuts-in-ios-using-appshortcutsprovider-4d903f302899">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=2so9ifq5hYY">Decoupling SwiftData in SwiftUI: Is It Worth It?</a></h3><p>Mohammad Azam uses a practical SwiftData and SQLite example to show how a protocol-based DataAccess layer can decouple persistence from SwiftUI views, while also exposing the real cost of that abstraction. This pattern gives flexibility and cleaner boundaries, but you lose SwiftData conveniences like automatic UI updates and can end up with more architectural weight than the app really needs.</p><h4><a href="https://www.youtube.com/watch?v=2so9ifq5hYY">Watch here.</a>&#128205;Level: XXX</h4><div><hr></div><h1 style="text-align: center;">One more Thing &#127918;</h1><h3><a href="https://www.swiftjectivec.com/wwdc-2026-the-pregame-quiz/">W.W.D.C. 2026: The Pregame Quiz</a></h3><p>Jordan Morgan turns pre-WWDC nerves into a smart trivia round built from the year&#8217;s Apple news, App Store policy updates, hardware launches, and community lore. It works as more than a quiz, really &#8212; a fun way to refresh the details developers are most likely to want in their heads before the keynote.</p><h4><a href="https://www.swiftjectivec.com/wwdc-2026-the-pregame-quiz/">Play here.</a>&#128205;</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 267]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-267</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-267</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 20 May 2026 20:01:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>Hello! &#128075;</p><p>This week I partnered with <strong><a href="https://www.linkedin.com/in/shannon-kelly-ash/">Shannon Ash</a></strong>. She&#8217;s been writing CVs since COVID-19 hit, helping people position themselves better and land new jobs.</p><p>Six years later, her work is still producing real results.</p><p><strong>Some results:</strong></p><ul><li><p>87% of her clients landed interviews within 2 weeks of applying.</p></li><li><p>70% reported a salary increase, up to 35%, while securing their new role.</p></li><li><p>Some went from months, up to 4 months, of silence to multiple offers at once.</p></li></ul><p><strong>Here are few testimonials:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uN-5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uN-5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uN-5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uN-5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uN-5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uN-5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:433405,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/197634535?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uN-5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uN-5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uN-5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uN-5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e8a3a0-d59c-4308-b4dd-3c2b902b8c2e_1800x1200.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The clients she mainly works with are usually dealing with one of these problems:</p><ul><li><p><strong>Ghosted</strong> - they&#8217;ve been applying for 2+ months with zero replies and no interviews.</p></li><li><p><strong>Pivoting their career</strong> - they&#8217;re in their late 30s or 40s with a decade of expertise, but don&#8217;t know how to translate their wins or skills into a new industry or niche.</p></li><li><p><strong>Aspiring to be a leader</strong> - they&#8217;re aiming for the C-Suite or a Senior Lead role, but their current CV still looks like a list of tasks, not a record of impact. The CV changes with seniority.</p></li><li><p><strong>Procrastinating daily</strong> - they&#8217;re unhappy where they are, but the mental weight of updating their CV is a lot. They keep putting it off and don&#8217;t have the time to even start.</p></li></ul><p><strong>Offer:</strong></p><ul><li><p>Cover Letter and CV: a positioning statement letter, which is Shannon&#8217;s spin on a cover letter, plus a CV.</p></li><li><p>Fully optimized LinkedIn profile to match the new narrative.</p></li></ul><p><strong>Price: 450&#8364; &#128204;</strong></p><p><strong>Important - this offer has limited spots:</strong></p><ul><li><p>June only 5 spots available.</p></li><li><p>July only 5 spots available.</p></li><li><p>August only 10 spots available.</p></li></ul><p><strong>Interested?</strong> - Just reply to this email or contact me at - <strong>thisweekinswift@gmail.com</strong></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://swiftwithmajid.com/2026/05/19/deprecating-your-own-convenience-api/">Deprecating Your Own Convenience API</a></h3><p>Majid Jabrayilov shows a neat way to stop compatibility helpers from becoming permanent dead code using Swift availability annotations. The key idea: deprecate wrappers when the new minimum OS makes them unnecessary, then obsolete them later so the compiler forces cleanup.</p><h4><a href="https://swiftwithmajid.com/2026/05/19/deprecating-your-own-convenience-api/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://livsycode.com/best-practices/a-feature-flags-system-in-swift/">A Feature Flags System In Swift</a></h3><p>Artem Mirzabekian shows how feature flags can grow from simple booleans into real app infrastructure while staying type-safe, thread-safe, and predictable. The most useful part is the full architecture: typed features, priority-based resolution, local overrides, SwiftUI environment injection, and a built-in toggle screen for QA and testing.</p><h4><a href="https://livsycode.com/best-practices/a-feature-flags-system-in-swift/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://azamsharp.com/2026/05/16/storekit2-app-store-server-notifications.html">Tracking App Store Purchases With Server Notifications</a></h3><p>Mohammad Azam shows how App Store Server Notifications complete the StoreKit 2 story by letting your backend react to renewals, refunds, billing issues, expirations, and purchases outside the app. The most useful part is the payload breakdown: Apple sends nested signed JWTs, so the key is decoding <code>signedPayload</code>, then <code>signedTransactionInfo</code> and <code>signedRenewalInfo</code>, to extract transaction and renewal state cleanly.</p><h4><a href="https://azamsharp.com/2026/05/16/storekit2-app-store-server-notifications.html">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.sagarunagar.com/blog/contentunavailableview-swiftui/">ContentUnavailableView In SwiftUI - Complete Guide With Examples</a></h3><p>Sagar Unagar shows why <code>ContentUnavailableView</code> is more than a simple empty-state helper: it gives SwiftUI apps a consistent, accessible way to handle no-content, failed-load, and no-results screens without rebuilding the same UI each time. The most useful part is the practical range, from the built-in <code>.search</code> variant to custom actions and recovery flows, while keeping empty states restrained and platform-native.</p><h4><a href="https://www.sagarunagar.com/blog/contentunavailableview-swiftui/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=7lcnqgxp">Coming Bright Up - WWDC26</a></h3><p>Apple is teasing WWDC26 with a short preview, calling it a week of technology, creativity, and community that will be online and free. It is more of a save-the-date than a technical update, but confirms Apple is starting the WWDC ramp-up.</p><h4><a href="https://developer.apple.com/news/?id=7lcnqgxp">Read more.</a>&#128205;</h4><h3><a href="https://developer.apple.com/news/?id=8t3j66i7">Introducing The 2026 Apple Design Award Finalists</a></h3><p>Apple has announced the 2026 Apple Design Award finalists, highlighting 36 apps and games for innovation, ingenuity, and technical achievement. It is a good shortlist to browse before WWDC, especially for a quick look at the product quality and design direction Apple is celebrating this year.</p><h4><a href="https://developer.apple.com/news/?id=8t3j66i7">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://danielsaidi.com/blog/2026/04/30/using-xcode-mcp-with-claude-code">Using Xcode MCP With Claude Code</a></h3><p>Daniel Saidi shows how Xcode 26.3&#8217;s built-in MCP server gives Claude Code direct awareness of project structure, schemes, builds, and tests instead of treating Swift files as isolated text.</p><h4><a href="https://danielsaidi.com/blog/2026/04/30/using-xcode-mcp-with-claude-code">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://tanaschita.com/swiftui-basic-animations/">Understanding Basic Animations In SwiftUI</a></h3><p>Natascha Fadeeva explains the two core SwiftUI animation paths: <code>animation(_:value:)</code> for view-driven implicit animation and <code>withAnimation</code> for explicit state-driven changes. The most useful part is the decision guide, including when to use each approach and the iOS 17+ completion handler for follow-up work after an animation finishes.</p><h4><a href="https://tanaschita.com/swiftui-basic-animations/">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start">How Claude Code Works In Large Codebases: Best Practices And Where To Start</a></h3><p>Anthropic says Claude Code works best in large codebases when teams invest in the harness around the model, especially <code>CLAUDE.md</code> files, hooks, skills, plugins, LSP integrations, MCP servers, and subagents. The most useful takeaway is practical: live agentic search avoids stale indexes, but results improve when the codebase gives Claude clear local context and path-specific expertise.</p><h4><a href="https://claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://onmyway133.com/posts/how-to-recognize-text-in-images-with-vision-in-swift/">How To Recognize Text In Images With Vision In Swift</a></h3><p>Khoa Pham shows how Apple&#8217;s newer Vision API makes text recognition cleaner by replacing callback-heavy <code>VNRecognizeTextRequest</code> flows with the async <code>RecognizeTextRequest</code> introduced in iOS 18 and macOS 15. The key takeaway: avoid fragile continuation wrappers around the older synchronous API, and use the new async request model when your deployment target allows it.</p><h4><a href="https://onmyway133.com/posts/how-to-recognize-text-in-images-with-vision-in-swift/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.basbroek.nl/optimizing-assistive-technology">Optimizing For VoiceOver And Voice Control</a></h3><p>Bas Broek shows how an accessibility change that feels cleaner for VoiceOver can make Voice Control noticeably worse, especially when combined elements turn separate buttons into hidden actions. The key takeaway: improving one assistive technology can hurt another, so the better solution is sometimes the more balanced one, not the most &#8220;optimized&#8221; version.</p><h4><a href="https://www.basbroek.nl/optimizing-assistive-technology">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=dW6KeYCqCFc">Understanding Swift Result Builders-The Power Behind ViewBuilder</a></h3><p>Stewart Lynch starts with <code>ViewBuilder</code> in familiar SwiftUI containers, then builds custom result builders from scratch to show how declarative syntax works under the hood. The most useful part is the hands-on progression from simple string builders to conditional checklist generation with <code>buildExpression</code>, <code>buildOptional</code>, and <code>buildEither</code>.</p><h4><a href="https://www.youtube.com/watch?v=dW6KeYCqCFc">Watch here.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.youtube.com/watch?v=aMfig5cKOtY">Claude Code Just Dropped /Goal (Master It In 8 Minutes)</a></h3><p>This walkthrough explains <code>/goal</code> as a hands-off Claude Code workflow, where one model does the work and a second agent checks whether the finish line has been met. The key takeaway: goal conditions should be specific and verifiable, with turn or time limits to avoid wasted tokens.</p><h4><a href="https://www.youtube.com/watch?v=aMfig5cKOtY">Watch here.</a>&#128205;Level: Beginner</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 266]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-266</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-266</guid><pubDate>Wed, 13 May 2026 20:01:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><p>Apple recently <a href="https://developer.apple.com/community/recognition/">shared a list of authors and content creators</a> who are shaping and supporting the iOS community. &#128079;</p><p>From meetup organizers to developers publishing valuable tutorials, tips, and deep dives, this recognition highlights something important.</p><p>First, it shows that platform owners fully understand one thing: the ecosystem cannot exist without the people actually building apps and sharing knowledge outside official events like WWDC or Meet with Apple sessions. Learning never stops at documentation. Development moves too fast for that. New frameworks, APIs, architectural patterns, and tools appear constantly, and staying up to date means following many different voices and perspectives. In a way, Apple has created its own watchlist of creators worth paying attention to.</p><p>Second, this kind of recognition is genuinely inspiring for authors themselves. More visibility means more readers, more feedback, and more motivation to continue. Consistently creating educational content is a skill polished over years. It takes time, energy, research, editing, and persistence. And knowing that your article, video, or podcast helped someone solve a problem or understand a difficult concept is often what keeps creators going.</p><p>Because even the most experienced developers can still pause at subtle details, especially in areas like testing architecture or dependency isolation. That&#8217;s why this week we&#8217;re sharing a note about Stubs and Mocks.</p><p>What learning resource or creator has influenced your development journey the most?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pknb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pknb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 424w, https://substackcdn.com/image/fetch/$s_!pknb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 848w, https://substackcdn.com/image/fetch/$s_!pknb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 1272w, https://substackcdn.com/image/fetch/$s_!pknb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pknb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png" width="594" height="1412.7696" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2973,&quot;width&quot;:1250,&quot;resizeWidth&quot;:594,&quot;bytes&quot;:511669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/197107274?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pknb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 424w, https://substackcdn.com/image/fetch/$s_!pknb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 848w, https://substackcdn.com/image/fetch/$s_!pknb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 1272w, https://substackcdn.com/image/fetch/$s_!pknb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1937c090-f980-43a1-809b-df6a79ec439d_1250x2973.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xz1U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xz1U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xz1U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><a href="https://watch.getcontrast.io/register/bitrise-how-to-speed-up-ios-builds-with-xcode-26-compilation-caching?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_webinar_xcode-26-caching_all_2025-09-21&amp;utm_content=newsletter-sponsorship">Cut Your Swift Compile Times with Xcode 26</a></h3><p>Xcode 26's compilation cache reuses outputs like object files and module artifacts when inputs don't change.</p><p>Bitrise was first to support it and saw 19-55% faster builds in testing. The Bitrise team walks through setup and what to expect as it matures.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.getcontrast.io/register/bitrise-how-to-speed-up-ios-builds-with-xcode-26-compilation-caching?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_webinar_xcode-26-caching_all_2025-09-21&amp;utm_content=newsletter-sponsorship&quot;,&quot;text&quot;:&quot;Check out the webinar&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.getcontrast.io/register/bitrise-how-to-speed-up-ios-builds-with-xcode-26-compilation-caching?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_webinar_xcode-26-caching_all_2025-09-21&amp;utm_content=newsletter-sponsorship"><span>Check out the webinar</span></a></p><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://www.sagarunagar.com/blog/accelerate-framework-swift-guide/">Accelerate Framework In Swift - Complete Guide To High-Performance Computing</a></h3><p>Sagar Unagar shows why Accelerate is still one of Apple&#8217;s most underused frameworks, especially when naive loops start hurting apps that process signals, images, matrices, or large numeric datasets. The most useful part is the practical breakdown of <code>vDSP</code>, <code>vForce</code>, and BLAS, showing how vectorized system routines can replace manual iteration with code that is both clearer and dramatically faster.</p><h4><a href="https://www.sagarunagar.com/blog/accelerate-framework-swift-guide/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://livsycode.com/best-practices/how-to-think-about-performance-in-ios/">How To Think About Performance In iOS</a></h3><p>Artem Mirzabekian frames performance as a layered system, where perception, metrics, architecture, UI updates, networking, caching, scheduling, memory, and hardware all shape whether an app feels fast. The most useful takeaway is his order of attack: start with user-visible pain and measurement, then cut unnecessary work before reaching for low-level optimizations.</p><h4><a href="https://livsycode.com/best-practices/how-to-think-about-performance-in-ios/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://serialcoder.dev/text-tutorials/swiftui/formatting-values-in-swiftui-text-and-textfield/">Formatting Values In SwiftUI Text And TextField</a></h3><p>Gabriel Theodoropoulos shows how SwiftUI&#8217;s format styles make <code>Text</code> and <code>TextField</code> much more powerful for numbers, percentages, currencies, and dates without manual string conversion. The most useful part is the input side: formatted <code>TextField</code> initializers can enforce valid numeric values automatically, while the stored type still controls how strict the field behaves.</p><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/formatting-values-in-swiftui-text-and-textfield/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.nsvasilev.com/posts/swiftui-state/">SwiftUI: @State Under The Hood</a></h3><p>Nikita Vasilev explains why <code>@State</code> survives view redraws even though SwiftUI views are value types: the real data lives outside the struct in SwiftUI&#8217;s long-lived Attribute Graph. The most useful part is the mental model shift, because it clarifies why <code>@State</code> should stay private, why init-based seeding often fails after first render, and how dependency tracking drives precise invalidation.</p><h4><a href="https://www.nsvasilev.com/posts/swiftui-state/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Apple &#127823;</h1><h3><a href="https://developer.apple.com/news/?id=x4eyetnp">Brazilian Betting License Requirement For App Store Availability</a></h3><p>Apple says fixed-odds betting apps can now be distributed on the App Store in Brazil, but only with a valid fixed-odds betting license from Brazil&#8217;s Secretariat of Prizes and Bets. The key practical detail is that developers must submit a new app version to start license verification, and answering &#8220;Yes&#8221; to the gambling question in App Store Connect sets the Brazil age rating to A18.</p><h4><a href="https://developer.apple.com/news/?id=x4eyetnp">Read more.</a>&#128205;</h4><h3><a href="https://www.apple.com/newsroom/2026/05/end-to-end-encrypted-rcs-messaging-begins-rolling-out-today-in-beta/">End-To-End Encrypted RCS Messaging Begins Rolling Out In Beta</a></h3><p>Apple says end-to-end encrypted RCS is starting to roll out in beta for iPhone users on iOS 26.5 with supported carriers and Android users on the latest Google Messages. The most important user-facing detail is the new lock icon in RCS chats, with encryption enabled by default and expanding automatically to both new and existing conversations.</p><h4><a href="https://www.apple.com/newsroom/2026/05/end-to-end-encrypted-rcs-messaging-begins-rolling-out-today-in-beta/">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://ctosub.com/p/the-ctos-incoming-storms">The CTO&#8217;s Incoming Storms</a></h3><p>Etienne de Bruin maps six pressure points landing on CTOs right now, from AI-driven headcount cuts to board-level demands for an &#8220;AI strategy,&#8221; and argues that facts alone are no longer enough. The sharpest takeaway is to show up with a position built around trade-offs and business language, not a defensive technical rebuttal.</p><h4><a href="https://ctosub.com/p/the-ctos-incoming-storms">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.swiftdifferently.com/blog/swiftui/fixedsize-usecase">Finally Found A Use Case For .fixedSize</a></h3><p>Omar Elsayed shows a neat SwiftUI layout trick where <code>.fixedSize</code> keeps an <code>HStack</code> inside a horizontal <code>ScrollView </code>only as tall as its tallest card, instead of expanding to the full screen.</p><h4><a href="https://www.swiftdifferently.com/blog/swiftui/fixedsize-usecase">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://www.linkedin.com/pulse/ai-when-more-rigorous-process-shipped-lower-quality-code-dave-poirier-2meme">AI: When The More Rigorous Process Shipped The Lower-Quality Code</a></h3><p>Dave Poirier compares two AI-assisted implementations of the same iOS telemetry feature and finds that the messier human-in-the-loop branch beat the stricter PRD-plus-TDD branch on testing depth, observability, and threading correctness. The sharpest takeaway is that spec-first AI workflows can stay too trapped inside their own frame, so production work still needs a separate pass for scope, integration edges, and operational gaps.</p><h4><a href="https://www.linkedin.com/pulse/ai-when-more-rigorous-process-shipped-lower-quality-code-dave-poirier-2meme">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://claude.com/blog/agent-view-in-claude-code">Agent View In Claude Code</a></h3><p>Anthropic introduces agent view as a single place to manage multiple Claude Code sessions, with a list that shows which agents are waiting, still running, or finished. The most useful part is the workflow gain: you can background sessions, peek at the latest turn, reply inline, and jump between concurrent agents without juggling terminal tabs.</p><h4><a href="https://claude.com/blog/agent-view-in-claude-code">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://www.youtube.com/watch?v=mgUYC6TWbSM">SwiftData for Beginners</a></h3><p>You will learn SwiftData through a small real app, starting from model design, source control, and local storage before moving into posts, images, navigation, and modern iOS 26 patterns. The most useful part is the beginner-friendly progression, where concepts like <code>@Model</code>, classes vs structs, optionals, and test data are introduced in the context of shipping an actual app.</p><h4><a href="https://www.youtube.com/watch?v=mgUYC6TWbSM">Watch here.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=M5ZUGBeugP4">Production SwiftUI: Scalable Networking Architecture With Async/Await And Generics</a></h3><p>Karin Prater builds a reusable SwiftUI networking stack around services, endpoints, dependency injection, and concurrency-aware separation between UI state and background work. The most useful part is the architectural framing: keep observables focused on main-actor UI state, move fetch logic into sendable services, and use protocols plus mocks to make previews and scaling much easier.</p><h4><a href="https://www.youtube.com/watch?v=M5ZUGBeugP4">Watch here.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Friends &#129309;</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EUGa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EUGa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!EUGa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!EUGa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!EUGa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EUGa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png" width="1100" height="220" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:220,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48958,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/197107274?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EUGa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!EUGa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!EUGa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!EUGa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d40fff-791d-4db7-9033-af94684b44c8_1100x220.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Get <em><strong>20%</strong></em> off Natalia Panferova&#8217;s &#8220;The SwiftUI Way&#8220; book. Avoid SwiftUI anti-patterns that hurt stability and performance, while learning the recommended patterns and real-world trade-offs needed to scale production apps.</p><p>Discount code: <strong>ThoseWhoSwift</strong></p><p><strong><a href="https://buy.stripe.com/dRmfZheqlcuuc1rdgB3sI0d">Download it HERE.</a>&#128205;</strong></p><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 265]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-265</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-265</guid><pubDate>Wed, 06 May 2026 20:32:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 style="text-align: center;">Weekly note &#9999;&#65039;</h2><div class="pullquote"><p><strong>AI is not only changing how we write software, but also how we get hired!</strong></p></div><p>We all know about ATS systems scanning r&#233;sum&#233;s and filtering candidates before a human even sees the application. But hiring automation is going much further now.</p><p>For years, some companies used prerecorded interview questions where candidates recorded answers by pressing a button. Later came the &#8220;<em>tell us about yourself</em>&#8221; intro videos to evaluate communication skills and readiness for remote work.</p><p>Now some AI-first companies are fully automating the interview process itself.</p><p>Imagine an AI interviewer. Let&#8217;s call her Clara. She starts politely with an ice-breaker like &#8220;How&#8217;s your day going?&#8221; and then moves into structured sections: Swift, APIs, Xcode, architecture. Sounds futuristic until the details appear. Clara asks candidates to leave a two-second pause after each answer so the system can detect when speech ends. Think too long, pause dramatically, or hesitate naturally, and your answer might simply get cut off.</p><p>Have a noisy environment? Better warn the birds outside, the construction workers nearby, or anyone making unexpected sounds. The system may interpret any loud noise as the end of your response. And Clara will not repeat questions, no matter how many times you ask.</p><p>Then comes the final stage: screen sharing and a coding challenge, often with strict instructions not to use AI tools. Which sounds ironic considering the company itself is using AI to evaluate and filter candidates from the very beginning.</p><p>Maybe that&#8217;s the strangest part of all. The process is optimized for efficiency, but in doing so it often removes the human side entirely. Instead of building interest in the company, it can have the opposite effect. Less time invested in candidates, more restrictions, more automation.</p><p>At this point, the real question almost sounds inevitable: will AI soon be interviewing AI?</p><p><strong>Have you had any similar experience lately, where you were interviewed by AI? &#129302;</strong></p><p><strong>Share it in the comments. We would love to discuss! &#128172;</strong></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5m0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5m0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5m0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91d9e39d-ece5-44f0-84cf-bd02f9bf2ccd_1584x396.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xz1U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xz1U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/196037159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xz1U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!xz1U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d1dbea-0d04-4866-9f30-19f7174c00f4_1200x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Forget about Ruby and Fastlane installation issues!</h3><p>Discover <a href="https://github.com/codemagic-ci-cd/cli-tools">Codemagic CLI tools</a> &#8212; the free, open-source Fastlane alternative for automating iOS builds, code signing and publishing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/codemagic-ci-cd/cli-tools&quot;,&quot;text&quot;:&quot;open GitHub&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/codemagic-ci-cd/cli-tools"><span>open GitHub</span></a></p><div><hr></div><h1 style="text-align: center;">Swift Around the Web &#127760;</h1><h3><a href="https://livsycode.com/best-practices/actors-vs-queues-vs-locks-in-swift/">Actors Vs Queues Vs Locks In Swift</a></h3><p>Artem Mirzabekian compares three synchronization tools through the same lens: actors give the safest model for shared mutable state, queues fit older GCD-style coordination, and locks still matter when you need the lowest overhead. The most useful part is the tradeoff framing, because the right choice depends less on style and more on isolation needs, legacy code, and performance pressure.</p><h4><a href="https://livsycode.com/best-practices/actors-vs-queues-vs-locks-in-swift/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://adjoe.io/company/engineer-blog/swift-concurrency-await-runtime-trace-executor-hops/">Swift Concurrency: One await, Two Actors: A Runtime Trace</a></h3><p>Nikita Galaganov explains what actually happens at runtime when Swift crosses an <code>await</code>, focusing on executor identity, suspension, continuation state, and executor hops between actors. The most useful part is the performance angle: the article shows that <code>await</code> is not just syntax sugar, and that understanding hop decisions matters when concurrency code runs at SDK scale across millions of devices.</p><h4><a href="https://adjoe.io/company/engineer-blog/swift-concurrency-await-runtime-trace-executor-hops/">Read more.</a>&#128205;Level: Advanced</h4><div><hr></div><h1 style="text-align: center;">Coding &#128104;&#8205;&#128187;</h1><h3><a href="https://matteomanferdini.com/swiftui-reusable-views/">3 Key Strategies To Make SwiftUI Views More Reusable</a></h3><p>Matteo Manferdini argues that most SwiftUI reuse problems start with monolithic views, then breaks the fix into three layers: extract small subviews, move shared styling into <code>ViewModifier</code>, and use generic container views when structure stays the same but content changes. The sharpest takeaway is his warning against computed properties as fake reuse, because they hide complexity inside the parent instead of creating truly testable, previewable, standalone components.</p><h4><a href="https://matteomanferdini.com/swiftui-reusable-views/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://nilcoalescing.com/blog/SchedulingAndHandlingBackgroundAppRefreshInSwiftUI/">Scheduling And Handling Background App Refresh In SwiftUI</a></h3><p>Natalia Panferova shows how to wire background refresh into a SwiftUI app with <code>BGAppRefreshTaskRequest</code> and the <code>backgroundTask(_:action:)</code> modifier, including the required capability and setup. The most useful reminder is that background refresh is opportunistic, not guaranteed, and should stay short-lived, with longer work pushed to other background APIs.</p><h4><a href="https://nilcoalescing.com/blog/SchedulingAndHandlingBackgroundAppRefreshInSwiftUI/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">Design &#127912;</h1><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-22">Designing Beautiful Apps as a Developer - Part 1</a></h3><p>Oleh Stasula is the founder of WinWinKit and Usage is haring a few personal tips on how he designs apps users love.</p><p>This is part 1. Part 2 will be live in a couple of weeks.</p><p><em><strong>Subscribe to Indie App Devs!</strong></em></p><h4><a href="https://indieappdevs.substack.com/p/indie-app-devs-22">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h1 style="text-align: center;">Other cool stuff &#129520;</h1><h3><a href="https://krausefx.com/blog/managing-personal-projects-with-agents">Managing Personal Projects With Agents</a></h3><p>Felix Krause shows how personal AI agents can turn scattered project inputs from email, chat, and files into a cleaner system built around structured notes, linked source documents, and controlled automation. The most useful idea is the safety-conscious workflow: only manually approved inputs get processed, while the agent updates notes, organizes Google Drive files, and surfaces the latest version fast when you actually need it.</p><h4><a href="https://krausefx.com/blog/managing-personal-projects-with-agents">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h1 style="text-align: center;">AI &#129302;</h1><h3><a href="https://alejandromp.com/development/blog/ai-doesn-t-remember-your-project-markdown-does/">AI Doesn&#8217;t Remember Your Project, Markdown Does</a></h3><p>Alejandro makes a practical case for writing project context down in Markdown instead of expecting each new AI chat to rediscover architecture, constraints, and decisions from scratch. I could only verify the title and article snippet, so this summary is based on those visible details rather than the full post text.</p><h4><a href="https://alejandromp.com/development/blog/ai-doesn-t-remember-your-project-markdown-does/">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Tutorials &#128210;</h1><h3><a href="https://idiotswithios.com/ios-privacy-manifest-required-reasons-apis-compliance-checklist/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ios-privacy-manifest-required-reasons-apis-compliance-checklist">iOS Privacy Manifest &amp; Required Reasons APIs: A Compliance Checklist</a></h3><p>Mrugesh Tank turns Apple&#8217;s privacy manifest rules into a practical checklist, with the clearest value coming from the five required-reason API categories that catch many teams by surprise, especially <code>UserDefaults</code> and system boot time calls. The most useful part is the concrete mapping from API category to allowed reason codes, plus a starter <code>PrivacyInfo.xcprivacy</code>example you can adapt before App Store submission.</p><h4><a href="https://idiotswithios.com/ios-privacy-manifest-required-reasons-apis-compliance-checklist/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ios-privacy-manifest-required-reasons-apis-compliance-checklist">Read more.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Video &#127909;</h1><h3><a href="https://www.youtube.com/watch?v=i9TvUGeTltE">My Take On The New Apple</a></h3><p>Marques Brownlee sees Apple&#8217;s leadership change as more than a CEO swap, arguing that John Ternus could push the company back toward more ambitious, product-driven hardware decisions. The sharpest takeaway is the contrast: Apple may be ready to take bigger swings on devices again, but its software side still has a lot of ground to recover.</p><h4><a href="https://www.youtube.com/watch?v=i9TvUGeTltE">Watch here.</a>&#128205;</h4><h3><a href="https://www.youtube.com/watch?v=UeZfiKBHUCs&amp;list=PL2iZPZus2bhSl3CDE_vs2851UMgix285u">Apple Foundation Models With Mohammad Azam</a></h3><p>This Swift Academy episode looks at Apple&#8217;s AI direction as an architectural shift, where models become native app capabilities instead of remote chat services. The most useful part is the framing around tools, structured generation, and adapter-based evolution, which makes Foundation Models feel more like controllable system components than generic AI features.</p><h4><a href="https://www.youtube.com/watch?v=UeZfiKBHUCs&amp;list=PL2iZPZus2bhSl3CDE_vs2851UMgix285u">Watch here.</a>&#128205;</h4><div><hr></div><h1 style="text-align: center;">Books &#128218;</h1><h3><a href="https://jeffe.cs.illinois.edu/teaching/algorithms/">Algorithms</a></h3><p>Jeff Erickson offers a <em><strong>free</strong></em> electronic version of his self-published algorithms textbook, plus a large set of lecture notes that go beyond the core material into topics like FFTs, linear programming, randomized algorithms, and models of computation. The most useful detail is the scope: this is not a beginner-first data structures book, but a deep reference for readers who already know the basics and want a more theory-heavy path.</p><h4><a href="https://jeffe.cs.illinois.edu/teaching/algorithms/book/!!-frontmatter.pdf">Download for FREE.</a>&#128205;</h4><div><hr></div><p style="text-align: center;">Thanks for reading Those Who Swift!</p><p style="text-align: center;">Subscribe for free to receive new posts. &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 264]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-264</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-264</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 29 Apr 2026 20:26:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>Keeping a balance between resources, budget, and development output is crucial for teams of any size. The principle stays the same whether you are a solo developer or part of a large organization.</p><p>A recent example is Anthropic&#8217;s decision to make Opus 4.7 the default model for Claude Code starting April 30. Some organizations have already received emails notifying them about this change. The model promises better performance on complex tasks, but it also comes at a higher cost. While the company states that the tokenizer is more efficient and overall token usage should remain stable, real-world testing shows that limits can be <a href="https://www.reddit.com/r/claude/comments/1soumaq/opus_47_30_in_just_5_minutes/">reached quickly</a>. At that point, you either slow down and continue manually or pay for additional tokens.</p><p>At the same time, social platforms are full of teams openly sharing monthly AI expenses in the range of thousands of dollars. That raises a practical question: at what point does it become more reasonable to invest in people instead of scaling token usage? Some experts already suggest that the so-called AI bubble may begin to stabilize later this year. Initial adoption has happened, workflows are established, and habits are formed. The next step is monetization, which often means higher prices and fewer ways to opt out of AI-driven tools.</p><p>For smaller companies, this becomes a real challenge. Being selective with tools, setting clear usage boundaries, and keeping part of the workflow independent from AI can help control costs and reduce risk.</p><div><hr></div><p>And one more important thing worth mentioning: the <strong><a href="https://developer.apple.com/app-store/small-business-program/">App Store Small Business Program</a></strong>. It offers a reduced 15% commission on paid apps and in-app purchases.</p><p>Even years after its introduction, many developers are still unaware of it. If you qualify, it&#8217;s definitely something to look into.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rw1y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rw1y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 424w, https://substackcdn.com/image/fetch/$s_!Rw1y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 848w, https://substackcdn.com/image/fetch/$s_!Rw1y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 1272w, https://substackcdn.com/image/fetch/$s_!Rw1y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rw1y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png" width="548" height="733.0048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1672,&quot;width&quot;:1250,&quot;resizeWidth&quot;:548,&quot;bytes&quot;:288292,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/195218768?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rw1y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 424w, https://substackcdn.com/image/fetch/$s_!Rw1y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 848w, https://substackcdn.com/image/fetch/$s_!Rw1y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 1272w, https://substackcdn.com/image/fetch/$s_!Rw1y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d94c84f-6e92-4732-9ef0-0391fd809f0a_1250x1672.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Connect with the "<em><strong>Those Who Swift</strong></em>" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://livsycode.com/swiftui/when-swiftui-modifiers-hold-onto-memory-longer-than-expected/">When SwiftUI Modifiers Hold Onto Memory Longer Than Expected</a></h3><p>Artem Mirzabekian points out that SwiftUI modifiers can keep reference-type dependencies alive longer than many developers expect, even after the view that used them seems gone. The useful takeaway is architectural: treat modifier-captured objects carefully, especially services or managers, because SwiftUI lifetime and storage behavior may not match the mental model of simple view recreation.</p><h4><a href="https://livsycode.com/swiftui/when-swiftui-modifiers-hold-onto-memory-longer-than-expected/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.avanderlee.com/concurrency/immediate-tasks-in-swift-concurrency-explained/">Immediate Tasks In Swift Concurrency Explained</a></h3><p>Antoine van der Lee explains that <code>Task.immediate</code> starts running synchronously on the current executor until the first real suspension, which makes it useful for preserving ordering from synchronous actor-isolated code. The most useful warning is the tradeoff: if the first chunk of work is not tiny, immediate tasks can block the caller and even make task-group work accidentally serial.</p><h4><a href="https://www.avanderlee.com/concurrency/immediate-tasks-in-swift-concurrency-explained/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://antongubarenko.substack.com/p/q-and-a-swift-concurrency-formatted">Q&amp;A: Swift Concurrency - Formatted</a></h3><p>Post turns Apple&#8217;s live Swift Concurrency session into a cleaner, searchable transcript with timestamps, covering practical questions around <code>MainActor</code>, <code>nonisolated</code>, <code>@concurrent</code>, task cancellation, and actor usage. The most useful part is that it keeps the answers direct and grounded in real migration pain points, especially for teams moving toward newer Swift concurrency defaults.</p><h4><a href="https://antongubarenko.substack.com/p/q-and-a-swift-concurrency-formatted">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://lumley.io/blogs/swift-enums/">Enums. Swift&#8217;s Secret Superpower.</a></h3><p>Will Lumley makes the case that Swift enums are far more than named constants, especially once you start using associated values, exhaustive switching, raw values, and enum-driven state. The most useful takeaway is architectural: enums can often replace class hierarchies, boolean-heavy view state, and weakly typed error handling with one safer, compiler-checked model.</p><h4><a href="https://lumley.io/blogs/swift-enums/">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.sagarunagar.com/blog/swift-inout-parameters/">Understanding Inout Parameters In Swift - How They Work And When To Use Them</a></h3><p>Sagar Unagar reframes <code>inout</code> as an API design tool, not a performance trick, and shows why its real value is making mutation explicit and intentional. The most useful takeaway is the rule of thumb: prefer return values for pure transformations, and use <code>inout</code> only when in-place mutation is the whole point.</p><h4><a href="https://www.sagarunagar.com/blog/swift-inout-parameters/">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=agq42lxe">Monthly Subscriptions With A 12-Month Commitment</a></h3><p>Apple is introducing a new App Store subscription option that lets customers pay monthly while committing to a full 12-month term, with payment progress visible in their Apple Account and reminders sent before renewals. The useful part for developers is that this can now be configured in App Store Connect and tested in Xcode, with broad rollout planned alongside the May releases of iOS 26.5 and related platforms.</p><h4><a href="https://developer.apple.com/news/?id=agq42lxe">Read more.</a>&#128205;</h4><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.createchsol.com/blog/2026-04-28-appearance-mode-changer.html">Appearance Mode Changer</a></h3><p>Stewart Lynch shows a clean SwiftUI pattern for adding System, Light, and Dark mode selection with a small enum, <code>@AppStorage</code>, and <code>preferredColorScheme</code> applied at the app root. The most useful reminder is architectural: keep appearance as an app-level setting so navigation and sheets inherit it automatically without extra view-level logic.</p><h4><a href="https://www.createchsol.com/blog/2026-04-28-appearance-mode-changer.html">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-21">Paywall Design Tips That Boost App Sales - Part 2</a></h3><p>Daniils, the founder of <a href="https://www.applayouts.com/">AppLayouts</a>, an extensive SwiftUI components library designed to help you build a perfect user interface for your iOS and macOS app in no time, is back with part two. He is sharing tips on broader topics related to paywalls and app monetization in general, based on what he has learned while testing different solutions in his own apps.</p><h4><a href="https://indieappdevs.substack.com/p/indie-app-devs-21">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://www.swiftdifferently.com/blog/career-advice/how-I-built-full-browser-in-two-weeks">I Couldn&#8217;t Find The Perfect Browser, So I Built One With AI In Two Weeks</a></h3><p>Omar Elsayed shares a very hands-on story of building a native WebKit browser with AI, while staying clear that AI worked best as a strong starting point, not as a replacement for product taste or engineering judgment. The most useful part is the prompt and architecture breakdown, showing how detailed guidance, clear constraints, and human refinement turned a rough idea into a real macOS app.</p><h4><a href="https://www.swiftdifferently.com/blog/career-advice/how-I-built-full-browser-in-two-weeks">Read more.</a>&#128205;Level: Intermediate</h4><h3><a href="https://tanaschita.com/swiftui-list-pagination/">How To Implement Pagination With SwiftUI&#8217;s List View</a></h3><p>Natascha Fadeeva shows a simple infinite scrolling pattern for <code>List</code>: add a loading row at the bottom and trigger the next page when that row appears. The most useful detail is the guardrail in <code>loadMoreItems()</code>, since repeated <code>onAppear</code> calls must not start overlapping pagination requests.</p><h4><a href="https://tanaschita.com/swiftui-list-pagination/">Read more.</a>&#128205;Level: Beginner</h4><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://openai.com/index/introducing-gpt-5-5/">Introducing GPT-5.5</a></h3><p>OpenAI says GPT-5.5 is its strongest model yet for real work, with gains in agentic coding, computer use, knowledge work, and early scientific research while matching GPT-5.4 latency and using fewer tokens on some tasks. The most useful practical detail is availability: it started rolling out in ChatGPT and Codex on April 23, 2026, and OpenAI updated the post on April 24 to say GPT-5.5 and GPT-5.5 Pro are now available in the API too.</p><h4><a href="https://openai.com/index/introducing-gpt-5-5/">Read more.</a>&#128205;</h4><h3><a href="https://samwize.com/2026/04/23/customizing-claude-code-memory/">Customizing Claude Code Memory</a></h3><p>Samwize explains where Claude Code stores auto memory, how it is scoped per repo or folder, and which settings can safely override the default location. The most useful tip is that related repos can share memory by pointing <code>.claude/settings.local.json</code> to the same directory, while project-level settings intentionally block redirection for safety.</p><h4><a href="https://samwize.com/2026/04/23/customizing-claude-code-memory/">Read more.</a>&#128205;</h4><h3><a href="https://www.anthropic.com/news/claude-for-creative-work">Claude For Creative Work</a></h3><p>Anthropic is positioning Claude as a creative workflow tool, adding connectors for Blender, Autodesk Fusion, Adobe, Ableton, SketchUp, Splice, and other apps creative teams already use. The most interesting part is the workflow angle: Claude can now help across ideation, scripting, asset pipelines, and repetitive production work instead of staying limited to chat.</p><h4><a href="https://www.anthropic.com/news/claude-for-creative-work">Read more.</a>&#128205;</h4><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.massicotte.org/step-by-step-designing-protocols/">Concurrency Step-By-Step: Designing Protocols</a></h3><p>Matt Massicotte shows how protocol design gets much trickier once Swift 6 isolation rules, <code>@MainActor</code> defaults, and conformance mismatches enter the picture. The most useful takeaway is that synchronous requirements are rigid, while async requirements, <code>nonisolated</code>, and carefully chosen protocol constraints can make conforming types much easier to design.</p><h4><a href="https://www.massicotte.org/step-by-step-designing-protocols/">Read more.</a>&#128205;Level: Advanced</h4><h3><a href="https://idiotswithios.com/ios-26-sdk-migration-guide-what-every-app-needs-to-update">iOS 26 SDK Migration Guide: What Every App Needs To Update</a></h3><p>Mrugesh Tank walks through the practical migration path for apps targeting the iOS 26 SDK, from Xcode 26 and deprecated APIs to Privacy Manifests, Liquid Glass, and regression testing. The most useful part is the checklist mindset: treat build warnings as migration tasks, then test UI, networking, and permission flows early before the App Store deadline hits.</p><h4><a href="https://idiotswithios.com/ios-26-sdk-migration-guide-what-every-app-needs-to-update">Read more.</a>&#128205;Level: Intermediate</h4><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=4CIlTOnc6I8">Microsoft Accidentally Told The Truth About AI</a></h3><p>Video argues that recent AI product changes are exposing the real economics behind these tools, especially around cost, value, and the gap between hype and sustainable use. Were are we probably heading and by what cost.</p><h4><a href="https://www.youtube.com/watch?v=4CIlTOnc6I8">Watch here.</a>&#128205;</h4><div><hr></div><h2>And one more thing&#8230; &#128071;</h2><h3><a href="https://vibeui.online/">VibeUI: 92 Free UI Prompts For Vibe Coders</a></h3><p>VibeUI is a curated prompt library with 92 UI prompts across 15 categories, covering things like auth, pricing, hero sections, dashboards, onboarding, and more. The most useful part is the structure-first approach: you can pick a layout pattern, copy the prompt, and use it in tools like Claude, GPT-5, or Gemini to generate cleaner UI variants faster.</p><h4><a href="https://vibeui.online/">Read more.</a></h4><h3><a href="https://youmind.com/gpt-image-2-prompts">GPT Image 2 Prompts</a></h3><p>YouMind has built a large prompt library for GPT Image 2, with more than 2,700 free image and video prompts across categories like infographics, app design, social posts, thumbnails, and posters. The most useful part is the structure: many prompts are written as reusable templates with arguments, which makes them easier to adapt for repeated creative work instead of starting from scratch every time.</p><h4><a href="https://youmind.com/gpt-image-2-prompts">Read more.</a></h4><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 263]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-263</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-263</guid><pubDate>Wed, 22 Apr 2026 20:30:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oBlM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oBlM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oBlM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oBlM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oBlM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oBlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21319,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oBlM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oBlM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oBlM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oBlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c40505-405d-42fd-a7a5-9cad62e22b4d_1200x100.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>A few weeks ago, I asked, &#8220;<em><strong>How can I improve the newsletter?</strong></em>&#8221; I got a bunch of emails with ideas. Thank you! &#129761;</p><p>A few people mentioned that we should add a indicator (what level of development knowledge is required) next to each piece we share, whether it&#8217;s for junior, intermediate, or senior developers. So we did that! &#9989;</p><p>A few others mentioned that it would be nice to have a community. So below, you&#8217;ll find a poll. Please vote. &#128071;</p><p><em><strong>P.S.</strong> If we talk about a paid community, it would come with many benefits like well-known developer appearances, tips, unheard stories, and more.</em></p><div class="poll-embed" data-attrs="{&quot;id&quot;:497957}" data-component-name="PollToDOM"></div><p>Connect with the "<em><strong>Those Who Swift</strong></em>" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4eEI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4eEI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4eEI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4eEI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4eEI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4eEI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg" width="1200" height="125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:125,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27665,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4eEI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4eEI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4eEI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4eEI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faafdc9b6-20d5-433a-bdf8-196ad6b23ba1_1200x125.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><h3>Today we have a new partner: Hostinger! &#128680;</h3><p>It comes with great deals for <em><strong>OpenClaw</strong></em> and <em><strong>VPS hosting.</strong></em></p><p>You can deploy OpenClaw on Hostinger with one-click deployment, pre-integrated AI tokens, and full control over your sensitive data and chat logs. It also offers 24/7 support and dedicated performance.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.hostg.xyz/aff_c?offer_id=48&amp;aff_id=229061&amp;url_id=5779&amp;source=THS&quot;,&quot;text&quot;:&quot;OpenClaw Hosting Deal!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.hostg.xyz/aff_c?offer_id=48&amp;aff_id=229061&amp;url_id=5779&amp;source=THS"><span>OpenClaw Hosting Deal!</span></a></p><p>One of the fastest virtual private servers, now with a 70% discount. Rock-solid performance and ready to deploy!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.hostg.xyz/aff_c?offer_id=48&amp;aff_id=229061&amp;url_id=4710&amp;source=THS&quot;,&quot;text&quot;:&quot;VPS 70% OFF Deal!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.hostg.xyz/aff_c?offer_id=48&amp;aff_id=229061&amp;url_id=4710&amp;source=THS"><span>VPS 70% OFF Deal!</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v7zC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v7zC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v7zC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v7zC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v7zC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v7zC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23481,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v7zC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v7zC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v7zC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v7zC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc092112d-e8e0-4202-9bfa-16f0001623f6_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Associatedtype In Swift Explained - A Complete Guide With SwiftUI Examples</h3><p>Sagar Unagar explains <code>associatedtype</code> through the distinction that generics choose a type from the caller side, while associated types let the conforming type decide it.</p><h4><a href="https://www.sagarunagar.com/blog/associatedtype-swift-explained-swiftui/">Read more.</a>&#128205;Level: Intermediate</h4><h3>SE-0526: WithDeadline</h3><p>The Swift Evolution review introduces <code>withDeadline</code>, a concurrency API that cancels work when an absolute deadline passes, while still waiting for the operation to finish cooperatively rather than force-stopping it. The most debated part is the API shape itself, with much of the discussion focused on naming, typed error wrapping, and whether the cancellation behavior should be made more explicit in the name.</p><h4><a href="https://forums.swift.org/t/se-0526-withdeadline/85850">Read more.</a>&#128205;Level: Advanced</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XZoh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XZoh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XZoh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XZoh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XZoh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XZoh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22344,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XZoh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XZoh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XZoh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XZoh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58143ff4-582c-4e4b-9453-0f97b1c35d55_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>A Reusable Spotlight Onboarding Component In SwiftUI</h3><p>Artem Mirzabekian builds a reusable SwiftUI onboarding spotlight that can highlight any view, show contextual guidance, and keep working across scroll views, navigation, sheets, and safe areas. The most useful part is the implementation approach: anchors and <code>PreferenceKey</code> make the solution flexible without dropping into UIKit-style overlay hacks.</p><h4><a href="https://livsycode.com/swiftui/a-reusable-spotlight-onboarding-component-in-swiftui/">Read more.</a>&#128205;Level: Intermediate</h4><h3>Building A Draggable Bottom Sheet In SwiftUI</h3><p>Natascha Fadeeva shows how to build a draggable bottom sheet with SwiftUI&#8217;s native <code>sheet</code> and <code>presentationDetents</code>, while still allowing scroll coordination and interaction with content underneath like a map. The most useful detail is that you can combine custom detents, disabled interactive dismissal, and background interaction for a bottom-sheet feel without building a fully custom container.</p><h4><a href="https://tanaschita.com/swiftui-draggable-bottom-sheet/">Read more.</a>&#128205;Level: Intermediate</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8ysK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8ysK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8ysK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8ysK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8ysK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8ysK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8ysK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8ysK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8ysK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8ysK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8173b1e1-bf90-411f-9097-cac5868e0b1b_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Tim Cook To Become Apple Executive Chairman, John Ternus To Become Apple CEO</h3><p>Apple announced that Tim Cook will become executive chairman and John Ternus will become Apple CEO on September 1, 2026, marking the biggest leadership change at the company since Cook took over in 2011. The key detail for developers and the industry is that Ternus comes from hardware engineering, which may keep Apple&#8217;s product-first direction firmly in place during the transition.</p><h4><a href="https://www.apple.com/newsroom/2026/04/tim-cook-to-become-apple-executive-chairman-john-ternus-to-become-apple-ceo/">Read more.</a>&#128205;</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_y5P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_y5P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_y5P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_y5P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_y5P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_y5P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22577,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_y5P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_y5P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_y5P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_y5P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda84a3b1-b845-4054-9c1d-d19ae02ee70b_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Dotted Background Effect In Metal</h3><p>Victor Baro breaks down an interactive dotted background shader step by step, showing how SDF circles, <code>fract()</code>, <code>floor()</code>, and touch-driven uniforms combine into glow, attraction, and repulsion effects. The most useful part is the mental model: dots are not moving objects, just pixel math, so the motion comes from shifting each dot&#8217;s logical center before rendering.</p><h4><a href="https://medium.com/@victorbaro/dotted-background-effect-in-metal-8214673edc9d">Read more.</a>&#128205;Level: Advanced</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!skqf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!skqf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!skqf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!skqf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!skqf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!skqf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24366,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!skqf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!skqf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!skqf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!skqf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92288922-79a6-4da0-9b6d-6a8c0064275e_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>FormatStyle Guide</h3><p>Chris Eidhof introduced an interactive browser-based guide to Swift Foundation&#8217;s <code>FormatStyle</code> APIs, with live examples for numbers, dates, measurements, and parsing. The most useful part is the SwiftUI angle, since the guide also shows how these formatters plug into real app code instead of staying as isolated API docs.</p><h4><a href="https://chris.eidhof.nl/post/format-style-guide/">Read more.</a>&#128205;Level: Intermediate</h4><h3>Five Things I Learned About Making AI Coding Agents Actually Work</h3><p>Ivan Magda argues that better results from coding agents usually come from better scaffolding, not from switching models. The most useful takeaways are practical ones: keep instruction files short, structure projects so agents can navigate them, start fresh sessions earlier, and give the agent a way to verify its own work.</p><h4><a href="https://ivanmagda.dev/posts/five-things-ai-coding-agents-actually-work/">Read more.</a>&#128205;Level: Advanced</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zE32!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zE32!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zE32!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zE32!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zE32!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zE32!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22370,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zE32!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zE32!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zE32!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zE32!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6d47a10-e969-4e58-82d1-620e126f06c9_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Introducing Claude Opus 4.7</h3><p>Anthropic says Claude Opus 4.7 is now generally available, with stronger performance on difficult software engineering tasks, better vision, and more reliable long-running work than Opus 4.6. The practical detail is availability: it is live across Claude products, the API, Amazon Bedrock, Google Cloud Vertex AI, and Microsoft Foundry, with pricing unchanged from Opus 4.6.</p><h4><a href="https://www.anthropic.com/news/claude-opus-4-7">Read more.</a>&#128205;</h4><h3>Introducing Claude Design By Anthropic Labs</h3><p>Anthropic says Claude Design lets teams create prototypes, slides, one-pagers, and other visual work through conversation, with support for inline edits, design systems, and exports to formats like PPTX, PDF, Canva, and HTML. The most interesting part is the workflow bridge: once a design is ready, it can be packaged into a handoff bundle for Claude Code, making the jump from idea to implementation much tighter.</p><h4><a href="https://www.anthropic.com/news/claude-design-anthropic-labs">Read more.</a>&#128205;</h4><h3>Codex For (Almost) Everything</h3><p>OpenAI says Codex is moving beyond coding into a wider developer workflow, with computer use, image generation, memory, repeatable automations, and support for tools like GitHub reviews, SSH devboxes, and browser-based iteration. The most useful part is the broader scope: it is starting to feel less like a code assistant and more like a workspace agent that can carry context across the full software development lifecycle.</p><h4><a href="https://openai.com/index/codex-for-almost-everything/">Read more.</a>&#128205;</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J078!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J078!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J078!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J078!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J078!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J078!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25836,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J078!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J078!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J078!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J078!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd0f593-16ad-427f-bf0e-b78bc85a95ee_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>SwiftUI: Refreshable Task Cancellation</h3><p>Article explains a subtle SwiftUI trap where <code>.refreshable</code> can cancel its own work if state changes trigger a redraw too early. The most useful part is the two-fix breakdown: publish one final state update when possible, or wrap the refresh logic in a separate task when incremental updates are required.</p><h4><a href="https://antongubarenko.substack.com/p/swiftui-refreshable-task-cancellation">Read more.</a>&#128205;Level: Intermediate</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6sqA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6sqA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6sqA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6sqA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6sqA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6sqA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg" width="1200" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21652,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/194509608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6sqA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6sqA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6sqA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6sqA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F467888ef-d360-4720-8eae-17994218561f_1200x100.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>try! Swift Tokyo 2026 Videos</h3><p>try! Swift is one of the leading international conferences for iOS developers focused on Swift. It gives developers from around the world a great chance to explore the latest trends in Apple platform development and learn from some of the best voices in the community.</p><h4><a href="https://www.youtube.com/@trySwiftConference/videos">Watch here.</a>&#128205;</h4><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 262]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-262</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-262</guid><pubDate>Wed, 15 Apr 2026 20:30:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>While Anthropic is tightening control over its ecosystem by <a href="https://www.theverge.com/ai-artificial-intelligence/907074/anthropic-openclaw-claude-subscription-ban">restricting third-party access tools like OpenClaw</a> from its subscriptions to prevent overuse, another story is unfolding behind the scenes. Their upcoming model, Mythos, expected later this month, has reportedly been paused due to security concerns.</p><p>During early testing, the model was able to bypass guardrails and escape its sandbox. Ironically, a system designed for security research and penetration testing did exactly what it was built to do. That result raised serious concerns, even among its creators. The situation escalated enough that Anthropic partnered with a wide group of companies, including potential competitors, under <a href="https://www.anthropic.com/glasswing">Project Glasswing</a>. The goal is clear: understand how to prevent future models from autonomously exploiting systems and instead keep them focused on safe, controlled tasks.</p><p>This highlights an important shift. As models become more capable, the challenge is no longer just performance or quality, but control and containment.</p><p>Meanwhile, on the other side of the bridge, the hiring market tells a very different story. AI-generated job descriptions are still filled with outdated requirements. Take-home assignments ask for UIKit and Combine implementations in 2026, often without third-party dependencies or modern layout tools. What exactly is being tested here? The ability to work under stress, or the willingness to ignore years of progress?</p><p>Development should not feel like driving on unbalanced wheels. If a company is not explicitly hiring for maintaining legacy systems, it&#8217;s worth thinking twice before investing time in such unpaid tasks. Your time is valuable, and the tools you choose should reflect the present, not the past.</p><div><hr></div><p>Connect with the "Those Who Swift" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rxoT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rxoT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!rxoT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!rxoT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!rxoT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rxoT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/193614899?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rxoT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!rxoT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!rxoT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!rxoT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1178f9d3-73f7-4f32-8ebb-a086ba6c3abe_1200x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><a href="https://bitrise.io/resources/tools/app-navigator?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_misc_app-navigator_all_2026-03-12&amp;utm_content=newsletter">See How Often the Top Swift Apps are Shipping</a></h3><p>Release frequency is one of the strongest signals in the App Store algorithm. App Navigator shows you how your update cadence stacks up against the best apps in your category.</p><p>Takes about 10 seconds! &#128640;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bitrise.io/resources/tools/app-navigator?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_misc_app-navigator_all_2026-03-12&amp;utm_content=newsletter&quot;,&quot;text&quot;:&quot;Compare your app&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bitrise.io/resources/tools/app-navigator?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_misc_app-navigator_all_2026-03-12&amp;utm_content=newsletter"><span>Compare your app</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://www.sagarunagar.com/blog/lazy-properties-swiftui-pitfalls/">Lazy Properties In Swift - Why They Don&#8217;t Always Work In SwiftUI</a></h3><p>Sagar Unagar explains that <code>lazy</code> is useful for deferred and cached initialization, but it becomes misleading inside SwiftUI views because view structs are recreated often and body is non-mutating. The most useful takeaway is practical: keep lazyfor class-based objects with stable identity, and use <code>@State</code> or <code>@StateObject</code> when SwiftUI lifecycle control matters.</p><p><strong><a href="https://www.sagarunagar.com/blog/lazy-properties-swiftui-pitfalls/">Read more.</a>&#128205;</strong></p><h3><a href="https://swiftandmemes.com/interface-segregation-principle-in-ios-how-to-prevent-protocol-from-becoming-a-prison/">Interface Segregation Principle In IOS: How To Prevent A Protocol From Becoming A Prison</a></h3><p>The post shows how a clean UserService can slowly turn into a fat protocol with hidden coupling, brittle mocks, and cross-team bugs, then makes the practical case for splitting it into focused providers with narrower contracts</p><p><strong><a href="https://swiftandmemes.com/interface-segregation-principle-in-ios-how-to-prevent-protocol-from-becoming-a-prison/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://tanaschita.com/testing-in-app-purchases-locally-storekit/">How To Test In-App Purchases Locally Using StoreKit</a></h3><p>Natascha Fadeeva shows how StoreKit&#8217;s local configuration files make purchase flows much faster to test, including subscriptions, failures, renewals, and refunds without relying on App Store Connect. The most useful part is the practical setup: attach a local or synced .storekit file to the scheme, then use Xcode&#8217;s transaction manager to reproduce edge cases quickly and predictably.</p><p><strong><a href="https://tanaschita.com/testing-in-app-purchases-locally-storekit/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/swiftui/swiftui-withanimation-completion-on-ios-13-16/">SwiftUI WithAnimation Completion On iOS 13&#8211;16</a></h3><p>Artem Mirzabekian explains that withAnimation on iOS 13&#8211;16 has no built-in completion callback, so you need your own workaround if later logic depends on animation finish. The useful part is the practical direction: observe an animatable value instead of the animation itself, since native completion support only arrived in newer SwiftUI APIs.</p><p><strong><a href="https://livsycode.com/swiftui/swiftui-withanimation-completion-on-ios-13-16/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/hello/april26">Hello Developer: April 2026</a></h3><p>Apple&#8217;s April 2026 Hello Developer roundup points to a useful pre-WWDC mix: a live Swift concurrency session with Apple engineers on April 23, fresh sample code for a SwiftUI travel wishlist app, and a reminder to brush up on core topics before WWDC26. It also highlights new social channels on bilibili and LinkedIn, plus the latest Analytics expansion in App Store Connect.</p><p><strong><a href="https://developer.apple.com/hello/april26">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-20">Paywall Design Tips That Boost App Sales</a></h3><p>Daniils, the founder of <a href="https://www.applayouts.com/">AppLayouts</a> is sharing tips on how to design paywalls to boost app sales. Effective paywalls sell outcomes, not just features: use value-based messaging, stronger CTA copy, and richer, more engaging layouts that build trust and keep users exploring instead of dismissing the screen.</p><p><em><strong>This is part 1. Part 2 is coming on April 29th. <a href="https://indieappdevs.substack.com">Subscribe to Indie App Devs</a>! </strong></em></p><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-20">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://mobilea11y.com/blog/swiftui-preview-testing/">Checking Accessibility With SwiftUI Previews</a></h3><p>Rob Whitaker shows how SwiftUI previews can do more than visual checks by helping you catch accessibility issues around Dynamic Type, bold text, dark mode, locale, and right-to-left layout before running on a device. The most useful part is the mix of official preview traits and carefully scoped private environment keys for testing things like increased contrast, reduce motion, and button shapes.</p><p><strong><a href="https://mobilea11y.com/blog/swiftui-preview-testing/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://www.swiftjectivec.com/kids-and-vibe-coding-ios-apps/">Kids And Vibe Coding: The Joy Of Building</a></h3><p>Jordan Morgan shares a surprisingly warm take on kids building apps with AI, where messy prompts and rough UX still turn into real learning and excitement. The most useful insight is that AI changes the tool, not the craft: product sense, design judgment, and knowing how software actually works still matter.</p><p><strong><a href="https://www.swiftjectivec.com/kids-and-vibe-coding-ios-apps/">Read more.</a>&#128205;</strong></p><h3><a href="https://batikansosun.medium.com/ai-wont-replace-developers-but-developers-who-use-ai-will-replace-you-4b677b8eb68e">AI Won&#8217;t Replace Developers &#8212; But Developers Who Use AI Will Replace You</a></h3><p>Batikan Sosun describes the moment AI stopped feeling like hype and started feeling like leverage: a feature that usually took 6&#8211;8 hours was finished in about 2, with results that still held up. The most useful takeaway is not fear but adaptation, because the real shift is toward developers who can use AI for architecture, boilerplate, debugging, and refactoring without giving up judgment.</p><p><strong><a href="https://batikansosun.medium.com/ai-wont-replace-developers-but-developers-who-use-ai-will-replace-you-4b677b8eb68e">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/playlist?list=PLgZNfD3JAd4_2JeJQaFaOwuXV3Z5OX-SB">Swish: Clojure-Like Lisp For Swift Video Series</a></h3><p>Rod Schmidt shares his video series on building Swish, a Clojure-like Lisp for Swift with Claude Code. The most interesting part is the end goal: an embedded interpreter or Swift-linked compiler that could power app business logic, scripting, or even cross-platform experiments with Swift on Android.</p><p><strong><a href="https://www.youtube.com/playlist?list=PLgZNfD3JAd4_2JeJQaFaOwuXV3Z5OX-SB">Watch here.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 261]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-261</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-261</guid><pubDate>Wed, 08 Apr 2026 20:29:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>Instead of a regular weekly note, this week I have &#9996;&#65039; questions for you.</p><p>First, the best idea, or a few of the best ideas, will be rewarded with $50 (Amazon, PayPal, or something similar). I want to pick your brain. &#129504;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QZS9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QZS9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QZS9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QZS9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QZS9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QZS9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg" width="1456" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:946419,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/192936254?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QZS9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QZS9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QZS9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QZS9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F522e8d5a-f38d-4653-a8cc-200df8089f90_1815x773.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>How can we improve this newsletter?</p></li><li><p>What new section can we add?</p></li><li><p>What should be different or improved?</p></li><li><p>What you would do differently?</p></li></ul><p>Any ideas are welcome! 1-3 best ideas will be rewarded. &#128184;</p><p><em><strong>Just reply to this email with your idea or ideas! </strong></em><strong>&#129761;</strong></p><div><hr></div><p>Second, from time to time I share discounts on books. I&#8217;m wondering if you&#8217;re interested in that kind of thing. Today&#8217;s deal can be find below in &#8220;<em>Friends</em>&#8221; section. </p><p>Please vote in the poll below. &#128071;</p><div class="poll-embed" data-attrs="{&quot;id&quot;:491784}" data-component-name="PollToDOM"></div><p><strong>THANK YOU!</strong> </p><div><hr></div><p>Connect with the "<em>Those Who Swift"</em> team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://www.sagarunagar.com/blog/swift-mutex-shared-mutable-state/">Mutex In Swift - Protecting Shared Mutable State With Locks</a></h3><p>Sagar Unagar explains where Mutex fits in modern Swift: not as an actor replacement, but as a lower-level tool for tiny synchronous critical sections where await would add overhead. The most useful part is the practical guidance around withLock, nonisolated, and avoiding deadlocks by keeping locked work small and never nesting the same mutex.</p><p><strong><a href="https://www.sagarunagar.com/blog/swift-mutex-shared-mutable-state/">Read more.</a>&#128205;</strong></p><h3><a href="https://swifttribune.walidsassi.com/posts/mlx-swift-on-device-llm/">MLX Swift: Enabling On-Device Large Language Models On Apple Silicon</a></h3><p>Walid Sassi breaks down MLX Swift as a native way to run quantized open-weight LLMs on Apple Silicon, with a clear comparison against Apple&#8217;s Foundation Models approach. The most useful part is the practical stack view: MLX Core, MLX-LM, Hugging Face distribution, Metal toolchain setup, and a working SwiftUI-based chat session flow all in one guide.</p><p><strong><a href="https://swifttribune.walidsassi.com/posts/mlx-swift-on-device-llm/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://livsycode.com/swiftui/swiftui-custom-popover/">SwiftUI Custom Popover</a></h3><p>Artem Mirzabekian shows how to build a reusable custom popover with <code>matchedGeometryEffect</code> when SwiftUI&#8217;s standard <code>.popover</code> is too limiting, like when you need an overlay without an arrow. The most useful part is the tiny API design: a shared namespace, a selection binding, and paired <code>matchedPopover</code> / <code>matchedPopoverSource</code> modifiers that make the behavior reusable across views.</p><p><strong><a href="https://livsycode.com/swiftui/swiftui-custom-popover/">Read more.</a>&#128205;</strong></p><h3><a href="https://swiftwithmajid.com/2026/04/06/building-list-replacement-in-swiftui/">Building List Replacement In SwiftUI</a></h3><p>Majid Jabrayilov shows that <code>List</code> is often the wrong fit for mixed, card-style interfaces, where <code>ScrollView</code> plus lazy stacks now offer more control without much performance loss. The most useful part is the set of reusable primitives built with Container View APIs, letting you recreate sectioned, divider-rich, navigation-friendly layouts with a more custom feel.</p><p><strong><a href="https://swiftwithmajid.com/2026/04/06/building-list-replacement-in-swiftui/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=97t4mt64">App Store Expands Support To 11 New Languages</a></h3><p>Apple says App Store Connect now supports localized metadata for 11 new languages, bringing the total to 50 and adding Bangla, Gujarati, Kannada, Malayalam, Marathi, Odia, Punjabi, Slovenian, Tamil, Telugu, and Urdu. The most useful part is the practical reach: developers can now localize app names, descriptions, screenshots, and marketing badges for these languages, with Apple specifically highlighting India as a growth opportunity.</p><p><strong><a href="https://developer.apple.com/news/?id=97t4mt64">Read more.</a>&#128205;</strong></p><h3><a href="https://developer.apple.com/news/?id=fwswmjcn">Updated Apple Developer Program License Agreement Now Available</a></h3><p>Apple Developer Program License Agreement was revised on March 30, 2026 to support new features, policy updates, and clarifications. The most notable changes affect requirements for the Foveated Streaming, Family Controls, Accessory Notifications, and Accessory Live Activities frameworks, so teams using those APIs should review the new terms carefully.</p><p><strong><a href="https://developer.apple.com/news/?id=fwswmjcn">Read more.</a>&#128205;</strong></p><h3><a href="https://developer.apple.com/news/?id=z8vzrgzx">Get Ready With The Latest Beta Releases</a></h3><p>New Beta versions of iOS 26.5, iPadOS 26.5, macOS 26.5, tvOS 26.5, visionOS 26.5, and watchOS 26.5 are now available, along with Xcode 26.5 beta for testing against the latest SDK changes. The practical reminder is to start validation early, confirm app behavior on every relevant platform, and send feedback while the beta cycle is still open.</p><p><strong><a href="https://developer.apple.com/news/?id=z8vzrgzx">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://mobilea11y.com/blog/swiftui-not-accessible/">No, SwiftUI Is Not &#8220;Accessible By Default&#8221;</a></h3><p>Rob Whitaker pushes back on one of the most repeated SwiftUI myths and shows where accessibility still breaks without deliberate work, especially around image labels, state changes, semantic controls, and grouped content. The most useful reminder is that SwiftUI gives a better baseline, not a finished result, so real accessibility still depends on intention, correct semantics, and VoiceOver testing.</p><p><strong><a href="https://mobilea11y.com/blog/swiftui-not-accessible/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://www.pointfree.co/blog/posts/205-beta-preview-debugsnapshots">Beta Preview: DebugSnapshots</a></h3><p>Brandon Williams and Stephen Celis from Point-Free introduce DebugSnapshots, a new Point-Free library for testing reference-type models by generating snapshotable views of their underlying data with the @DebugSnapshot macro. The most useful part is the exhaustive expect flow, which fails with a clear diff when you miss a state change and can even track computed or nested reference-type properties.</p><p><strong><a href="https://www.pointfree.co/blog/posts/205-beta-preview-debugsnapshots">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@itsuki.enjoy/swift-dynamic-safari-content-blocker-d5f7760a60ac">Swift: Dynamic Safari Content Blocker</a></h3><p>Itsuki shows how little code a Safari content blocker actually needs, with most of the work living in JSON rules and a small extension target. The most useful part is the dynamic setup: store rules in an App Group, feed them through <code>ContentBlockerRequestHandler</code>, and call <code>reloadContentBlocker</code> whenever the rule set changes.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swift-dynamic-safari-content-blocker-d5f7760a60ac">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://cursor.com/blog/cursor-3">Meet The New Cursor</a></h3><p>Michael Truell and Sualeh Asif introduce Cursor 3 as a new agent-first workspace with multi-repo support, parallel local and cloud agents, and quicker handoff between environments. The most useful upgrade is the path from diffs to staged commits and pull requests, plus built-in browser and marketplace support that keeps more of the workflow inside one place.</p><p><strong><a href="https://cursor.com/blog/cursor-3">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://antongubarenko.substack.com/p/spec-driven-development-with-opensec?r=21t43r">Spec-Driven Development With OpenSec</a></h3><p>Anton Gubarenko explains why spec-driven development helps AI coding feel more predictable by turning loose prompts into structured artifacts like proposal, specs, design, and tasks. One especially useful part is the OpenSpec walkthrough with delta specs, which keeps the focus on what changed instead of rewriting the whole product spec.</p><p><strong><a href="https://antongubarenko.substack.com/p/spec-driven-development-with-opensec?r=21t43r">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=qgDIOrKnmuw">Advanced Techniques for Working with Optionals in Swift</a></h3><p>Natalia Panferova focuses on lesser-known ways to work with optionals that can make Swift code both cleaner and safer. It looks like a practical refresher on techniques many developers do not use often enough in day-to-day code.</p><p><strong><a href="https://www.youtube.com/watch?v=qgDIOrKnmuw">Watch here.</a>&#128205;</strong></p><div><hr></div><h2>Friends &#129309;</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ocXw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ocXw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ocXw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ocXw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ocXw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ocXw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg" width="1456" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89642,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/192936254?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ocXw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ocXw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ocXw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ocXw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F938bff57-10d4-4f9d-bc57-0a3ecbe620b9_1584x396.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Grokking Data Structures makes everyday data structures easier to learn, from arrays and linked lists to trees, graphs, and hash tables. It focuses on practical use cases, tradeoffs, and core implementations, with clear examples and visuals that make it beginner-friendly. Plus, for a limited time, you can grab it at a great discount <strong>GDS40</strong>!</p><p><strong><a href="https://www.manning.com/books/grokking-data-structures">Purchase here.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#127752;</h2><h3><a href="https://iterm2colorschemes.com">iTerm2 Color Themes</a></h3><p>The iTerm2 Color Schemes project collects more than 325 themes for iTerm and related terminals, with easy import support and screenshot previews for each preset. A useful detail is that it goes beyond iTerm2, with ports for Terminal, Kitty, Windows Terminal, PuTTY, Konsole, and other environments, making it a handy place to test or standardize terminal looks across tools.</p><p><strong><a href="https://iterm2colorschemes.com">Read more.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 260]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-260</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-260</guid><pubDate>Wed, 01 Apr 2026 20:30:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>Apple quietly <a href="https://developer.apple.com/news/?id=hh6v4b55">released a significant update to App Store analytics</a> this week, and it deserves attention. The platform now offers deeper insights into user acquisition, engagement, and monetization. Developers can better understand how users discover their apps, what drives downloads, and how different channels contribute to growth.</p><p>This update brings features that were previously available mostly through paid analytics tools. For many teams, especially indie developers, this is a major step forward. What used to be a relatively basic stats platform is evolving into a much more advanced analytics environment. It allows developers to make more informed decisions about marketing, product improvements, and revenue strategies without relying heavily on third-party services.</p><p>Apple is also encouraging developers to take advantage of these insights to improve conversion rates, refine product pages, and better align their apps with user expectations. Combined with other App Store tools, this creates a more complete ecosystem for growth and optimization.</p><p>At the same time, congratulations are in order for the <a href="https://developer.apple.com/swift-student-challenge/distinguished-winners/">Swift Student Challenge winners</a>. The distinguished winners this year showcased impressive creativity and technical skill, building projects that reflect both innovation and strong understanding of Apple technologies. It&#8217;s always inspiring to see how the next generation approaches problem-solving and design.</p><div><hr></div><p>Connect with the "Those Who Swift" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WXJK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WXJK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!WXJK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!WXJK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!WXJK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WXJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/192283646?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WXJK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!WXJK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!WXJK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!WXJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfb847bc-7a4e-4ad5-bc3e-0a6ee39709bd_1200x50.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h3>Forget about Ruby and Fastlane installation issues!</h3><p>Discover <a href="https://github.com/codemagic-ci-cd/cli-tools">Codemagic CLI tools</a> &#8212; the free, open-source Fastlane alternative for automating iOS builds, code signing and publishing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/codemagic-ci-cd/cli-tools&quot;,&quot;text&quot;:&quot;open GitHub&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/codemagic-ci-cd/cli-tools"><span>open GitHub</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://www.swift.org/blog/whats-new-in-swift-march-2026/">What&#8217;s New In Swift: March 2026 Edition</a></h3><p>Owen Voorhees and Dave Lester round up a strong month for Swift, led by Swift 6.3 and steady progress toward making Swift Build the future default in Swift Package Manager. The most useful part is the compact mix of signals in one place: release notes, community highlights, concurrency and systems videos, and fresh Swift Evolution proposals worth tracking.</p><p><strong><a href="https://www.swift.org/blog/whats-new-in-swift-march-2026/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/swift/thread-vs-queue-vs-actor/">Thread Vs Queue Vs Actor Executor In Swift: Interview Essentials</a></h3><p>Artem Mirzabekian clearly separates three terms that are often mixed together in concurrency discussions: threads execute code, queues schedule work, and actor executors preserve isolation. It is also a nice start to his new interview preparation series, with practical explanations around <code>await</code>, <code>MainActor</code>, reentrancy, and why actors should not be treated as just serial queues. </p><p><strong><a href="https://livsycode.com/swift/thread-vs-queue-vs-actor/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://medium.com/@wesleymatlock/swiftui-coordinator-pattern-navigation-without-navigationlink-d9ebc5a3388b">SwiftUI Coordinator Pattern: Navigation Without NavigationLink</a></h3><p>Wesley Matlock shows how a coordinator can centralize pushes, sheets, tab switches, and deep links so SwiftUI views only declare destinations instead of owning navigation logic. The most useful idea is the split between lightweight external deep links and richer in-app routes, which keeps navigation easier to test, refactor, and scale.</p><p><strong><a href="https://medium.com/@wesleymatlock/swiftui-coordinator-pattern-navigation-without-navigationlink-d9ebc5a3388b">Read more.</a>&#128205;</strong></p><h3><a href="https://antongubarenko.substack.com/p/swiftui-charts-axis-scale">SwiftUI: Charts Axis Scale</a></h3><p>Article explains <code>chartXScale(range:type:)</code> through the distinction that matters most in Swift Charts: domain controls which values are visible, while range controls where they are drawn inside the plot area. The most useful part is the practical guidance around <code>.plotDimension(padding:)</code>, asymmetric start/end padding, and explicit type selection when you want chart spacing and axis behavior to match the intended layout more precisely.</p><p><strong><a href="https://antongubarenko.substack.com/p/swiftui-charts-axis-scale">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swiftyplace.com/blog/swiftui-view-lifecycle-onappear?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=swiftui-view-lifecycle-onappear">SwiftUI View Lifecycle: When onAppear Actually Fires</a></h3><p>Karin Prater explains the mental model that clears up most onAppear confusion: it tracks visibility, not view creation, so it can fire many times while @State still survives. The most useful part is the behavior breakdown across TabView, NavigationStack, and lazy containers, especially the reminder that the same code can behave differently between iOS 17 and iOS 18+.</p><p><strong><a href="https://www.swiftyplace.com/blog/swiftui-view-lifecycle-onappear?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=swiftui-view-lifecycle-onappear">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=hh6v4b55">New In-App Purchase And Subscription Data Now Available In Analytics</a></h3><p>Apple says App Store Connect Analytics just received its biggest update yet, adding more than 100 new metrics, monetization and subscription data, cohort analysis, and new peer group benchmarks. The most useful part for teams is that subscription reports can now be exported through the Analytics Reports API, making it easier to plug App Store data into internal dashboards and offline analysis.</p><p><strong><a href="https://developer.apple.com/news/?id=hh6v4b55">Read more.</a>&#128205;</strong></p><h3><a href="https://developer.apple.com/help/app-store-connect/manage-app-information/declare-regulated-medical-device-status">App Store Adds Regulated Medical Device Status For Health Apps</a></h3><p>Apple Developer Relations says apps distributed in the EEA, UK, or U.S. that fall under Health &amp; Fitness or Medical categories, or reference medical or treatment information, may now need a regulated medical device status in App Store Connect. This status is already required for new qualifying apps, and existing apps must provide it by early 2027 to keep submitting updates.</p><p><strong><a href="https://developer.apple.com/help/app-store-connect/manage-app-information/declare-regulated-medical-device-status">Read more.</a>&#128205;</strong></p><h3><a href="https://c.apple.com/r?v=2&amp;a=JO1XYJwWmbNCvWbplzNuaDG%2B7gSE4H5zisqkUSYu2kIpwIhBR22TmYoiBCgbbQpRgtNdDibMPe8GEc1TJUbADfA0%2BrVECbiFAfnGTVxrbdp3KPmZGCWQglR7OSnkAmA%2FUtFntfEVSrbC0krMFVRFGNbqMGSHzT5B68f4GyDzgDMOhpQWJtKi6I9Ps0To1zSEkkcgNQXsdPPPheLdVqUSy5vjjQEP5dtRLrSICtaoE9uLGL4aue%2F4C7itc%2BrbGRlYuM9dcE3LmU%2BL42VaTsERXedHepDwp397ZXctjCbGL4n1LaZTCyFHwSzeTmroomHcannGrKFMgdCSthAfrjLtnf%2F8tOga%2FaG4KUixhQKPCrE%3D">Brazil App Store Age Ratings Update To A6 For Some Apps</a></h3><p>Apple says that starting March 30, 2026, some apps on the Brazil storefront will automatically move to the A6 age rating on devices running Apple&#8217;s 26-era platforms. The change applies to apps with descriptors like user-generated content, infrequent cartoon or fantasy violence, or infrequent contests, and does not affect ratings in other regions.</p><p><strong><a href="https://c.apple.com/r?v=2&amp;a=JO1XYJwWmbNCvWbplzNuaDG%2B7gSE4H5zisqkUSYu2kIpwIhBR22TmYoiBCgbbQpRgtNdDibMPe8GEc1TJUbADfA0%2BrVECbiFAfnGTVxrbdp3KPmZGCWQglR7OSnkAmA%2FUtFntfEVSrbC0krMFVRFGNbqMGSHzT5B68f4GyDzgDMOhpQWJtKi6I9Ps0To1zSEkkcgNQXsdPPPheLdVqUSy5vjjQEP5dtRLrSICtaoE9uLGL4aue%2F4C7itc%2BrbGRlYuM9dcE3LmU%2BL42VaTsERXedHepDwp397ZXctjCbGL4n1LaZTCyFHwSzeTmroomHcannGrKFMgdCSthAfrjLtnf%2F8tOga%2FaG4KUixhQKPCrE%3D">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-19">The Indie Path: My 5-Layer Framework</a></h3><p>Andrei Ilnitskii talks about the massive surge of new apps in the App Store. As the flood of junk keeps rising, he helps answer the questions many people who are just starting out have:</p><ul><li><p>Apple is cracking down on AI-generated apps?</p></li><li><p>ASO is dead?</p></li><li><p>How do I validate an idea?</p></li><li><p>How much runway do I need to go indie?</p></li></ul><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-19">Read more.</a>&#128205;</strong></p><h3><a href="https://blog.codemagic.io/build-speed-benchmark-comparison/">CI/CD Build Speed Benchmark: Codemagic Vs GitHub Actions Vs Bitrise</a></h3><p>Masaki Sato compares the same iOS Flutter build across GitHub Actions, Bitrise, and Codemagic, showing how much machine specs change both speed and cost. The clearest takeaway is that GitHub Actions stays attractive for low-volume teams, while Bitrise and Codemagic cut build times by more than half in this benchmark.</p><p><strong><a href="https://blog.codemagic.io/build-speed-benchmark-comparison/">Read more.</a>&#128205;</strong></p><h3><a href="https://fline.dev/blog/top-10-developer-tools-apple-introduced-at-wwdc25/">Top 10 Developer Tools Apple Introduced At WWDC25</a></h3><p>An almost one-year-old post by Cihat G&#252;nd&#252;z, but still a very good refresher if you want one practical list of Apple developer tools worth revisiting after last year&#8217;s announcements. From Foundation Models and Xcode AI workflows to AlarmKit, SwiftUI WebView, App Store Connect analytics, and String Catalog improvements.</p><p><strong><a href="https://fline.dev/blog/top-10-developer-tools-apple-introduced-at-wwdc25/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://developers.openai.com/codex/use-cases/native-ios-macos-apps">OpenAI: Build For iOS And macOS</a></h3><p>OpenAI shows how Codex can help native Apple platform work across SwiftUI, UIKit, AppKit, testing, and migration tasks, with examples like fixing Auto Layout issues, adding features, and reviewing pull requests. The practical value is the workflow angle: Codex is presented less as a code generator and more as a teammate for large codebases, refactors, and platform-specific app maintenance.</p><p><strong><a href="https://developers.openai.com/codex/use-cases/native-ios-macos-apps">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.sagarunagar.com/blog/swiftui-animatable-protocol-guide/">Animatable In SwiftUI Explained - Complete Guide With Examples &amp; Deep Dive</a></h3><p>Sagar Unagar explains that SwiftUI does not animate views directly, it animates data through animatableData, which is why custom motion depends on exposing values SwiftUI can interpolate. The most useful part is the progression from single-value animation to AnimatablePair and custom VectorArithmetic, showing how to animate richer shapes and data-driven visuals without relying on view-level tricks.</p><p><strong><a href="https://www.sagarunagar.com/blog/swiftui-animatable-protocol-guide/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=mzlnHXbV2UQ">Don&#8217;t Make This Mistake With A Spacer In SwiftUI</a></h3><p>Vincent Pradeilles highlights a common SwiftUI layout mistake: using Spacer in places where it quietly breaks alignment or creates more flexible space than you intended.</p><p><strong><a href="https://www.youtube.com/watch?v=mzlnHXbV2UQ">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=VU-NiioUpxg&amp;t=237s">iOS Agent Skills, App Store Connect CLI, Foundation Models Tokens &amp; More</a></h3><p>Sean Allen&#8217;s latest Swift News episode pulls together several current Apple dev topics, including iOS agent skills, the App Store Connect CLI, and Foundation Models token work. I could not access the full video page content, so this summary is based only on the verified title and public snippets.</p><p><strong><a href="https://www.youtube.com/watch?v=VU-NiioUpxg&amp;t=237s">Watch here.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 259]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-259</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-259</guid><pubDate>Wed, 25 Mar 2026 20:47:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>AI apps are getting more autonomous, and Anthropic&#8217;s Claude is a great example of that shift. It&#8217;s steadily gaining remote and coordinated capabilities, including features like <a href="https://code.claude.com/docs/en/remote-control">Remote Control</a> and <a href="https://claude.com/product/cowork#dispatch-and-computer-use">scheduled Cowork sessions</a>. These tools allow you to manage development workflows from your phone, bringing a level of flexibility similar to what OpenClaw introduced earlier, but now with a more integrated approach.</p><p>At the same time, its main competitor is moving in a different direction. OpenAI is reportedly <a href="https://techcrunch.com/2026/03/24/openais-sora-was-the-creepiest-app-on-your-phone-now-its-shutting-down/">shutting down some side products</a>, including the Sora app, to focus on future AGI development and training new models. That shift is not surprising. Model training requires enormous resources, and from a business perspective, maintaining standalone apps that don&#8217;t cover their operational costs becomes difficult, especially with an IPO on the horizon. Add ongoing concerns around legal content and deepfakes, and the decision becomes even more understandable.</p><p>What we&#8217;re seeing is a divergence in strategy. Some companies are expanding real-world usability and control, while others are consolidating efforts around core model development. For developers, this means tools are becoming more like orchestration layers-multiple systems, multiple &#8220;strings to pull,&#8221; all needing synchronized control. In a way, it starts to resemble a GlobalActor pattern, but at a system level.</p><p>This week we&#8217;re sharing a practical tip related to this idea. &#128071;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lqkl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lqkl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 424w, https://substackcdn.com/image/fetch/$s_!lqkl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 848w, https://substackcdn.com/image/fetch/$s_!lqkl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 1272w, https://substackcdn.com/image/fetch/$s_!lqkl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lqkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif" width="800" height="998" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:998,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201850,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/191457710?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lqkl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 424w, https://substackcdn.com/image/fetch/$s_!lqkl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 848w, https://substackcdn.com/image/fetch/$s_!lqkl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 1272w, https://substackcdn.com/image/fetch/$s_!lqkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25d926f-f050-4a30-a22a-31601f1d42ad_800x998.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><p>Connect with the "Those Who Swift" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://www.sagarunagar.com/blog/swift-algorithms-complete-guide/">Swift Algorithms - Apple&#8217;s Hidden Collection And Sequence APIs You Should Be Using</a></h3><p>Sagar Unagar highlights how Apple&#8217;s swift-algorithms package can replace a lot of handwritten loops and index-heavy code with clearer, safer collection operations. The most useful part is the practical tour through APIs like combinations, chunking, product, uniqued, and random sampling, with real examples that make the package feel immediately usable.</p><p><strong><a href="https://www.sagarunagar.com/blog/swift-algorithms-complete-guide/">Read more.</a>&#128205;</strong></p><h3><a href="https://captainswiftui.substack.com/p/talking-liquid-glass-with-apple">Talking Liquid Glass With Apple</a></h3><p>Danny Bolella  shares notes from Apple&#8217;s explanation of Liquid Glass and the tradeoffs behind the design, especially around layering, legibility, and when the effect should step back instead of drawing attention. The most useful part is the product angle: Liquid Glass is not just decoration, it is meant to react to context and hierarchy, which makes adoption more about restraint than adding blur everywhere.</p><p><strong><a href="https://captainswiftui.substack.com/p/talking-liquid-glass-with-apple">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swift.org/blog/swift-6.3-released/">Swift 6.3 Released</a></h3><p>Holly Borla and Joe Heck highlight Swift 6.3 as a broad release with more flexible C interoperability, cross-platform build improvements, embedded Swift updates, and the first official Swift SDK for Android. The most useful developer-facing additions include the new @c attribute, a preview of Swift Build integration in SwiftPM, and Swift Testing improvements like warning issues, cancellation, and image attachments.</p><p><strong><a href="https://www.swift.org/blog/swift-6.3-released/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://livsycode.com/uikit/ios-app-launch-process-from-tap-to-first-frame/">iOS App Launch Process: From Tap To First Frame</a></h3><p>Artem Mirzabekian breaks app startup into the parts that actually matter for performance: process creation, dyld, pre-main work, <code>UIApplicationMain</code>, scene setup, and the first rendered frame. The most useful reminder is that slow launch often starts before your app delegate runs, especially with too many dynamic dependencies and heavy static initialization.</p><p><strong><a href="https://livsycode.com/uikit/ios-app-launch-process-from-tap-to-first-frame/">Read more.</a>&#128205;</strong></p><h3><a href="https://azamsharp.com/2026/02/18/swiftui-architecture-tips.html">SwiftUI Architecture Lessons I Wish I Knew Earlier</a></h3><p>Mohammad Azam says most SwiftUI architecture problems come from blurry boundaries, not from SwiftUI itself, and recommends separating container screens from presenter views. His most useful advice is to keep UI state inside views, introduce stores only when needed, and use enums instead of piles of booleans for sheets and flows.</p><p><strong><a href="https://azamsharp.com/2026/02/18/swiftui-architecture-tips.html">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=yi8qj25k">WWDC26: June 8-12, 2026</a></h3><p>Apple has announced that WWDC26 will run from June 8 to June 12, 2026, with the full week available online and free for the global developer community. The key reminder is simple: expect new Apple tools, frameworks, and features, plus video sessions, labs, and direct access to Apple engineers and designers.</p><p><strong><a href="https://developer.apple.com/news/?id=yi8qj25k">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://medium.com/@wesleymatlock/swiftui-ipad-adaptive-layout-five-layers-for-apps-that-dont-break-in-split-view-8433b726f293">SwiftUI iPad Adaptive Layout: Five Layers For Apps That Don&#8217;t Break In Split View</a></h3><p>Wesley Matlock argues that <code>horizontalSizeClass</code> alone is too blunt for modern iPad layouts, especially in Split View, and proposes a richer layout environment based on size classes plus real container width. The most useful idea is to branch layout structure once at the root, then let geometry-driven tools like <code>ViewThatFits</code> handle what actually fits in the available space.</p><p><strong><a href="https://medium.com/@wesleymatlock/swiftui-ipad-adaptive-layout-five-layers-for-apps-that-dont-break-in-split-view-8433b726f293">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://medium.com/@itsuki.enjoy/swiftui-live-broadcasting-with-aws-ivs-bcd461764e2b">SwiftUI Live Broadcasting With AWS IVS</a></h3><p>Itsuki shows how to add live broadcasting to a SwiftUI app with AWS IVS by wrapping the streaming client in an observable manager and bridging camera preview into SwiftUI. The most useful part is the end-to-end flow: permissions, device discovery, session strategy, and UI state all come together in a setup you can adapt for a real creator app.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swiftui-live-broadcasting-with-aws-ivs-bcd461764e2b">Read more.</a>&#128205;</strong></p><h3><a href="https://kubamilcarz.medium.com/i-refactored-3-apps-in-a-year-heres-what-i-actually-learned-bc519ba33bb1?source=rss-b30973e2bd56------2">I Refactored 3 Apps In A Year. Here&#8217;s What I Actually Learned</a></h3><p>Jakub Milcarz says the hardest part of returning to an old codebase is not bad code, but lost context and unclear connections. His takeaway after refactoring Coffee Note, Bookie, and Memorize is that clean architecture is less about one perfect pattern and more about making the code feel easy to re-enter and change.</p><p><strong><a href="https://kubamilcarz.medium.com/i-refactored-3-apps-in-a-year-heres-what-i-actually-learned-bc519ba33bb1?source=rss-b30973e2bd56------2">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://david-smith.org/blog/2026/03/20/generally-useful-prompts/">Generally Useful Prompts</a></h3><p>David Smith shares a practical set of AI prompts he now uses in real app work, from generating SwiftUI previews to creating testing checklists, release notes, and spot-checking new bugs from a git diff. One especially useful pattern is anchoring prompts to the diff since the last release, which keeps the model focused on what actually changed.</p><p><strong><a href="https://david-smith.org/blog/2026/03/20/generally-useful-prompts/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.scottberrevoets.com/2026/03/20/review-your-own-ai-generated-code/">Review Your Own AI-Generated Code</a></h3><p>Scott Berrevoets argues that as agents write more production-quality code, the real review bottleneck shifts from implementation to planning, guidance, and specs. His sharpest point is that human review still matters, but it may be more valuable at the plan level while the engineer driving the agent self-reviews the generated code.</p><p><strong><a href="https://www.scottberrevoets.com/2026/03/20/review-your-own-ai-generated-code/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://medium.com/@wesleymatlock/apple-foundation-models-in-practice-building-on-device-ai-features-in-swift-b6243976af4f">Apple Foundation Models In Practice: Building On-Device AI Features In Swift</a></h3><p>Wesley Matlock shows what building real on-device AI features with Apple&#8217;s Foundation Models looks like in practice, from availability checks to typed generation with <code>@Generable</code> and <code>@Guide</code>. The most useful takeaway is the production mindset: keep prompts short, validate model availability early, and treat generated data as structured output that still may need verification against real APIs.</p><p><strong><a href="https://medium.com/@wesleymatlock/apple-foundation-models-in-practice-building-on-device-ai-features-in-swift-b6243976af4f">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://talk.objc.io/episodes/S01E484-the-layout-protocol-part-1">The Layout Protocol (Part 1)</a></h3><p>Chris Eidhof and Florian Kugler revisit an old SwiftUI layout challenge and solve it with the Layout protocol instead of older GeometryReader and preference hacks. The most useful part is the step-by-step custom layout build, including sizeThatFits, placeSubviews, and frame calculations that keep two labels aligned to a bar as space changes.</p><p><strong><a href="https://talk.objc.io/episodes/S01E484-the-layout-protocol-part-1">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=cUu0M5ewpPM">Swift Concurrency Explained With Matt Massicotte</a></h3><p>Walid Sassi invited Matt Massicotte to walk through the core ideas behind Swift Concurrency, including actors, isolation, Sendable, and structured concurrency.</p><p><strong><a href="https://www.youtube.com/watch?v=cUu0M5ewpPM">Watch here.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#9193;</h2><h3><a href="https://www.web-rewind.com">Web Rewind</a></h3><p>Opera&#8217;s Web Rewind turns 30 years of internet history into an interactive timeline filled with old web moments, sounds, and artifacts that feel closer to a digital museum than a normal promo site. The most interesting part is the format itself: instead of just listing milestones, it lets you move through eras of the web and revisit how online culture evolved from dial-up days to the AI era.</p><p><strong><a href="https://www.web-rewind.com">Nostalgia here.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 258]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-258</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-258</guid><pubDate>Wed, 18 Mar 2026 21:31:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>The IT job market remains shaky. &#129768;</p><p>Some companies openly state they plan to extract as much value as possible from AI tools before expanding their teams again. <a href="https://www.reuters.com/business/world-at-work/meta-planning-sweeping-layoffs-ai-costs-mount-2026-03-14/">Reuters reports</a> that Meta is preparing another round of layoffs as AI-related costs continue to grow. At the same time, the rise of new data centers doesn&#8217;t necessarily translate into more jobs, since they require far fewer engineers to operate.</p><p>On the other side, some companies are taking a longer view. IBM, for example, is <a href="https://www.ibm.com/think/news/entry-level-roles-get-reset-ai">investing in junior roles</a> and redefining what entry-level positions look like. Their approach focuses on a combination of human skills and AI collaboration, rather than replacing one with the other. It&#8217;s a promising direction, but it doesn&#8217;t immediately solve today&#8217;s challenges for developers.</p><p>Right now, the hiring process is still difficult. Passing ATS filters, dealing with outdated job descriptions, and going through demanding technical interviews often feel disconnected from real work. It&#8217;s a tough environment, and expectations are shifting faster than the processes themselves.</p><p>So what can be done? &#129300;</p><p>Modern problems require modern solutions. Tools like <a href="https://skills.sh/composiohq/awesome-claude-skills/tailored-resume-generator">tailored-resume-generator</a> are becoming part of the process, helping candidates better match job requirements and pass initial filters. It&#8217;s not ideal, but it reflects the reality of the current market.</p><p>For now, adaptability remains the key skill.</p><div><hr></div><p>Connect with the "Those Who Swift" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><h2>Sponsor &#129309;</h2><h3><a href="https://web2wave.com/?utm_source=thosewhoswift&amp;utm_medium=newsletter&amp;utm_campaign=sponsorship">Cut App Store Fees on Every Subscription You Sell!</a></h3><p>web2wave lets subscription mobile apps run web onboarding funnels &#8212; users complete a quiz, pay on the web, then download the app with an active subscription. No app store cut on those transactions.</p><ul><li><p>Build web2app funnels with a no-code quiz and paywall editor</p></li><li><p>Get paid in 1-2 days instead of waiting 30 days for app store payouts</p></li><li><p>Add A/B tests and cancellation flows without app releases</p></li><li><p>Restore attribution after ATT with full web-side tracking</p></li></ul><p>Works out of the box with Stripe, Paddle, PayPal, Primer, Unlimit, ChargebackHit, AppsFlyer, Adjust, RevenueCat, Adapty, and more.</p><p>Free to use until you launch paid traffic.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://web2wave.com/?utm_source=thosewhoswift&amp;utm_medium=newsletter&amp;utm_campaign=sponsorship&quot;,&quot;text&quot;:&quot;Try web2wave free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://web2wave.com/?utm_source=thosewhoswift&amp;utm_medium=newsletter&amp;utm_campaign=sponsorship"><span>Try web2wave free</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://livsycode.com/swift/copy-on-write-in-swift-semantics-misconceptions-and-a-custom-implementation/">Copy-On-Write In Swift: Semantics, Misconceptions, And A Custom Implementation</a></h3><p>Artem Mirzabekian explains why copy-on-write is really about preserving value semantics while avoiding unnecessary copies, not about structs being &#8220;magically cheap&#8221; by default. The most useful part is the practical angle: understanding storage sharing and uniqueness checks makes it easier to reason about Swift collections and build your own efficient COW types.</p><p><strong><a href="https://livsycode.com/swift/copy-on-write-in-swift-semantics-misconceptions-and-a-custom-implementation/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.sagarunagar.com/blog/swift-some-vs-any-opaque-existential-types/">Swift Some Vs Any: Understanding Opaque Types And Existential Types</a></h3><p>Sagar Unagar gives a clear mental model for one of Swift&#8217;s most confusing topics: <code>some</code> hides one concrete type, while <code>any</code> can hold many conforming types at runtime. The most useful part is the trade-off breakdown, showing why somekeeps compile-time optimizations while any adds flexibility with a small runtime cost.</p><p><strong><a href="https://www.sagarunagar.com/blog/swift-some-vs-any-opaque-existential-types/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://azamsharp.com/2026/03/16/swiftdata-icloud-sync-status.html">Apple Doesn&#8217;t Show SwiftData iCloud Sync Status &#8212; So Let&#8217;s Build One</a></h3><p>Muhammad Azam shows that SwiftData has no public API for sync progress, but Core Data&#8217;s CloudKit notifications can still power a useful status monitor. The most practical part is the small state-driven setup that surfaces uploading, downloading, success, and failure states in SwiftUI.</p><p><strong><a href="https://azamsharp.com/2026/03/16/swiftdata-icloud-sync-status.html">Read more.</a>&#128205;</strong></p><h3><a href="https://tanaschita.com/ios-string-catalogs-in-practice/">Working With String Catalogs In iOS Projects</a></h3><p>Natascha Fadeeva shows how String Catalogs reduce manual localization work by letting Xcode detect keys automatically and track states like new, stale, and needs review. One of the most useful tips is to rename keys inside the catalog editor, because Xcode can update code references while keeping existing translations intact.</p><p><strong><a href="https://tanaschita.com/ios-string-catalogs-in-practice/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://www.reuters.com/world/china/apple-cuts-china-app-store-commission-fees-after-government-pressure-2026-03-13/">Apple Lowers App Store Commission Rates In China</a></h3><p>Apple Developer Relations says App Store rates in mainland China will drop on March 15, 2026, with standard paid app and in-app purchase transactions moving from 30% to 25%, and qualifying reduced-rate transactions dropping from 15% to 12%. Developers do not need to accept the new terms to receive the lower rates, but they must agree by April 15, 2026 to keep full access to Apple developer resources.</p><p><strong><a href="https://www.reuters.com/world/china/apple-cuts-china-app-store-commission-fees-after-government-pressure-2026-03-13/">Read more.</a>&#128205;</strong></p><h3><a href="https://developer.apple.com/news/?id=yts4l6mh">Apple Developer Is Now On Bilibili And LinkedIn</a></h3><p>Apple says developers can now follow its official Apple Developer presence on bilibili and LinkedIn for news, announcements, videos, and event updates. The post also points to WWDC and Meet with Apple activities as part of that broader community feed.</p><p><strong><a href="https://developer.apple.com/news/?id=yts4l6mh">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://pastey.github.io/blog/2026-02-15-extensions/">Over-Extended Types On The Overuse Of Swift Extensions</a></h3><p>Pavlo Shkrabliuk argues that many Swift extensions quietly bloat APIs, blur module boundaries, and make refactoring harder than it first appears. His strongest point is simple: if a method would look wrong inside the original type, it probably does not belong in an extension either.</p><p><strong><a href="https://pastey.github.io/blog/2026-02-15-extensions/">Read more.</a>&#128205;</strong></p><h3><a href="https://adincebic.com/2026/03/15/how-to-fix-xcode-source.html">How To Fix Xcode Source Editor Extensions That Don&#8217;t Appear In The Editor Menu</a></h3><p>Adin &#262;ebi&#263; found that some Xcode source editor extensions fail to appear because XcodeKit.framework is not embedded in the extension target. His fix is simple: change the framework setting to <strong>Embed Without Signing</strong>, and use Xcode&#8217;s unified logs to spot the Xcode Extension does not incorporate XcodeKit clue.</p><p><strong><a href="https://adincebic.com/2026/03/15/how-to-fix-xcode-source.html">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://openai.com/index/introducing-gpt-5-4-mini-and-nano">Introducing GPT-5.4 Mini And Nano</a></h3><p>OpenAI says GPT-5.4 mini and nano bring faster, cheaper model options for coding, tool use, and subagent workflows, with mini running more than 2x faster than GPT-5 mini. The key practical detail is availability: mini is in the API, Codex, and ChatGPT, while nano is API-only and aimed at low-cost tasks like classification, extraction, ranking, and lightweight coding work.</p><p><strong><a href="https://openai.com/index/introducing-gpt-5-4-mini-and-nano">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://nerdyak.tech/development/2026/03/16/expand-animation-in-SwiftUI-List.html">Expanding Animations In SwiftUI Lists</a></h3><p>Pavel Zak shows why a normal expand/collapse view feels broken inside List, even when the same code animates fine in <code>VStack</code> or <code>LazyVStack</code>. His most useful fix is an Animatable container that measures header and content height, then drives the row size with a smooth 0-to-1 expansion value.</p><p><strong><a href="https://nerdyak.tech/development/2026/03/16/expand-animation-in-SwiftUI-List.html">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=_zmQnn7Ki1E&amp;t=28s">SwiftUI Under The Hood: What&#8217;s Really Happening When You Update View</a></h3><p>Karin Prater looks past SwiftUI&#8217;s &#8220;magic&#8221; and focuses on what happens after state changes like <code>@State</code> updates trigger UI refreshes. I could only verify the video from search previews, not the full transcript, so this summary is based on the available title and snippet.</p><p><strong><a href="https://www.youtube.com/watch?v=_zmQnn7Ki1E&amp;t=28s">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=sUZ6agowSew">Build A Searchable, Sortable SwiftUI List With An Index Scrubber</a></h3><p>Stewart Lynch shows how to make large SwiftUI lists easier to navigate by combining search, sorting, and an index scrubber. I could not access the full video page content, so this summary is based on the verified title and search snippet only.</p><p><strong><a href="https://www.youtube.com/watch?v=sUZ6agowSew">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/@iOSConfSG/videos">SGConf iOS Videos Are Now Available</a></h3><p>iOS Conf SG has published conference videos on its YouTube channel, making recent Apple development talks available to watch on demand. It is a useful catch-up source if you missed the January 21&#8211;23, 2026 event in Singapore or want to revisit sessions from speakers across Swift, SwiftUI, AI, design, and product work.</p><p><strong><a href="https://www.youtube.com/@iOSConfSG/videos">Watch here.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#127897;&#65039;</h2><h3><a href="https://mokacoding.com/blog/how-to-claude-code-voice-mode-iterm-permission/">Fix iTerm2 Microphone Permission For Claude Code Voice Mode</a></h3><p>Gio shares a quick workaround for macOS when iTerm2 does not appear in Microphone privacy settings. He resets the permission with <code>tccutil</code> and then triggers the prompt with a small Swift command that requests audio access.</p><p><strong><a href="https://mokacoding.com/blog/how-to-claude-code-voice-mode-iterm-permission/">Read more.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 257]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-257</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-257</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 11 Mar 2026 21:27:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>Today we published the <em><strong>18th</strong></em> issue of <em>Indie App Devs</em>.</p><p>Indie iOS developer Danijela Vrzan shares her tips on how to decide which features are worth adding to your app and which ones to leave out.</p><p>It&#8217;s a great issue, and <strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-18">you can read it here</a></strong>.&#128205;</p><p>But that&#8217;s not the main story. I connected with her on LinkedIn, and this is what our chat looked like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mctd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mctd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 424w, https://substackcdn.com/image/fetch/$s_!Mctd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 848w, https://substackcdn.com/image/fetch/$s_!Mctd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 1272w, https://substackcdn.com/image/fetch/$s_!Mctd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mctd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png" width="495" height="495.7674418604651" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1292,&quot;width&quot;:1290,&quot;resizeWidth&quot;:495,&quot;bytes&quot;:1328294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/189966841?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Mctd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 424w, https://substackcdn.com/image/fetch/$s_!Mctd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 848w, https://substackcdn.com/image/fetch/$s_!Mctd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 1272w, https://substackcdn.com/image/fetch/$s_!Mctd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cf7db75-a925-4731-bcd9-27fc8c1ec7c4_1290x1292.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve never properly introduced myself, so maybe now is a good time!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wJaj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wJaj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wJaj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wJaj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wJaj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wJaj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg" width="338" height="343.3392857142857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:338,&quot;bytes&quot;:834749,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/189966841?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wJaj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wJaj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wJaj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wJaj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9a7b7e-106f-4431-bd80-e07d9812ebf6_2999x3046.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Yep, it&#8217;s me! &#128075;</figcaption></figure></div><ul><li><p>My name is Justas, I&#8217;m from Lithuania &#127473;&#127481;</p></li><li><p>You can find me on <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">LinkedIn</a></strong></em> &amp; <em><strong><a href="https://x.com/JustasMarkus">X</a></strong></em>.</p></li><li><p>I help companies with SEO/LLMs.</p></li><li><p>I&#8217;m building my new micro-SaaS &#10145;&#65039; <strong><a href="https://carouselmaker.com">Carousel Maker</a></strong></p></li><li><p>I have a 2-year-old boss at home who controls everything. &#128118;</p></li><li><p>I like cars and movies. &#127950;&#65039;</p></li></ul><p>I run a few newsletters:</p><ul><li><p><em><strong><a href="https://iosdevtools.substack.com/">iOS Dev Tools newsletter</a></strong></em> with 7,100 subscribers;</p></li><li><p><em><strong><a href="https://thosewhoswift.substack.com/">Those Who Swift newsletter</a></strong></em> with 15,000 subscribers;</p></li><li><p><em><strong><a href="https://indieappdevs.substack.com/">Indie App devs</a></strong></em><strong><a href="https://indieappdevs.substack.com/"> newsletter</a></strong> with 1,750 subscribers;</p></li><li><p><em><strong><a href="https://insanelycooltools.substack.com/">Insanely Cool Tools newsletter</a></strong></em> with 20,000 subscribers.</p></li></ul><p>I make money with all of them, and together they generate around &#8364;50,000 in profit per year.</p><p>I share more about this in this article - <strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-15">How to Make Money With Newsletter?</a></strong></p><p>So, it&#8217;s nice to meet you, and thank you for your support and for reading the newsletters! &#128075;</p><div><hr></div><p>Connect with the "Those Who Swift" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2JMa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2JMa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!2JMa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!2JMa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!2JMa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2JMa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png" width="1200" height="50" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:50,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/189966841?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2JMa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 424w, https://substackcdn.com/image/fetch/$s_!2JMa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 848w, https://substackcdn.com/image/fetch/$s_!2JMa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 1272w, https://substackcdn.com/image/fetch/$s_!2JMa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb82bab2c-b7f0-4c65-aec1-f637fe4e691f_1200x50.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><a href="https://bitrise.io/whitepapers/level-up-your-ios-game-tips-for-speeding-up-your-continuous-integration?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_ebook_time-for-a-tuneup-ios_all_2025-07-28&amp;utm_content=newsletter-sponsorship-march">Speed Hacks for iOS Builds </a></h3><p>Get this <em><strong>FREE</strong></em> guide to cut CI time and boost reliability.</p><p>Learn caching strategies, parallel build tips, and modular architecture tactics to speed up iteration and keep iOS builds running smoothly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bitrise.io/whitepapers/level-up-your-ios-game-tips-for-speeding-up-your-continuous-integration?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_ebook_time-for-a-tuneup-ios_all_2025-07-28&amp;utm_content=newsletter-sponsorship-march&quot;,&quot;text&quot;:&quot;Free guide&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bitrise.io/whitepapers/level-up-your-ios-game-tips-for-speeding-up-your-continuous-integration?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_ebook_time-for-a-tuneup-ios_all_2025-07-28&amp;utm_content=newsletter-sponsorship-march"><span>Free guide</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://fatbobman.com/en/posts/why-i-am-still-thinking-about-core-data-in-2026/">Why I'm Still Thinking About Core Data In 2026</a></h3><p>Fatbobman examines why developers stick with Core Data, citing mature capabilities, existing projects, and its object graph design. He notes growing mismatches with modern Swift in expressiveness, concurrency, and type safety, and argues experience-based workarounds are unsustainable.</p><p><strong><a href="https://fatbobman.com/en/posts/why-i-am-still-thinking-about-core-data-in-2026/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swift.org/blog/building-privacy-first-analytics-with-swift/">Swift At Scale: Building The TelemetryDeck Analytics Service</a></h3><p>Daniel Jilg explains how his company built a privacy-first analytics platform handling 16 million monthly users entirely on Swift with Vapor. Swift's compiled nature, Codable protocol, and Xcode development delivered unexpected advantages: catching errors at compile time, preventing security vulnerabilities through type safety, and enabling rapid iteration without containers.</p><p><strong><a href="https://www.swift.org/blog/building-privacy-first-analytics-with-swift/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://appleboy.tech/articles/get-rid-of-your-swiftgen-dependency">Get Rid Of Your SwiftGen Dependency</a></h3><p>Asser Osama explains that Xcode's built-in symbol generation for String Catalogs and asset catalogs now eliminates the need for SwiftGen in many projects by automatically creating type-safe Swift symbols with full compiler validation.</p><p><strong><a href="https://appleboy.tech/articles/get-rid-of-your-swiftgen-dependency">Read more.</a>&#128205;</strong></p><h3><a href="https://serialcoder.dev/text-tutorials/swiftui/exploring-draw-effects-and-gradient-rendering-in-sf-symbols/">Exploring Draw Effects And Gradient Rendering In SF Symbols</a></h3><p>Gabriel Theodoropoulos explores new SF Symbols 7 features in iOS 26, including <code>drawOn</code> and <code>drawOff</code> effects that animate symbol appearance with three variations: whole symbol, by layer, or individually.</p><p><strong><a href="https://serialcoder.dev/text-tutorials/swiftui/exploring-draw-effects-and-gradient-rendering-in-sf-symbols/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://azamsharp.com/2026/03/04/mvvm-and-cost-of-old-patterns.html">MVVM and the Cost of Carrying Old Patterns Forward</a></h3><p>Mohammad Azam explains that while MVVM was a valuable pattern for WPF and earlier frameworks, applying it rigidly in SwiftUI often leads to unnecessary complexity because Apple designed SwiftUI for state and logic to live close to the view.</p><p><strong><a href="https://azamsharp.com/2026/03/04/mvvm-and-cost-of-old-patterns.html">Read more.</a>&#128205;</strong></p><h3><a href="https://tomwojcik.com/posts/2026-02-15/finding-the-right-amount-of-ai/">What AI Coding Costs You</a></h3><p>Tom Wojcik argues AI coding tools carry hidden costs: cognitive atrophy, loss of deep understanding, and a broken seniority pipeline. Citing a 2026 study where AI-assisted developers scored 17% lower on conceptual tests, he warns that reviewing AI code doesn't build hands-on intuition.</p><p><strong><a href="https://tomwojcik.com/posts/2026-02-15/finding-the-right-amount-of-ai/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://swiftrocks.com/how-my-software-engineering-workflow-has-changed-in-the-past-year">How My Software Engineering Workflow Has Changed In The Past Year</a></h3><p>Bruno Rocha describes how he does 95% of his work by prompting Claude, letting AI handle complex multi-codebase tasks alone at unprecedented speed. But he worries this efficiency removes the problem-solving joy and deep learning that drew him to engineering, and questions how future AI will train without human-made content.</p><p><strong><a href="https://swiftrocks.com/how-my-software-engineering-workflow-has-changed-in-the-past-year">Read more.</a>&#128205;</strong></p><h3><a href="https://openai.com/index/codex-security-now-in-research-preview/">Codex Security: Now In Research Preview</a></h3><p>OpenAI introduces Codex Security, an AI agent that finds complex vulnerabilities by understanding project context while reducing noise by over 84% and false positives by more than 50%. It helped discover and patch 14 CVEs in open-source projects like OpenSSH and Chromium, and is now available free for the next month to ChatGPT Enterprise, Business, and Edu customers.</p><p><strong><a href="https://openai.com/index/codex-security-now-in-research-preview/">Read more.</a>&#128205;</strong></p><h3><a href="https://openai.com/index/introducing-gpt-5-4/">GPT-5.4: Now Available</a></h3><p>OpenAI released GPT-5.4, its most capable model yet, integrating advanced coding with native computer use and 1M token context. It achieves 83% in knowledge work tests, surpasses humans in computer use benchmarks, and reduces token consumption by 47% through tool search.</p><p><strong><a href="https://openai.com/index/introducing-gpt-5-4/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.createwithswift.com/creating-overlays-on-a-map-in-a-swiftui-app-in-ios-26/">Creating Overlays On A Map In A SwiftUI App In iOS 26</a></h3><p>The article explains how to add polygon, polyline, and circle overlays to maps in SwiftUI by providing coordinates inside the map's content closure, with appearance customization via modifiers like <code>foregroundStyle</code> and <code>stroke</code>.</p><p><strong><a href="https://www.createwithswift.com/creating-overlays-on-a-map-in-a-swiftui-app-in-ios-26/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=0UaqjKb3QHM&amp;t=108s">CLAUDE.md for iOS Developers</a></h3><p>The video demonstrates how CLAUDE.md (a project root file read by Claude Code, Xcode's Claude Agent, and Codex) transforms AI coding by providing architecture and framework context before every task. It builds a production <code>CLAUDE.md</code> optimized for Swift and SwiftUI projects, showing how to build features using only agent prompts and share one file across multiple projects.</p><p><strong><a href="https://www.youtube.com/watch?v=0UaqjKb3QHM&amp;t=108s">Watch here.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Those Who Swift - Issue 256]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-256</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-256</guid><pubDate>Wed, 04 Mar 2026 20:30:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FQA8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ed0e7ea-c533-4c89-ac9b-f1bc72c616e2_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Weekly note &#9999;&#65039;</h2><p>The modern world shows that critical shifts no longer take months or even days. Sometimes they happen in minutes. Thanks to instant communication channels, reactions are immediate and consequences follow just as quickly.</p><p>A recent example: Anthropic <a href="https://www.bbc.com/news/articles/cvg3vlzzkqeo">publicly stated</a> that it will not allow broad usage of its models for military or large-scale surveillance purposes in the U.S. government. Leaving the ethical debate aside, especially considering that OpenAI has taken a different position. This move had an immediate market effect. The Claude app climbed to the <a href="https://www.theguardian.com/technology/2026/mar/02/claude-anthropic-ai-pentagon">top of the AI category</a> on the App Store. Even more interesting, Anthropic released a migration guide explaining how to switch from other AI chat tools to Claude. You can find more details in our AI section.</p><p>This raises an important question. We all know how critical backend redundancy is. Should we now think about AI tool redundancy as well? Diversity always intersects with security. Relying on a single provider, whether for infrastructure or AI, increasingly feels risky.</p><p>Apple is making its own moves in the backup space. <a href="https://support.apple.com/en-us/104984">Time Machine</a> will soon drop support for Time Capsules formatted with AFP (Apple Filing Protocol). Official support ends with macOS 27, expected in Fall 2026. AFP is being phased out in favor of SMBv2 and SMBv3 for network file sharing. The hardware itself was discontinued in 2018, and most units are already past their expected lifespan. While a Time Capsule can still function as a Wi-Fi router, it will no longer serve as a reliable backup target for newer macOS versions.</p><p>If you&#8217;re affected, alternatives include a fast external USB drive connected directly to your Mac, a NAS device such as Synology or QNAP that supports Time Machine over SMB, or a modern router with USB/NAS functionality. Cloud backup services like Backblaze or iCloud can also help, though they don&#8217;t replace the full-system snapshot model of Time Machine.</p><p>On iOS, we&#8217;ve long had Core Data as a built-in persistence solution, and now SwiftData continues to evolve that experience. As part of our collaboration, we&#8217;re sharing a SwiftData migration tip from Vlad Tretiak in this issue.</p><p>Stay safe, and more importantly, keep your data safe.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LHlW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LHlW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 424w, https://substackcdn.com/image/fetch/$s_!LHlW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 848w, https://substackcdn.com/image/fetch/$s_!LHlW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 1272w, https://substackcdn.com/image/fetch/$s_!LHlW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LHlW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif" width="528" height="658.68" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:998,&quot;width&quot;:800,&quot;resizeWidth&quot;:528,&quot;bytes&quot;:1060635,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thosewhoswift.substack.com/i/189224393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LHlW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 424w, https://substackcdn.com/image/fetch/$s_!LHlW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 848w, https://substackcdn.com/image/fetch/$s_!LHlW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 1272w, https://substackcdn.com/image/fetch/$s_!LHlW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c3dcae-e65b-4307-a33b-1581c9878dde_800x998.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>Connect with the "Those Who Swift" team - <em><strong><a href="https://www.linkedin.com/in/justasmarkus/">Justas Markus</a></strong></em> &amp; <em><strong><a href="https://www.linkedin.com/in/antongubarenko/">Anton Gubarenko</a></strong></em> &#128075;</p><div><hr></div><h2>Sponsor &#129309;</h2><h3>Forget about Ruby and Fastlane installation issues!</h3><p>Discover <a href="https://github.com/codemagic-ci-cd/cli-tools">Codemagic CLI tools</a> &#8212; the free, open-source Fastlane alternative for automating iOS builds, code signing and publishing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/codemagic-ci-cd/cli-tools&quot;,&quot;text&quot;:&quot;open GitHub&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/codemagic-ci-cd/cli-tools"><span>open GitHub</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://kylebrowning.com/posts/modularizing-swift-apps-with-spm/">Modularizing Swift Apps with Swift Package Manager</a></h3><p>Kyle Browning explains how to split a large iOS app into independent modules using Swift Package Manager. By separating features, shared utilities, and dependencies into packages, teams gain faster builds, clearer boundaries, and safer parallel development.</p><p><strong><a href="https://kylebrowning.com/posts/modularizing-swift-apps-with-spm/">Read more.</a>&#128205;</strong></p><h3><a href="https://fractal-dev.com/blog/ios-backend-security-part-1-request-signing-quantum-tls?lang=en">iOS Backend Security Series: Request Signing &amp; Quantum-Safe TLS</a></h3><p>This post explores strengthening iOS-to-backend security with request signing and quantum-resistant TLS. It explains how signed requests verify authenticity and integrity, and why preparing for post-quantum cryptography helps protect APIs against future attacks.</p><p><strong><a href="https://fractal-dev.com/blog/ios-backend-security-part-1-request-signing-quantum-tls?lang=en">Read more.</a>&#128205;</strong></p><h3><a href="https://forums.swift.org/t/announcing-swift-6-2-4/85050">Announcing Swift 6.2.4</a></h3><p>The Swift Org has released Swift 6.2.4, a patch update focused on quality and stability improvements across the language, standard library, and tooling, aimed at smoothing the developer experience.</p><p><strong><a href="https://forums.swift.org/t/announcing-swift-6-2-4/85050">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://www.sagarunagar.com/blog/geometry-in-swiftui/">Geometry in SwiftUI Explained</a></h3><p>Sagar Unagar breaks down how layout geometry works in SwiftUI, covering tools like <code>GeometryReader</code>, coordinate spaces, and size measurement. The article shows how to position views dynamically and build responsive layouts that adapt to screen size and container context.</p><p><strong><a href="https://www.sagarunagar.com/blog/geometry-in-swiftui/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/best-practices/nscache-in-swift-a-practical-guide/">NSCache in Swift</a></h3><p>Artem Mirzabekian shares how to use NSCache effectively in Swift to store temporary objects like images or data, avoid memory bloat, and improve app performance with simple caching patterns.</p><p><strong><a href="https://livsycode.com/best-practices/nscache-in-swift-a-practical-guide/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.scottberrevoets.com/2026/03/02/all-in-on-interface-builder-10-years-later/">All In on Interface Builder: 10 Years Later</a></h3><p>Scott Berrevoets reflects on a decade of using Interface Builder at scale, sharing lessons about maintainability, collaboration, and when visual tooling truly helps versus when it hinders productivity in Swift and UIKit projects.</p><p><strong><a href="https://www.scottberrevoets.com/2026/03/02/all-in-on-interface-builder-10-years-later/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://notepadexe.com/">Notepad.exe - A Notepad for Developers</a></h3><p>My friend Marcin Krzyzanowski, who many of you probably know, developed Notepad.exe. It&#8217;s a lightweight coding scratchpad for macOS, built for experiments, snippets, and rapid prototyping.</p><p>Open it, write your code, and run it - no project setup required.</p><p><strong><a href="https://notepadexe.com/">Read more.</a>&#128205;</strong></p><h3><a href="https://build.ms/2026/2/27/the-hidden-cost-of-communication/">The Hidden Cost of Communication</a></h3><p>In his article, Joe Fabisevich explains that large tech companies aren't simply overstaffed but are crippled by exponential communication costs that make alignment nearly impossible. He argues this sectoral shift toward smaller, more focused companies is accelerating with AI, leaving laid-off workers in a contracting job market.</p><p><strong><a href="https://build.ms/2026/2/27/the-hidden-cost-of-communication/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.amyworrall.com/blog/automating-mac-app-screenshots">Automating Mac App Screenshots</a></h3><p>Amy Worrall shows how to automate App Store screenshot creation for macOS apps using scripts and UI automation, reducing repetitive manual work. The approach enables consistent, reproducible marketing assets across updates while saving significant release time.</p><p><strong><a href="https://www.amyworrall.com/blog/automating-mac-app-screenshots">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://azamsharp.com/2026/02/26/developers-are-safe.html">Developers Are Safe&#8230; Thanks to Corporate Red Tape</a></h3><p>Mohammad Azam argues that despite rapid advances in AI coding tools, software developers aren&#8217;t being replaced: only their workflows are changing. The focus is shifting from writing every line of code to problem-solving, architecture, and validation, making human judgment and domain knowledge more valuable than ever.</p><p><strong><a href="https://azamsharp.com/2026/02/26/developers-are-safe.html">Read more.</a>&#128205;</strong></p><h3><a href="https://claude.com/import-memory">Importing Memory into Claude</a></h3><p>Claude&#8217;s memory import feature lets you upload documents and notes so the assistant can remember key context across conversations. It helps personalize responses and maintain continuity for ongoing projects, research, or workflows.</p><p><strong><a href="https://claude.com/import-memory">Read more.</a>&#128205;</strong></p><h3><a href="https://support.claude.com/en/articles/11101966-using-voice-mode">Using Voice Mode in Claude</a></h3><p>Claude&#8217;s Voice Mode lets you have fully spoken conversations with the assistant instead of typing. You can talk naturally and hear Claude&#8217;s responses, switch between text and voice in the same chat, and choose between hands-free listening or push-to-talk depending on your environment.</p><p><strong><a href="https://support.claude.com/en/articles/11101966-using-voice-mode">Read more.</a>&#128205;</strong></p><h3><a href="https://openai.com/index/gpt-5-3-instant/">GPT-5.3 Instant</a></h3><p>OpenAI has introduced GPT-5.3 Instant, an update to ChatGPT&#8217;s most widely used model designed to make everyday conversations smoother and more helpful. It improves response accuracy, provides richer web-context answers, reduces unnecessary refusals or disclaimers, and aims to keep interactions flowing naturally while cutting hallucinations and improving reliability.</p><p><strong><a href="https://openai.com/index/gpt-5-3-instant/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://whackylabs.com/swift/ios/uikit/dynamics/2026/03/02/juice-it-up-with-uikit-dynamics/">Juice It Up With UIKit Dynamics</a></h3><p>This tutorial from Whacky Labs shows how to add physics-based motion to your UIKit interfaces using UIKit Dynamics, making UI elements feel alive with gravity, collisions, springs, and other real-world behaviors for more engaging interactions.</p><p><strong><a href="https://whackylabs.com/swift/ios/uikit/dynamics/2026/03/02/juice-it-up-with-uikit-dynamics/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=x5wug2V1244">Staff Engineering in Mobile Teams: Myth vs Reality</a></h3><p>This Swift Academy Podcast episode explores the real role of a <strong>Staff iOS Engineer</strong> and how it differs from a Tech Lead or &#8220;Senior++&#8221;. With guest Firas Safa (GetYourGuide, former Yassir), the discussion covers expectations, leadership responsibilities, and the broader architectural and cross-team impact of the Staff position in mobile teams.</p><p><strong><a href="https://www.youtube.com/watch?v=x5wug2V1244">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=zEzIxdA8zLQ">Building a Reusable Network Manager in Swift</a></h3><p>This first video in a new series walks through creating a reusable NetworkManager for Swift and SwiftUI projects using async/await and URLSession. It focuses on designing a flexible, generic networking layer with proper HTTP validation, improved error handling, and configurable decoding strategies - so you can cleanly fetch and decode models without hard-coding assumptions.</p><p><strong><a href="https://www.youtube.com/watch?v=zEzIxdA8zLQ">Watch here.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>