<?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>Mon, 18 May 2026 04:35:52 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 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><item><title><![CDATA[Those Who Swift - Issue 255]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-255</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-255</guid><pubDate>Wed, 25 Feb 2026 22:05: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>Weekly note &#9999;&#65039;</h2><p>How safe is our data in the era of AI? &#129302;</p><p><a href="https://www.pcmag.com/news/meta-security-researchers-openclaw-ai-agent-accidentally-deleted-her-emails">Recent events suggest</a> we should be asking this question more often. Some agents and home-built automation systems are no longer just misinterpreting instructions &#8212; in certain cases they actively bypass them. Safeguards written into prompts or policy files are not always respected, and there have already been incidents where agents handled sensitive information, such as email data, in ways their creators never intended.</p><p>Many of us now maintain CLAUDE.md, CODEX.md, CURSOR.md, or AGENTS.md files, carefully defining rules and boundaries. We assume the model will stay inside those limits. Unfortunately, that assumption is fragile. Placing API keys, credentials, or internal configuration files anywhere accessible to an LLM (even if the repository itself is private or files in .gitignore) increases the risk surface. The danger isn&#8217;t only the tool you&#8217;re actively using. Models can be observed, logged, cached, or indirectly exposed.</p><p>There is also a broader issue. Some companies train their own systems through model distillation, using outputs from other AI services. <a href="https://www.nytimes.com/2026/02/23/technology/anthropic-chinese-startups-distillation.html?unlocked_article_code=1.OlA.K6da.1rb5xxt2Us9Q&amp;smid=url-share&amp;utm_source=tldrnewsletter">Reports have already identified </a>thousands of automated bots collecting responses from major models to build competing datasets. Providers are trying to track and block these violations, but the existence of such activity shows how easily information can propagate once exposed.</p><p>For now, the safest approach is still the traditional one: never place secrets in repositories, agent configuration files, prompts, or third-party integrations. Treat any system that can read your project as if it might eventually leak it. AI tools are powerful, but security practices must remain stronger than convenience.</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://livsycode.com/swiftui/why-your-observable-class-init-runs-multiple-times-in-swiftui/">Why Your @Observable Class init Runs Multiple Times in SwiftUI?</a></h3><p>Artem Mirzabekian article explains why SwiftUI may recreate <code>@Observable</code> objects repeatedly as views rebuild, causing init to run more than expected. It clarifies SwiftUI&#8217;s view lifecycle and shows how to stabilize instances using proper ownership patterns so state isn&#8217;t unintentionally reset.</p><p><strong><a href="https://livsycode.com/swiftui/why-your-observable-class-init-runs-multiple-times-in-swiftui/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swift.org/blog/swift-system-metrics-1.0-released/">Swift System Metrics 1.0 Released</a></h3><p>Swift System Metrics 1.0 introduces a stable package for collecting process-level metrics like CPU time, memory usage, and file descriptors across macOS and Linux. It integrates with Swift Metrics backends (e.g., Prometheus or OpenTelemetry) to help developers monitor performance, detect issues, and improve reliability in Swift services.</p><p><strong><a href="https://www.swift.org/blog/swift-system-metrics-1.0-released/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.massicotte.org/blog/testing-event-stream/">Testing Event Streams</a></h3><p>Matt Massicotte explains how to reliably test asynchronous event streams by controlling timing, expectations, and emitted values. The approach helps validate concurrency code and prevents flaky tests when working with async sequences and notifications.</p><p><strong><a href="https://www.massicotte.org/blog/testing-event-stream/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://tanaschita.com/testing-database-migrations/">Testing Database Migrations</a></h3><p>Natascha Fadeeva explains how to reliably test database migrations by seeding old schema versions, running migrations, and verifying data integrity. The guide helps prevent crashes and data loss when your app updates its persistence model.</p><p><strong><a href="https://tanaschita.com/testing-database-migrations/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.sagarunagar.com/blog/static-vs-dynamic-dispatch-swift/">Static vs Dynamic Dispatch in Swift</a></h3><p>Sagar Unagar explains the difference between static and dynamic dispatch in Swift, showing how the compiler chooses which implementation to call and how protocols, extensions, and classes affect performance. The article clarifies why static dispatch is faster and how understanding dispatch rules helps avoid subtle bugs and unexpected behavior.</p><p><strong><a href="https://www.sagarunagar.com/blog/static-vs-dynamic-dispatch-swift/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=f5zj08ey">Age Requirements for Apps in Multiple Regions</a></h3><p>Apple is introducing stricter age-verification rules: users in Australia, Brazil, and Singapore won&#8217;t be able to download 18+ apps unless confirmed as adults, with the App Store handling verification. Developers can use the Declared Age Range API and related tools to meet regional compliance and child-safety regulations.</p><p><strong><a href="https://developer.apple.com/news/?id=f5zj08ey">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://chriswu.com/posts/ai/museumshuffleai/">Claude Code Brought My App Back From the Dead</a></h3><p>Chris Wu shares how he revived his long-abandoned app after its museum API was deprecated by using an AI coding agent to migrate to a completely different API. The AI explored documentation, rewrote large portions of code, debugged issues, and restored functionality in hours instead of weeks: highlighting how developers are shifting from writing every line to supervising and validating AI-driven changes.</p><p><strong><a href="https://chriswu.com/posts/ai/museumshuffleai/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swiftdifferently.com/blog/swiftui/swiftui-animation-with-example">The 4-Step Process to Create SwiftUI Animations</a></h3><p>This tutorial introduces core SwiftUI animation concepts, showing how implicit and explicit animations work and how to apply them to state changes. Omar Elsayed shows a practical examples, to demonstrate creation of smooth transitions and interactive UI effects using SwiftUI&#8217;s built-in animation APIs.</p><p><strong><a href="https://www.swiftdifferently.com/blog/swiftui/swiftui-animation-with-example">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/">Gemini 3.1 Pro: A Smarter Model for Complex Tasks</a></h3><p>Google introduced Gemini 3.1 Pro, an upgraded AI model focused on advanced reasoning and complex problem-solving. Available via the Gemini API, Android Studio, and Vertex AI, it improves logic benchmarks and supports use cases like data synthesis, interactive design, and creative coding workflows.</p><p><strong><a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/">Read more.</a>&#128205;</strong></p><h3><a href="https://dewaniahmed.substack.com/p/ai-job-loss-isnt-the-scariest-part">AI Job Loss Isn&#8217;t the Scariest Part</a></h3><p>Dewan Ahmed argues the bigger shift from AI isn&#8217;t unemployment but the erosion of expertise and decision-making ownership. As tools automate more work, the real challenge becomes preserving critical thinking, responsibility, and meaningful skill in an AI-assisted world.</p><p><strong><a href="https://dewaniahmed.substack.com/p/ai-job-loss-isnt-the-scariest-part">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.createwithswift.com/creating-maps-in-swiftui-apps-with-mapkit/">Creating Maps in SwiftUI Apps With MapKit</a></h3><p>This tutorial introduces MapKit&#8217;s SwiftUI APIs, showing how to embed a Map view, manage regions and annotations, and react to user location. It demonstrates building interactive maps with markers and camera control to integrate real-world context directly into your app&#8217;s UI.</p><p><strong><a href="https://www.createwithswift.com/creating-maps-in-swiftui-apps-with-mapkit/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=t8NYLDB5Fg8">Swift Autoclosures - From First Principles to Smarter SwiftUI Validation</a></h3><p>This video from Stewart Lynch explains how Swift&#8217;s <code>@autoclosure</code> enables lazy evaluation, letting expressions run only when needed. You&#8217;ll build a generic lazy coalescing function and a SwiftUI validation pipeline that collects errors efficiently while avoiding unnecessary work.</p><p><strong><a href="https://www.youtube.com/watch?v=t8NYLDB5Fg8">Read more.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=sc6pvW6vQzA">How to build apps with AI: Xcode, Claude, Codex, and more!</a></h3><p>This awesome livestream by Paul Hudson explores how to develop apps using modern AI tools, from Xcode integrations to CLI assistants like Claude and Codex. It also covers agent files, skills, and complementary tools such as ChatGPT to enhance productivity and workflows.</p><p><strong><a href="https://www.youtube.com/watch?v=sc6pvW6vQzA">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 254]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-254</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-254</guid><pubDate>Wed, 18 Feb 2026 21:00:26 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 hiring process has become complicated. Even the biggest tech companies struggle with it, and candidates often need to take unusual steps to stand out.</p><p>Sometimes that means building something memorable (like a OpenClaw). Peter Steinberger <a href="https://steipete.me/posts/2026/openclaw">has joined the OpenAI team</a> to push the limits of AI agents, and according to his blog post, OpenClaw will remain open source. His next goal is to make the agent as accessible to users as possible.</p><p>At the same time, interviews are far from easy. You tailor your CV with AI to match a role, then an ATS and another AI filter it on the other side. During technical interviews you are either banned from using AI tools or heavily restricted. And then you read news like Spotify <a href="https://techcrunch.com/2026/02/12/spotify-says-its-best-developers-havent-written-a-line-of-code-since-december-thanks-to-ai/">stating that much of its code is now written by LLMs</a>. It&#8217;s an interesting decision, though hopefully more marketing than reality: without careful review, such tools would produce unpredictable and poorly managed code. In practice, developers still need to review, refine, and document everything until it becomes a maintainable codebase.</p><p>Maybe the lesson is to look at job searching from a different perspective. As <a href="https://www.linkedin.com/in/stanshel/">Stan Shelipov</a> suggests, instead of chasing individual vacancies, try finding the ecosystem where you want to belong. So he made a <a href="https://ioscompanies.notion.site">list of iOS Companies to track</a>.</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://artemnovichkov.com/blog/tracking-token-usage-in-foundation-models">Tracking Token Usage in Foundation Models</a></h3><p>Artem Novichkov shows how to monitor token usage when working with Apple&#8217;s Foundation Models, helping you understand prompt and response costs, debug unexpected behavior, and optimize model interactions for performance and efficiency.</p><p><strong><a href="https://artemnovichkov.com/blog/tracking-token-usage-in-foundation-models">Read more.</a>&#128205;</strong></p><h3><a href="https://www.sagarunagar.com/blog/copy-on-write-swift/">Copy-on-Write in Swift Explained</a></h3><p>Sagar Unagar breaks down Swift&#8217;s copy-on-write behavior, showing how value types like Array and String avoid unnecessary copies by sharing storage until a mutation occurs. The article clarifies performance implications and why structs can remain both safe and efficient in real apps.</p><p><strong><a href="https://www.sagarunagar.com/blog/copy-on-write-swift/">Read more.</a>&#128205;</strong></p><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-17">Adopting AI as an Indie Developer</a></h3><p>In this issue, Antoine van der Lee shares how indie developers can embrace agentic coding and AI tools to dramatically boost productivity. He discusses reducing context switching, giving agents more context, automating repetitive tasks, and building personal AI workflows that act like extra teammates</p><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-17">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://medium.com/@itsuki.enjoy/little-swiftui-tip-interact-with-app-store-635e9d80ecf9">Little SwiftUI Tip: Interact With the App Store</a></h3><p>This quick tip by Itsuki shows how to open and interact with App Store pages directly from SwiftUI: using system APIs to present app listings or reviews in-app, improving user flow without forcing a full context switch.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/little-swiftui-tip-interact-with-app-store-635e9d80ecf9">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/swiftui/building-a-toast-component-in-swiftui/">Building a Toast Component in SwiftUI</a></h3><p>This nice component by Artem Mirzabekian shows how to create a reusable toast notification in SwiftUI, handling presentation, auto-dismiss timing, and animations. He demonstrates a clean overlay approach so you can display temporary feedback messages without disrupting your app&#8217;s layout.</p><p><strong><a href="https://livsycode.com/swiftui/building-a-toast-component-in-swiftui/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=xgkk9w83">Get Ready with the Latest Beta Releases</a></h3><p>Apple has released new developer betas for <strong>iOS 26.4, iPadOS 26.4, macOS 26.4, tvOS 26.4, visionOS 26.4, and watchOS 26.4</strong>. Developers should test their apps and build with <strong>Xcode 26.4 beta</strong> to ensure compatibility with the updated SDKs.</p><p><strong><a href="https://developer.apple.com/news/?id=xgkk9w83">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://azamsharp.com/2026/02/14/if-you-are-not-versioning-your-swiftdata-schema.html">If You&#8217;re Not Versioning Your SwiftData Schema, You&#8217;re Gambling</a></h3><p>Mohammad Azam explains why SwiftData schema versioning is essential the moment your app stores real user data. Using VersionedSchema, SchemaMigrationPlan, and custom migration stages lets you safely evolve models, reshape existing records, and add constraints without crashes: turning data migrations into a deliberate part of your app&#8217;s architecture.</p><p><strong><a href="https://azamsharp.com/2026/02/14/if-you-are-not-versioning-your-swiftdata-schema.html">Read more.</a>&#128205;</strong></p><h3><a href="https://antongubarenko.substack.com/p/swiftui-foundations-build-great-apps">SwiftUI Foundations: Build Great Apps Q&amp;A</a></h3><p>Anton Gubarenko walks through key SwiftUI fundamentals Q&amp;A with best practices, focusing on architecture, state management, and performance to help developers create scalable, maintainable apps from the start.</p><p><strong><a href="https://antongubarenko.substack.com/p/swiftui-foundations-build-great-apps">Read more.</a>&#128205;</strong></p><h3><a href="https://nilcoalescing.com/blog/IsolateSwiftUIAnimationsToSpecificAttributes/">Isolate SwiftUI Animations to Specific Attributes</a></h3><p>Natalia Panferova explains how to limit SwiftUI animations to only the properties you intend, preventing unrelated layout changes from animating. By scoping animations to specific values, you keep transitions smooth and predictable while avoiding visual glitches.</p><p><strong><a href="https://nilcoalescing.com/blog/IsolateSwiftUIAnimationsToSpecificAttributes/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://anthropic.skilljar.com">Anthropic Learning Portal</a></h3><p>Anthropic Skilljar is the official training platform offering structured courses and tutorials on using Claude and building with Anthropic&#8217;s AI tools: covering prompting, safety concepts, and practical developer workflows for getting started quickly.</p><p><strong><a href="https://anthropic.skilljar.com">Read more.</a>&#128205;</strong></p><h3><a href="https://steipete.me/posts/2026/openclaw">OpenClaw, OpenAI and the future</a></h3><p>Peter Steinberger joins OpenAI as his tool hitting the likes. <strong>OpenClaw</strong>, an open-source tool designed to improve development workflows by automating repetitive project tasks and integrating with modern AI-assisted tooling.</p><p><strong><a href="https://steipete.me/posts/2026/openclaw">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@wesleymatlock/git-worktrees-agentic-ai-the-day-i-stopped-single-threading-my-brain-37f84c76d4fa">Git Worktrees + Agentic AI &#8212; Stop Single-Threading Your Brain</a></h3><p>Wesley Matlock explains how combining <strong>Git worktrees</strong> with AI coding agents enables parallel development workflows instead of one-task-at-a-time iteration. By splitting work into clearly bounded lanes and orchestrating multiple agents, developers shift from typing code to supervising execution: making architecture, decomposition, and scope control the new core skills.</p><p><strong><a href="https://medium.com/@wesleymatlock/git-worktrees-agentic-ai-the-day-i-stopped-single-threading-my-brain-37f84c76d4fa">Read more.</a>&#128205;</strong></p><h3><a href="https://blog.sentry.io/sentry-acquires-xcodebuildmcp/">Sentry Acquires XcodeBuildMCP</a></h3><p>Sentry has acquired <strong>XcodeBuildMCP</strong>, a tool that helps AI coding agents interact with Xcode builds and diagnostics. The move aims to improve debugging workflows by letting AI tools understand compiler errors and project state more directly, bringing smarter automation to iOS development.</p><p><strong><a href="https://blog.sentry.io/sentry-acquires-xcodebuildmcp/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://swiftandmemes.com/how-to-migrate-to-observable-without-breaking-your-app/">How to Migrate to @Observable Without Breaking Your App</a></h3><p>This guide walks through safely moving from <code>ObservableObject</code> and <code>@Published</code> to the new <code>@Observable</code> system, explaining incremental adoption, bridging old and new models, and avoiding update or lifecycle bugs so existing SwiftUI apps keep working during the transition. And all with memes!</p><p><strong><a href="https://swiftandmemes.com/how-to-migrate-to-observable-without-breaking-your-app/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.createwithswift.com/taking-first-steps-into-metal-shaders/">Taking First Steps Into Metal Shaders</a></h3><p>This beginner-friendly guide introduces Metal shaders in Swift, explaining how vertex and fragment shaders work and how to connect them to SwiftUI rendering. It walks through setting up a Metal pipeline and rendering custom graphics so you can start adding GPU-powered effects to your app.</p><p><strong><a href="https://www.createwithswift.com/taking-first-steps-into-metal-shaders/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=t9FRldfZ8vc">Sharing SwiftData Content Between Users</a></h3><p>Part two of this series shows how to export and import SwiftData data between app users. It covers presenting a UIKit share sheet from SwiftUI and handling incoming files with <code>onOpenURL</code>, decoding the data and safely importing records while avoiding duplicates.</p><p><strong><a href="https://www.youtube.com/watch?v=t9FRldfZ8vc">Watch more.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#129302;&#129475;&#128181;</h2><h3><a href="https://andonlabs.com/blog/opus-4-6-vending-bench">Opus 4.6 Vending Bench</a></h3><p>Andon Labs benchmarks <strong>Claude Opus 4.6</strong> on real coding tasks using their &#8220;vending machine&#8221; test suite, comparing reliability, autonomy, and error recovery against other models. The results highlight improvements in long-running agent workflows and show how modern LLMs are moving from code assistants toward autonomous engineering collaborators.</p><p><strong><a href="https://andonlabs.com/blog/opus-4-6-vending-bench">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 253]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-253</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-253</guid><pubDate>Wed, 11 Feb 2026 21:00: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>Last week Apple opened the <a href="https://developer.apple.com/news/?id=f0xw4t5r">Swift Student Challenge</a>, inviting anyone to submit Playground projects built with modern frameworks and techniques. Traditionally, this contest helps students stand out and get noticed among their peers.</p><p>This year, however, the context feels different. Participants are not only showcasing their skills but also competing with rapidly advancing AI tools. Spending huge amounts of time on outdated problems with outdated approaches is no longer practical.</p><p>At the same time, the industry itself is shifting. Fewer companies are offering clear internal growth paths, especially for entry-level roles. You can already hear whispers on forums that the current generation of developers might be the last to write most of their code manually (leaving legacy ecosystems like COBOL or Objective-C aside, of course).</p><p><strong>Two concerns appear repeatedly:</strong></p><p>First, AI is absorbing many tasks once reserved for junior developers, weakening the traditional path from junior to mid-level, then senior, and eventually lead or staff. The chain feels broken, and newcomers often have to leap over a gap instead of climbing a ladder. Second, the learning process itself is changing. It&#8217;s tempting to rely on AI chats: copy a ticket description, generate a branch, submit a PR. Developers learn <em><strong>how</strong></em> to do something but not <em><strong>why</strong></em> it works. Tools begin to matter more than understanding.</p><p>Second, your setup is becoming a core part of development. That&#8217;s one of the reasons why we launched a new series on <em>iOS Dev Tools</em> blog - <em><strong><a href="https://iosdev.tools/blog/dev-workspaces-natalia-panferova/">Dev Workspaces</a></strong>.</em> A series showing what experts and community leaders actually use in their daily work, from hardware to AI assistants. Our first guest is <a href="https://nilcoalescing.com">Natalia Panferova</a>, former Apple engineer and book author.</p><p>What can help a young and even an experienced developer? How can a single line of code increase your memory footprint by 10&#215;? Here&#8217;s a specific method that can significantly reduce memory usage:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yLW6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yLW6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 424w, https://substackcdn.com/image/fetch/$s_!yLW6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 848w, https://substackcdn.com/image/fetch/$s_!yLW6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 1272w, https://substackcdn.com/image/fetch/$s_!yLW6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yLW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif" width="566" height="703.9625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:995,&quot;width&quot;:800,&quot;resizeWidth&quot;:566,&quot;bytes&quot;:326850,&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/187074793?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.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_!yLW6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 424w, https://substackcdn.com/image/fetch/$s_!yLW6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 848w, https://substackcdn.com/image/fetch/$s_!yLW6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.gif 1272w, https://substackcdn.com/image/fetch/$s_!yLW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e03838-68a5-4a32-866c-fcc2b7281c81_800x995.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>Build Hub: your infrastructure upgrade for GitHub Actions</h3><p>Keep GitHub Actions for CI. Run on mobile-optimized build machines from Bitrise. No migration, no maintenance: just faster builds.<br><br>&#8226; M4 Pro Macs and granular Linux sizing (4-192 vCPU)<br>&#8226; Pre-configured stacks for iOS, Android, React Native, Flutter<br>&#8226; 30-50% faster builds vs GitHub Hosted Runners</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bitrise.io/platform/build-hub?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_misc_build-hub_all_2025-12-18&amp;utm_content=newsletter-sponsorship&quot;,&quot;text&quot;:&quot;Try Build Hub free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bitrise.io/platform/build-hub?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_misc_build-hub_all_2025-12-18&amp;utm_content=newsletter-sponsorship"><span>Try Build Hub free</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://fatbobman.com/en/posts/xcode-263-claude/">Xcode 26.3 + Claude Agent: Model Swapping, MCP, Skills, and Adaptive Configuration</a></h3><p>This deep dive shows how Xcode 26.3 natively integrates AI agents like Claude Code and Codex, enabling developers to use skills, commands, and MCP tools directly inside the IDE. The article also shares advanced tips such as model swapping, custom tool configuration, and environment-aware prompts to make agent-assisted development more reliable.</p><p><strong><a href="https://fatbobman.com/en/posts/xcode-263-claude/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/best-practices/container-based-dependency-injection/">Container-Based Dependency Injection</a></h3><p>Artem Mirzabekian article explains how to implement dependency injection using a container in SwiftUI, centralizing object creation and lifecycle management. It shows how a container improves testability, modularity, and preview setups compared to passing dependencies manually through view hierarchies.</p><p><strong><a href="https://livsycode.com/best-practices/container-based-dependency-injection/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://serialcoder.dev/text-tutorials/swiftui/morphing-sheets-out-of-buttons-in-swiftui/">Morphing Sheets Out of Buttons in SwiftUI</a></h3><p>Gabriel Theodoropoulos demonstrates how to create a smooth morphing transition where a button visually expands into a presented sheet in SwiftUI. By coordinating geometry, animation, and presentation state, you can achieve a more fluid and contextual sheet presentation instead of an abrupt modal appearance.</p><p><strong><a href="https://serialcoder.dev/text-tutorials/swiftui/morphing-sheets-out-of-buttons-in-swiftui/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@itsuki.enjoy/little-swiftui-tip-get-view-size-without-displaying-the-view-346225197828">Little SwiftUI Tip: Get View Size Without Displaying It</a></h3><p>Itsuki demonstrates a technique to measure a SwiftUI view&#8217;s size without rendering it onscreen by using layout tools like <code>GeometryReader</code> and background measurement this helps calculate layouts and precompute sizes while keeping the UI clean.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/little-swiftui-tip-get-view-size-without-displaying-the-view-346225197828">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=d75yllv4">App Review Guidelines Update</a></h3><p>Apple has clarified that apps featuring random or anonymous chat now fall under the <strong>1.2 User-Generated Content </strong>guideline. Developers must ensure proper moderation, reporting, and safety mechanisms to meet App Review requirements.</p><p><strong><a href="https://developer.apple.com/news/?id=d75yllv4">Read more.</a>&#128205;</strong></p><h3><a href="https://developer.apple.com/news/?id=f0xw4t5r">Swift Student Challenge Submissions Are Now Open</a></h3><p>Apple has opened submissions for the Swift Student Challenge, inviting students worldwide to submit app playgrounds by February 28. The free contest welcomes all skill levels and encourages creative projects that can be experienced in under three minutes using Swift Playgrounds or Xcode.</p><p><strong><a href="https://developer.apple.com/news/?id=f0xw4t5r">Read more.</a>&#128205;</strong></p><h3><a href="https://developer.apple.com/news/?id=ueeok6yw">Upcoming SDK Minimum Requirements</a></h3><p>Apple announced that starting April 28, 2026, all apps submitted to the App Store must be built with the iOS 26, iPadOS 26, tvOS 26, visionOS 26, and watchOS 26 SDKs or later, requiring developers to update their projects and toolchains to stay eligible for submission.</p><p><strong><a href="https://developer.apple.com/news/?id=ueeok6yw">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://tanaschita.com/swiftui-coordinators/">SwiftUI Coordinators</a></h3><p>Natascha Fadeeva explains how the Coordinator pattern can organize navigation and flow logic in SwiftUI apps, separating routing from views to keep code modular, testable, and easier to scale as screens grow.</p><p><strong><a href="https://tanaschita.com/swiftui-coordinators/">Read more.</a>&#128205;</strong></p><h3><a href="https://swiftdevjournal.com/posts/measure-app-launch-time/">Measure App Launch Time in iOS</a></h3><p>This guide explains how to measure and improve iOS app launch performance using tools like Xcode Instruments and os_signpost. It shows how to identify slow startup work and optimize initialization so your app becomes responsive faster.</p><p><strong><a href="https://swiftdevjournal.com/posts/measure-app-launch-time/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://www.swiftjectivec.com/agentic-coding-codex-claude-code-in-xcode/">Agentic Coding in Xcode 26.3 with Claude Code and Codex</a></h3><p>Jordan Morgan explores how Xcode 26.3 brings agent-driven development directly into the IDE, integrating tools like Codex and Claude Code. Using the Model Context Protocol, agents can work with projects, skills, and services, helping developers automate multi-step workflows and prototype ideas faster inside Xcode.</p><p><strong><a href="https://www.swiftjectivec.com/agentic-coding-codex-claude-code-in-xcode/">Read more.</a>&#128205;</strong></p><h3><a href="https://swiftwithmajid.com/2026/02/10/agentic-coding-in-xcode/">Agentic Coding in Xcode</a></h3><p>Another vision by Majid Jabrayilov about how Xcode 26.3 integrates AI coding agents like Codex and Claude Code directly into the IDE. With the Model Context Protocol, agents can access documentation, run previews, and reason about your codebase&#8212;turning Xcode into a collaborative development environment rather than just an editor.</p><p><strong><a href="https://swiftwithmajid.com/2026/02/10/agentic-coding-in-xcode/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://swiftdevjournal.com/posts/open-recent-menu/">Adding an Open Recent Menu in a macOS App</a></h3><p>This guide shows how to implement a standard <strong>Open Recent</strong> menu in a macOS app using NSDocumentController and menu configuration. It explains how macOS tracks recent files automatically and how to integrate the menu cleanly so your app behaves like a native document-based Mac application.</p><p><strong><a href="https://swiftdevjournal.com/posts/open-recent-menu/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=TPGn2pJjfis">Sharing SwiftData Between Users</a></h3><p>Stewart Lynch shows how to share SwiftData content between different users by exporting and importing data as JSON through the system share sheet. Using a sample app, it covers encoding relationships, avoiding duplicates on import, and registering a custom document type so shared files open directly in the app.</p><p><strong><a href="https://www.youtube.com/watch?v=TPGn2pJjfis">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=Z3vloOtZLkQ">SwiftUI Foundations: Build great apps with SwiftUI</a></h3><p>Apple is hosting a full-day SwiftUI learning event from the Cupertino Developer Center, featuring foundational sessions for both beginners and experienced developers. Hear how AllTrails uses SwiftUI in production and join a Q&amp;A with the SwiftUI engineering team to deepen your understanding and performance skills.</p><p><strong><a href="https://www.youtube.com/watch?v=Z3vloOtZLkQ">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 252]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-252</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-252</guid><pubDate>Wed, 04 Feb 2026 22:14: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>Weekly note &#9999;&#65039;</h2><p>This week, OpenAI finally unveiled its standalone coding tool: <a href="https://openai.com/index/introducing-the-codex-app/">the Codex app for macOS</a>. Feature-wise, it brings OpenAI into direct parity with existing competitors, putting the market into a truly competitive state. Pricing and core functionality are now largely comparable across major players, which means the real differentiators will be the depth of third-party integrations and the quality of the underlying models.</p><p>So what does this mean for Apple? Last year, Apple acquired the AlexSidebar tool, positioning it as one of the few assistants integrated directly into Xcode. Yet most advanced iOS development workflows involving MCPs or agents are still happening outside Xcode, usually via CLI tools or IDEs like Cursor or VS Code. This gap has increasingly pushed Xcode into the shadow of being perceived as outdated. And latest non-WWDC video in our Video section is showing it.</p><p>Apple has started adding features outside the WWDC cycle, likely to signal that active work is happening. We&#8217;re also seeing organizational changes: <a href="https://www.theguardian.com/technology/2025/dec/01/apple-ai-chief-john-giannandrea-steps-down">a major shift in AI leadership</a>, with renewed focus on Siri powered by Gemini. It&#8217;s unclear how much betting on a personal assistant will help Apple compete in the broader developer tooling race, but one thing is certain&#8212;change needs to happen quickly.</p><p>On the design side, there&#8217;s movement too. The creator behind Halide, Kino, and Orion <a href="https://www.theverge.com/tech/869926/apple-hires-sebastiaan-de-with-design-team-halide-lux">joining Apple&#8217;s Design Team</a>. Expectations are high. Still, in today&#8217;s landscape, announcing major software updates just once a year feels increasingly slow&#8212;especially when months pass between announcement, RC, and real availability.</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>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.youtube.com/watch?v=SuQGQ1vh9k0&amp;t=1s">How Apple Hooks Fifty Thousand Methods</a></h3><p>This video by Bryce Bostwick explores method swizzling in Objective-C and Swift &#8212; how it works, common use cases, and the risks it introduces (like unexpected behavior and maintenance challenges). It shows patterns for applying swizzling safely and when it&#8217;s better to avoid it entirely in modern code.</p><p><strong><a href="https://www.youtube.com/watch?v=SuQGQ1vh9k0&amp;t=1s">Watch here.</a>&#128205;</strong></p><h3><a href="https://kylebrowning.com/posts/tiered-caching-in-swift/">Tiered Caching in Swift</a></h3><p>Kyle Browning explains how to build a tiered caching system in Swift that layers fast in-memory caches with slower disk or network caches: improving performance and reliability by returning the best available result while keeping data fresh and fallback paths in place.</p><p><strong><a href="https://kylebrowning.com/posts/tiered-caching-in-swift/">Read more.</a>&#128205;</strong></p><h3><a href="https://open.substack.com/pub/captainswiftui/p/objectively-better-observably-trickier?utm_campaign=post-expanded-share&amp;utm_medium=post%20viewer">Objectively Better, Observably Trickier</a></h3><p>This post from Danny Bolella explores subtleties in <em>observable</em> state handling in SwiftUI, showing how different observation approaches affect view invalidation and performance. It highlights practical examples where small design choices lead to unexpected redraws or missed updates, helping developers make more predictable, efficient state models.</p><p><strong><a href="https://open.substack.com/pub/captainswiftui/p/objectively-better-observably-trickier?utm_campaign=post-expanded-share&amp;utm_medium=post%20viewer">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://www.swiftdifferently.com/blog/swiftui/swiftui-performance-article">The Secret to Buttery Smooth SwiftUI</a></h3><p>This article explains key SwiftUI performance principles and shows how to reduce unnecessary view updates using techniques: with false and optimal solution examples.</p><p><strong><a href="https://www.swiftdifferently.com/blog/swiftui/swiftui-performance-article">Read more.</a>&#128205;</strong></p><h3><a href="https://nonstrict.eu/blog/2026/designing-swift-errors-for-an-sdk/">Designing Swift Errors for an SDK</a></h3><p>Guide covers how to design error types in Swift SDKs for clarity and usability. It discusses creating meaningful, structured Error cases, using associated data effectively, and providing developers with clear debugging information without leaking implementation details.</p><p><strong><a href="https://nonstrict.eu/blog/2026/designing-swift-errors-for-an-sdk/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.createwithswift.com/branding-with-ai-superpowers-for-indie-creators/">Branding With AI Superpowers for Indie Creators</a></h3><p>This article explores how indie app makers can use AI tools to strengthen their branding by generating consistent visuals, tone, and messaging. It highlights practical ways to combine creativity with AI assistance to craft memorable identities without a big design team.</p><p><strong><a href="https://www.createwithswift.com/branding-with-ai-superpowers-for-indie-creators/">Read more.</a>&#128205;</strong></p><h3><a href="https://twocentstudios.com/2026/01/29/print-design-mindset/">Print Design Mindset to App Design Mindset</a></h3><p>This essay from Christopher Trott reflects on adopting a <em>print design mindset</em> in digital work: focusing on clarity, typography, and thoughtful layout as if preparing content for physical media. The author argues that designing with print principles can improve readability and visual hierarchy in apps and interfaces.</p><p><strong><a href="https://twocentstudios.com/2026/01/29/print-design-mindset/">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-15">How to Make Money With Newsletter?</a></h3><p>The owner of <em>Those Who Swift</em> and <em>Indie App Devs newsletters</em> is sharing tips on how to make money with newsletters. From choosing the right platform and growing your audience, to finding sponsors and even buying an existing newsletter if you don&#8217;t want to start from scratch.</p><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-15">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@itsuki.enjoy/swiftui-weather-app-copy-cat-with-weather-kit-6d3dfafbd1e4">SwiftUI Weather App Copy Cat With WeatherKit</a></h3><p>Itsuki walks through building a simple but powerful SwiftUI weather app using Apple&#8217;s WeatherKit, showing how to fetch and display current, hourly, and daily forecasts tied to a location. He also highlights setup steps, data expiration handling, and tips for presenting weather info cleanly in your app.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swiftui-weather-app-copy-cat-with-weather-kit-6d3dfafbd1e4">Read more.</a>&#128205;</strong></p><h3><a href="https://slicker.me/swift/swift-evolution.html">From Objective-C to Swift 6: What We Gained</a></h3><p>This guide walks through the Swift evolution process, explaining how proposals are drafted, reviewed, and accepted (and how changes to the language are shaped by community feedback and core team decisions). It&#8217;s a clear roadmap for anyone interested in contributing to or understanding Swift&#8217;s ongoing development.</p><p><strong><a href="https://slicker.me/swift/swift-evolution.html">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://openai.com/index/introducing-the-codex-app/">Introducing the Codex App</a></h3><p>OpenAI has launched the Codex app, a new tool designed to help developers write, edit, and understand code more efficiently using AI: blending intelligent completions with contextual assistance directly in your coding workflow.</p><p><strong><a href="https://openai.com/index/introducing-the-codex-app/">Read more.</a>&#128205;</strong></p><h3><a href="https://build.ms/2026/2/2/supporting-markdown-search-for-llms/">Supporting Markdown Search for LLMs</a></h3><p>Learn how to make your blog easier for AI models to search by serving Markdown versions of your content, which use far fewer tokens than full HTML and fit better into LLM context windows. It shows how to expose .md URLs and redirect LLM requests so tools like Claude Code and Codex can retrieve cleaner, lightweight content more efficiently.</p><p><strong><a href="https://build.ms/2026/2/2/supporting-markdown-search-for-llms/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@wesleymatlock/claude-code-plugins-for-ios-teams-automation-agents-and-guardrails-221a68eb57d5">Claude Code Plugins for iOS Teams, Automation Agents and Guardrails</a></h3><p>Wesley Matlock dives into how Claude Code plugins can enhance iOS development workflows by automating routine tasks, enforcing guardrails, and coordinating multi-step processes with AI agents tailored to team needs. He explores practical plugin patterns and examples that help teams build faster, safer, and more consistent apps.</p><p><strong><a href="https://medium.com/@wesleymatlock/claude-code-plugins-for-ios-teams-automation-agents-and-guardrails-221a68eb57d5">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://livsycode.com/swiftui/a-whatsapp-style-top-banner-for-ios-using-uiwindow/">A WhatsApp-Style Top Banner for iOS Using UIWindow</a></h3><p>Artem Mirzabekian kindly shows how to build a WhatsApp-style top notification banner in SwiftUI by presenting it in a separate UIWindow. The approach avoids layout conflicts, supports smooth animations, and keeps the banner independent from your main view hierarchy.</p><p><strong><a href="https://livsycode.com/swiftui/a-whatsapp-style-top-banner-for-ios-using-uiwindow/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://developer.apple.com/videos/play/tech-talks/111428/">Meet agentic coding in Xcode</a></h3><p>This Apple Tech Talk shows how Xcode 26.3 lets coding agents like OpenAI Codex and Claude Agent collaborate on multi-step tasks (building projects, running tests, and querying Apple docs) using the Model Context Protocol. You&#8217;ll learn how this integration streamlines agent-driven development workflows directly inside Xcode.</p><p><strong><a href="https://developer.apple.com/videos/play/tech-talks/111428/">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=O540BJGGpYw&amp;t=2s">Mastering DatePicker, MultiDatePicker, and ColorPicker in SwiftUI</a></h3><p>Stewart Lynch walks through SwiftUI&#8217;s picker essentials, covering DatePicker, MultiDatePicker, and ColorPicker with real-world patterns and pitfalls. You&#8217;ll learn how to handle ranges, styles, optional dates, multi-date selection, color persistence, and when to bridge to UIKit for full control.</p><p><strong><a href="https://www.youtube.com/watch?v=O540BJGGpYw&amp;t=2s">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 251]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-251</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-251</guid><pubDate>Wed, 28 Jan 2026 21:28: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>Weekly note &#9999;&#65039;</h2><p>Last week, Skip.tools <a href="https://skip.dev/blog/skip-is-free/">announced a major shift</a>: moving from paid licenses to <em><strong>FREE</strong></em> usage for its users! &#128640;</p><p>The community response was overwhelmingly positive, and more developers are now considering giving the tool a try. Skip is supported by Apple, and while it&#8217;s still looking for additional major sponsors and real-world app showcases, there&#8217;s little doubt it will remain relevant for quite some time.</p><p>Shortly after, Swift.org introduced another important step forward with the announcement of a new working group: <a href="https://www.swift.org/blog/announcing-windows-workgroup/">the Windows Group</a>. If you remember, Skip&#8217;s momentum around toolchain integration accelerated right after the Android Working Group was formed. This new group aims to make it easier to build and ship Windows apps with Swift, shape the language&#8217;s evolution in that direction, and define best practices for bridging and interoperability. Together, these working groups are shaping a vision of Swift as a more flexible and adaptable language across platforms.</p><p>Is this related to the fact that Swift no longer appears in the top 10 most popular languages this year, partly due to iOS market stagnation and a drop in vacancies?</p><p>Hard to say. Let&#8217;s leave that as an open question.</p><p>Meanwhile, as Swift expands beyond Apple platforms, Apple itself is <a href="https://www.macrumors.com/2026/01/23/more-app-store-ads-coming-soon/">rolling out changes to App Store search ads</a>. Ads will now blend more closely with regular app cards, losing the previously noticeable blue background. On some screens, two ads appear on the same page, which inevitably reduces visibility for smaller companies and indie developers unless they increase their ad budgets.</p><p>It&#8217;s easy to see why sorting and filtering remain limited: the longer users scroll, the more ads they encounter. That approach feels more typical of attention-driven websites than app marketplaces.</p><p>Fortunately, most apps are still discovered through browsing, search engines, Reddit, and social networks. Which makes one thing clear: staying connected with your audience and knowing where to promote your product matters more than ever.</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>How fast are your iOS builds?</h3><p>Compare your CI/CD to tens of millions of builds analyzed in the 2025 Mobile Insights report.</p><ul><li><p>Adopt new Xcode in ~4 weeks &#8594; App Store advantage vs. 19&#8211;21 weeks for most teams.</p></li><li><p>See how to add more checks without slowing down. Learn how top mobile teams speed up builds by 28%.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://bitrise.io/insights?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_report_mobile-insights_all_2025-10-28&amp;utm_content=newsletter-sponsorship&quot;,&quot;text&quot;:&quot;Download the free report (PDF)&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://bitrise.io/insights?utm_medium=paid_other&amp;utm_source=those%20who%20swift&amp;utm_campaign=all_report_mobile-insights_all_2025-10-28&amp;utm_content=newsletter-sponsorship"><span>Download the free report (PDF)</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://tanaschita.com/combine-operators-cheatsheet/">Combine Operators Cheat Sheet</a></h3><p>This cheat sheet by Natascha Fadeeva breaks down key Combine operators and how they transform data streams in Swift, making it easier to pick the right tools for filtering, mapping, timing, and combining publishers in reactive code.</p><p><strong><a href="https://tanaschita.com/combine-operators-cheatsheet/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swift.org/blog/improving-usability-of-c-libraries-in-swift/">Improving Usability of C Libraries in Swift</a></h3><p>The post outlines efforts to make C APIs feel more natural in Swift by refining Clang importer behavior, improving pointer handling, enhancing naming conventions, and reducing friction when bridging C libraries into Swift code.</p><p><strong><a href="https://www.swift.org/blog/improving-usability-of-c-libraries-in-swift/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swift.org/blog/announcing-windows-workgroup/">Announcing the Swift Windows Workgroup</a></h3><p>The Swift project has launched the Windows Workgroup, a community effort focused on improving Swift support on Windows: including better tooling, documentation, and libraries &#8212; with the goal of making Swift a first-class language on Microsoft platforms.</p><p><strong><a href="https://www.swift.org/blog/announcing-windows-workgroup/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://medium.com/@itsuki.enjoy/swiftui-alerting-with-nsalert-21bdc3a8e650">SwiftUI Alerting with NSAlert</a></h3><p>Itsuki shows how to present macOS-style alerts in SwiftUI by bridging to NSAlert, giving you more control over alert content and buttons than the built-in Alert view. You&#8217;ll learn how to configure and display native system dialogs while keeping your SwiftUI code clean.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swiftui-alerting-with-nsalert-21bdc3a8e650">Read more.</a>&#128205;</strong></p><h3><a href="https://artemnovichkov.com/blog/highlighting-code-blocks-in-markdown-with-swiftsyntax">Highlighting Code Blocks in Markdown with SwiftSyntax</a></h3><p>Artem Novichkov shows how to use SwiftSyntax to parse Swift source code and generate syntax-highlighted Markdown by annotating tokens with styles: enabling richly formatted code in static sites, blogs, and documentation.</p><p><strong><a href="https://artemnovichkov.com/blog/highlighting-code-blocks-in-markdown-with-swiftsyntax">Read more.</a>&#128205;</strong></p><h3><a href="https://www.fractal-dev.com/blog/swift-actors-pitfalls?lang=en">Swift Actors: Common Pitfalls and How to Avoid Them</a></h3><p>This article highlights common mistakes developers make when using Swift actors, including unintended serialization, deadlocks, and shared mutable state. It also shares practical patterns and best practices to help you write safer and more predictable concurrent code.</p><p><strong><a href="https://www.fractal-dev.com/blog/swift-actors-pitfalls?lang=en">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.sagarunagar.com/blog/app-wide-theming-swiftui/">App-Wide Theming in SwiftUI</a></h3><p>Sagar Unagar explains how to implement app-wide theming in SwiftUI by centralizing colors, typography, and spacing into reusable configurations, ensuring a consistent and easily maintainable UI across the app.</p><p><strong><a href="https://www.sagarunagar.com/blog/app-wide-theming-swiftui/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Books &#128218;</h2><h3><a href="https://anubhav52.gumroad.com/l/ios-memory">Understanding Memory in iOS</a></h3><p>This iOS memory management course by Anubhav covers key concepts like ARC, retain cycles, weak/unowned references, and real-world debugging techniques to help developers write safer, leak-free Swift code. It&#8217;s a practical resource for understanding how memory works under the hood and avoiding common pitfalls in iOS apps.</p><p><strong><a href="https://anubhav52.gumroad.com/l/ios-memory">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://writetodisk.com/liquid-glass-toast/">Liquid Glass Toast in SwiftUI</a></h3><p>This tutorial shows how to build Liquid Glass&#8211;style toast notifications in SwiftUI using modern visual effects and modifiers, matching the iOS 26 design language. </p><p><strong><a href="https://writetodisk.com/liquid-glass-toast/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/swiftui/reverse-masking-in-swiftui-using-blend-modes/">Reverse Masking in SwiftUI Using Blend Modes</a></h3><p>Artem Mirzabekian shows how to achieve <em>reverse masking</em> effects in SwiftUI by combining shapes with blend modes, letting you cut out or invert areas of a view for creative UI designs.</p><p><strong><a href="https://livsycode.com/swiftui/reverse-masking-in-swiftui-using-blend-modes/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://medium.com/@wesleymatlock/claude-code-hooks-turning-ai-suggestions-into-enforced-workflow-da51df4ea508">Claude Code Hooks: Turning AI Suggestions Into Enforced Workflow</a></h3><p>Wesley Matlock explains how to use Claude Code Hooks to integrate AI-generated suggestions directly into your development workflow, turning useful recommendations into enforced project conventions and automated code patterns. This helps teams adopt AI-assisted practices consistently while keeping codebases maintainable and predictable.</p><p><strong><a href="https://medium.com/@wesleymatlock/claude-code-hooks-turning-ai-suggestions-into-enforced-workflow-da51df4ea508">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.createwithswift.com/sharing-content-among-apps-using-appentity-and-transferable-protocol/">Sharing Content Among Apps Using AppEntity and Transferable Protocol</a></h3><p>This guide explains how to share structured content between apps in SwiftUI by defining types that conform to the Transferable protocol and using AppEntity to represent shareable items. You&#8217;ll learn how to make your data exportable, handle imports, and create a smooth cross-app transfer experience.</p><p><strong><a href="https://www.createwithswift.com/sharing-content-among-apps-using-appentity-and-transferable-protocol/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=_wpqggVJCYQ">SwiftUI Pickers Deep Dive</a></h3><p>Stewart Lynch explains how SwiftUI pickers work under the hood and why they break with non-unique data or poorly defined state. He shows why enums are the safest data source, when to use .tag, and how to apply different picker styles and modifiers to build stable, production-ready picker UIs.</p><p><strong><a href="https://www.youtube.com/watch?v=_wpqggVJCYQ">Read more.</a>&#128205;</strong></p><h3><a href="https://talk.objc.io/episodes/S01E476-solving-the-view-model-problem-part-1">Solving the View Model Problem (Part 1)</a></h3><p>This <em>Swift Talk</em> episode explores the challenges of creating and updating view models in SwiftUI and outlines a potential solution to make them more predictable and maintainable. It digs into how view state and lifecycle interplay with SwiftUI&#8217;s rendering model and what patterns can help you manage view models more effectively.</p><p><strong><a href="https://talk.objc.io/episodes/S01E476-solving-the-view-model-problem-part-1">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 250]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-250</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-250</guid><pubDate>Wed, 21 Jan 2026 21:15:51 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>It was an interesting week, packed with a mix of product updates.</p><p>Slowly but surely, <a href="https://openai.com/index/our-approach-to-advertising-and-expanding-access/">ChatGPT is starting to show ads</a>, likely to offset its growing costs (or maybe to pay for increasingly expensive RAM, who knows). Either way, it signals a familiar shift: AI tools are becoming services in the way we&#8217;ve all seen before.</p><p>Forums quickly filled with jokes. Vibe-coded apps shipping with ads. Code snippets shown partially, asking you to wait 60 seconds or watch a commercial to see the rest. As developers, we recognize this pattern well: launch a revolutionary product, make it free long enough for mass adoption, then introduce paid tiers or ads. </p><p>For OpenAI, it took longer than for most startups, but the arc is familiar. Have they reached peak user growth and entered the full monetization phase? Time will tell.</p><p>What&#8217;s already clear is that using AI tools is now a basic skill of modern life. Some adopt it gradually, bit by bit. Others jump in fully. Yet Xcode still lacks broad, first-class support for experimenting with AI tools beyond the basics. Even <a href="https://blog.google/company-news/inside-google/company-announcements/joint-statement-google-apple/">recent news around Gemini integration focuses solely on Siri</a>. Want to try new models, agent workflows, or deeper integrations? VSCode is often the first IDE that comes to mind because of its flexibility. It&#8217;s interesting how companies building supportive tools around AI, rather than AI itself, are gaining traction. As the saying goes: during a gold rush, sell shovels.</p><p>And change isn&#8217;t limited to AI. <a href="https://blog.cocoapods.org/CocoaPods-Specs-Repo/">CocoaPods announced a staged move toward read-only mode</a> by December, clearly signaling that Swift Package Manager is now mature enough to handle most dependency use cases. If you still have active Pods and missed the email, this is your reminder: it&#8217;s time to plan that migration.</p><p>Nothing stands still. Sometimes change comes slowly, sometimes all at once&#8212;but it always comes. One of the quieter yet important shifts we&#8217;re seeing is in Swift itself. Improvements like clearly typed throws are a great step forward for readability and safety. We&#8217;re glad to share and highlight these kinds of refinements, because they&#8217;re the ones that truly compound over 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_!5YDf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5YDf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 424w, https://substackcdn.com/image/fetch/$s_!5YDf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 848w, https://substackcdn.com/image/fetch/$s_!5YDf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 1272w, https://substackcdn.com/image/fetch/$s_!5YDf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5YDf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif" width="604" height="415.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:800,&quot;resizeWidth&quot;:604,&quot;bytes&quot;:1582007,&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/184542594?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.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_!5YDf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 424w, https://substackcdn.com/image/fetch/$s_!5YDf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 848w, https://substackcdn.com/image/fetch/$s_!5YDf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.gif 1272w, https://substackcdn.com/image/fetch/$s_!5YDf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe974a490-81ab-41cc-80ce-ffb1a6050c9f_800x550.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><a href="https://insertaffiliate.com/">Struggling to Market Your iOS or Android App? Try Affiliate Marketing</a></h3><p>Growing a mobile app<strong> is hard </strong>&#8212; especially when ads are expensive and user acquisition doesn&#8217;t convert because attribution breaks with in-app purchases and subscriptions.</p><p>Insert Affiliate lets iOS and Android apps grow through <strong>performance-based</strong> affiliate marketing that actually works <strong>with in-app purchases.</strong></p><p>Track referrals, attribute subscriptions, and reward creators and partners using a <strong>lightweight SDK</strong> built for modern mobile apps.</p><p>No web hacks. No broken attribution. A realistic way for <strong>indie devs and small teams</strong> to grow.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://insertaffiliate.com&quot;,&quot;text&quot;:&quot;See How It Works&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://insertaffiliate.com"><span>See How It Works</span></a></p><div><hr></div><h3><a href="https://skip.tools/blog/skip-is-free/">Skip Is Now Free and Open Source</a></h3><p>Skip.tools announces that Skip is now free to use, giving developers and creators access to its AI model capabilities without cost. The post highlights how this change lowers the barrier to entry for experimenting with and integrating Skip into projects, encouraging broader adoption and innovation.</p><p><strong><a href="https://skip.tools/blog/skip-is-free/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/the-swift-cooperative/creating-and-introducing-asyncsharedstream-3e9185317a5a">Creating and Introducing AsyncSharedStream</a></h3><p>Michael Long introduces AsyncSharedStream, a Swift Concurrency primitive that combines the async/await-friendly nature of AsyncStream with multicasting support. It shows how to use it for real-time updates and shared notifications in Swift apps.</p><p><strong><a href="https://medium.com/the-swift-cooperative/creating-and-introducing-asyncsharedstream-3e9185317a5a">Read more.</a>&#128205;</strong></p><h3><a href="https://fatbobman.com/en/posts/surviving-tvos/">Surviving tvOS Development</a></h3><p>This article walks through the unique challenges of building apps for <strong>tvOS</strong> &#8212; from focus engine quirks and remote control navigation to layout considerations and performance tuning &#8212; and offers practical strategies to make your Apple TV app feel polished and effortless.</p><p><strong><a href="https://fatbobman.com/en/posts/surviving-tvos/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://www.swiftdifferently.com/blog/swift/concurrency/modern-concurrency-and-legacy-code">Modern Concurrency and Legacy Code</a></h3><p>Omar Elsayed shows how to integrate Swift&#8217;s modern concurrency features (like <code>async/await</code>) into existing legacy codebases by wrapping older callback APIs, bridging completion handlers, and incrementally adopting Task-based patterns without massive rewrites.</p><p><strong><a href="https://www.swiftdifferently.com/blog/swift/concurrency/modern-concurrency-and-legacy-code">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swiftdifferently.com/blog/swiftui/creating-paging-scrollView">Creating a Paging ScrollView in SwiftUI</a></h3><p>And another one by Omar Elsayed. He explains how to implement a paging-style ScrollView in SwiftUI using the new scrollTargetBehavior and scrollTargetLayout APIs to snap content per page and control scroll alignment. You&#8217;ll learn patterns for smooth horizontal and vertical paging that behave predictably across device sizes. </p><p><strong><a href="https://www.swiftdifferently.com/blog/swiftui/creating-paging-scrollView">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://captainswiftui.substack.com/p/emptiness-in-swiftui">Emptiness in SwiftUI</a></h3><p>Danny Bolella explores how SwiftUI represents &#8220;nothing&#8221; with distinct tools: <code>EmptyView</code>, <code>EmptyModifier</code> and <code>ContentUnavailableView</code> for guiding users when data is absent. He highlights choosing the right tool so your UI handles empty states clearly rather than silently disappearing.</p><p><strong><a href="https://captainswiftui.substack.com/p/emptiness-in-swiftui">Read more.</a>&#128205;</strong></p><h3><a href="https://indieappdevs.substack.com/p/indie-app-devs-14">AI Won&#8217;t Replace You. Ignoring It Might.</a></h3><p>Indie developer Damjan Dabo talks about why 2026 is a turning point for software developers and shares his thoughts.</p><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-14">Read more.</a>&#128205;</strong></p><h3><a href="https://www.swiftjectivec.com/the-shift-using-ai-as-a-developer-advocate-and-engineer/">The Shift: Using AI as a Developer Advocate and Engineer</a></h3><p>Jordan Morgan explores how AI is transforming the roles of developer advocates and engineers by streamlining documentation, demos, and community engagement while also shaping how technical content and tools are created. It highlights practical ways AI can boost efficiency without replacing human expertise.</p><p><strong><a href="https://www.swiftjectivec.com/the-shift-using-ai-as-a-developer-advocate-and-engineer/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://chatgpt.com/translate/">ChatGPT Translate Arrived</a></h3><p>ChatGPT Translate is a web-based translation tool powered by ChatGPT that lets you quickly convert text between languages with natural, context-aware results. It&#8217;s designed for fast, conversational translations directly in your browser.</p><p><strong><a href="https://chatgpt.com/translate/">Read more.</a>&#128205;</strong></p><h3><a href="https://openai.com/index/our-approach-to-advertising-and-expanding-access/">ChatGPT Ads Also Here</a></h3><p>OpenAI plans to begin <em>testing advertising</em> within ChatGPT on the free and ChatGPT Go tiers in the U.S. as part of a push to broaden access to AI tools while keeping subscription tiers like Plus, Pro, Business, and Enterprise ad-free. Ads will be clearly labeled and separate from chatbot responses, won&#8217;t influence answers, and user conversation data will not be sold to advertisers: with controls for personalization and exclusions for minors and sensitive topics.</p><p><strong><a href="https://openai.com/index/our-approach-to-advertising-and-expanding-access/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://livsycode.com/best-practices/foundation-models-prompting-guide/">Foundation Models Prompting Guide</a></h3><p>This guide from Artem Mirzabekian shares practical best practices for writing effective prompts with foundation models, focusing on clarity, structured context, examples, and iterative refinement to get more reliable AI responses.</p><p><strong><a href="https://livsycode.com/best-practices/foundation-models-prompting-guide/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.createwithswift.com/crafting-document-based-apps-in-swiftui/">Crafting Document-Based Apps in SwiftUI</a></h3><p>Alfonso Tarallo walks through building document-based SwiftUI apps, showing how to use DocumentGroup, handle file creation and saving, and design a UI that adapts to open, edit, and close document workflows naturally.</p><p><strong><a href="https://www.createwithswift.com/crafting-document-based-apps-in-swiftui/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=Uso8T5xBidk">Why Do iOS Timers Stop When You Scroll?</a></h3><p>In his video Pedro Rojas explains why an iOS timer stops firing when you scroll a list by breaking down how the RunLoop works. You&#8217;ll learn how timers are scheduled, how scrolling switches RunLoop modes, and why this behavior is an intentional design choice, not a bug.</p><p><strong><a href="https://www.youtube.com/watch?v=Uso8T5xBidk">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=84HoS9W2tpw">Mastering Switch Statements in Swift</a></h3><p>Stewart Lynch shows why Swift&#8217;s switch is more than an if-else replacement, walking from basics to advanced pattern matching with ranges, tuples, optionals, and enums. The video applies these concepts in SwiftUI to drive view logic, gestures, theming, and animations with clearer and safer code.</p><p><strong><a href="https://www.youtube.com/watch?v=84HoS9W2tpw">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_!sMXW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sMXW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!sMXW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!sMXW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!sMXW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sMXW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png" width="1100" height="220" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66dc933e-477e-4e20-b266-0419da416f1f_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;:71847,&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/184542594?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_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_!sMXW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!sMXW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!sMXW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!sMXW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66dc933e-477e-4e20-b266-0419da416f1f_1100x220.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Mohammad Azam</strong> offers 20% off his new &#8220;<em><strong>SwiftUI Architecture</strong></em>&#8221; book.</p><p>This book offers a comprehensive book on SwiftUI architecture, covering best practices for structuring SwiftUI apps, managing state, navigation, and reusable components to help developers build scalable and maintainable applications.</p><p><strong><a href="https://azamsharp.school/swiftui-architecture-book.html">Download it HERE.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#128126;</h2><h3><a href="https://files.littlebird.com.au/ascii-sketch.html">ASCII Sketch</a></h3><p>Relict for some and nostalgia for others: ASCII drawings are still very remarkable and with this tool you can create them nice and fast.</p><p><strong><a href="https://files.littlebird.com.au/ascii-sketch.html">Draw 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 249]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-249</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-249</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 14 Jan 2026 20:52:59 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>It has already been half a month in 2026, and more and more interesting topics are emerging.</p><p>OpenAI has introduced a separate Health branch from its main models to better protect sensitive records, while Apple is making new attempts to revive interest in Siri by integrating Gemini models.</p><p>All of this and more is covered in this issue. Thanks for staying with us! &#10084;&#65039;</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>The Hidden Dangers of Mobile App Proliferation</h3><p>Discover how attackers abuse mobile apps.</p><p>Join Guardsquare on January 20th to learn practical defense strategies and secure your mobile ecosystem against proliferation risks.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.vpdae.com/redirect/60xe9o2rwdxcm82mm81ic1zrvln&quot;,&quot;text&quot;:&quot;Register now!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.vpdae.com/redirect/60xe9o2rwdxcm82mm81ic1zrvln"><span>Register now!</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://fatbobman.com/en/posts/running-swift-on-mcu/">Running Swift on Microcontrollers</a></h3><p>Andy Liu article about how to compile and run Swift on resource-constrained microcontrollers by targeting bare-metal ARM Cortex-M devices. Covering steps like setting up LLVM, linking with minimal runtimes, and handling system limitations so Swift code can execute on embedded hardware.</p><p><strong><a href="https://fatbobman.com/en/posts/running-swift-on-mcu/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@itsuki.enjoy/swiftui-report-device-activity-graphically-visually-73f4d76f5039">SwiftUI: Report Device Activity Visually</a></h3><p>This post shows how to visualize device activity (like motion or usage data) in SwiftUI using charts and animations. Making it easier to present sensor-driven insights in a graphical, user-friendly way.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swiftui-report-device-activity-graphically-visually-73f4d76f5039">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://www.sagarunagar.com/blog/xcode-file-templates-ios-development/">Xcode File Templates for iOS Development</a></h3><p>Sagar Unagar shows how to create and use custom Xcode file templates to speed up iOS development, reduce repetitive setup, and enforce consistent patterns across your team. You&#8217;ll learn where templates live, how to define placeholders and default content, and how to install them so they appear alongside built-in templates in Xcode.</p><p><strong><a href="https://www.sagarunagar.com/blog/xcode-file-templates-ios-development/">Read more.</a>&#128205;</strong></p><h3><a href="https://danielsaidi.com/blog/2026/01/10/detecting-text-in-images-with-the-vision-framework">Detecting Text in Images With the Vision Framework</a></h3><p>Daniel Saidi explains how to use Apple&#8217;s Vision framework to recognize and extract text from images, showing how to set up text detection requests, handle results, and integrate the output into your app&#8217;s UI.</p><p><strong><a href="https://danielsaidi.com/blog/2026/01/10/detecting-text-in-images-with-the-vision-framework">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/swift-student-challenge/">Swift Student Challenge 2026</a></h3><p>Apple is now accepting submissions for the Swift Student Challenge, an annual opportunity for students to showcase innovative Swift-based projects and earn recognition from Apple at WWDC. Developers can submit their entries online and compete for prizes and global visibility.</p><p><strong><a href="https://developer.apple.com/swift-student-challenge/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.theverge.com/ai-artificial-intelligence/860989/apple-google-gemini-siri-ai-deal-what-it-means">Apple Chooses Google Gemini for Siri AI</a></h3><p>Apple has announced a multi-year partnership with Google to use Google&#8217;s Gemini AI models and cloud tech to power advanced AI features including a more personalized Siri coming in 2026.</p><p><strong><a href="https://www.theverge.com/ai-artificial-intelligence/860989/apple-google-gemini-siri-ai-deal-what-it-means">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.createwithswift.com/understanding-gesture-hierarchy/">Understanding Gesture Hierarchy in SwiftUI</a></h3><p>Article by Create with Swift team explains how SwiftUI evaluates gestures, showing how gesture priority, simultaneous recognition, and the order of modifiers affect which gesture wins, helping you design intuitive and conflict-free interactions.</p><p><strong><a href="https://www.createwithswift.com/understanding-gesture-hierarchy/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Books &#128218;</h2><h3><a href="https://github.com/peterfriese/swift-book">Swift Programming Guide</a> (Free)</h3><p><em>Swift Book </em>(by Peter Friese) is a comprehensive, community-maintained guide to the Swift language hosted on GitHub, covering fundamentals, advanced topics, and practical examples to help both beginners and experienced developers deepen their Swift skills.</p><p><strong><a href="https://github.com/peterfriese/swift-book">Download here.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://www.fractal-dev.com/blog/mvvm-and-reducer-pattern?lang=en">MVVM and Reducer Pattern in Swift</a></h3><p>Rafal Dubiel compares the MVVM and Reducer architectural patterns for Swift apps, explaining how each structures state and logic, their pros and cons (like testability versus complexity), and how to choose or blend them to build maintainable codebases.</p><p><strong><a href="https://www.fractal-dev.com/blog/mvvm-and-reducer-pattern?lang=en">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/best-practices/the-anatomy-of-strong-teams-in-the-age-of-ai/">The Anatomy of Strong Teams in the Age of AI</a></h3><p>Artem Mirzabekian explains how high-performing teams adapt to AI by fostering psychological safety, setting clear goals, sharing ownership, and encouraging continuous learning so humans and AI tools amplify each other&#8217;s strengths.</p><p><strong><a href="https://livsycode.com/best-practices/the-anatomy-of-strong-teams-in-the-age-of-ai/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://openai.com/index/introducing-chatgpt-health/">Introducing ChatGPT Health</a></h3><p>OpenAI introduces ChatGPT Health, a health-focused experience that connects medical records and wellness apps to help users understand test results and prepare for doctor visits, with privacy safeguards in place.</p><p><strong><a href="https://openai.com/index/introducing-chatgpt-health/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.anthropic.com/news/healthcare-life-sciences?utm_source=newsletter.theresanaiforthat.com&amp;utm_medium=newsletter&amp;utm_campaign=meta-makes-nuclear-history&amp;_bhlid=38bb3f9c085605c8e8d60092d5eb7912ac47b036">Anthropic Expands AI Tools for Healthcare &amp; Life Sciences</a></h3><p>Anthropic has significantly expanded its AI offerings in healthcare and life sciences with products like Claude for Life Sciences: an AI platform that connects to scientific and medical research tools to accelerate tasks from literature review to clinical workflows.</p><p><strong><a href="https://www.anthropic.com/news/healthcare-life-sciences?utm_source=newsletter.theresanaiforthat.com&amp;utm_medium=newsletter&amp;utm_campaign=meta-makes-nuclear-history&amp;_bhlid=38bb3f9c085605c8e8d60092d5eb7912ac47b036">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://artemnovichkov.com/blog/rendering-markdown-in-swiftui">Rendering Markdown in SwiftUI</a></h3><p>Artem Novichkov explains how SwiftUI handles Markdown in Text and when to use AttributedString for more control. The post focuses on choosing the right approach to render formatted text cleanly, with fewer pitfalls and better customization.</p><p><strong><a href="https://artemnovichkov.com/blog/rendering-markdown-in-swiftui">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=z0GD03x3gc4&amp;t=1184s">Initializing Observable Classes</a></h3><p>This walkthrough by Stewart Lynch demystifies how observable classes behave in SwiftUI, including initialization timing, repeated initializers, view refreshes. As a recap of a great article made by <a href="https://nilcoalescing.com/blog/DefiningCustomStringInterpolationBehaviorInSwift/">Natalia Panferova</a>.</p><p><strong><a href="https://www.youtube.com/watch?v=z0GD03x3gc4&amp;t=1184s">Watch here.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230; &#129405;</h2><h3><a href="https://screen.vision">Share Your Screen with AI</a></h3><p>Screen Vision helps you share your screen with AI and get guided tours of your UI directly on your device, with privacy-focused handling that doesn&#8217;t store your screen data.</p><p><strong><a href="https://screen.vision">Try 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 248]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-248</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-248</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 07 Jan 2026 21:55: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>Weekly note &#9999;&#65039;</h2><p>Welcome to the first issue of 2026!</p><p>Almost a week has passed since the year began, and so far there haven&#8217;t been many major news or events to cover.</p><p>One of the biggest highlights is <a href="https://support.microsoft.com/en-us/office/the-microsoft-365-app-transition-to-the-microsoft-365-copilot-app-22eac811-08d6-4df3-92dd-77f193e354a5">Microsoft renaming Office 365 to the Copilot app</a>, signaling yet another push toward AI-first branding.</p><p>And when there&#8217;s not much news to share, there&#8217;s always room for something timeless. A good Swift Concurrency tip is never wasted&#8212;it&#8217;s always useful, always relevant, and often a refreshing reminder of best practices.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jG_r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jG_r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 424w, https://substackcdn.com/image/fetch/$s_!jG_r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 848w, https://substackcdn.com/image/fetch/$s_!jG_r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 1272w, https://substackcdn.com/image/fetch/$s_!jG_r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jG_r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif" width="560" height="659.4" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:800,&quot;resizeWidth&quot;:560,&quot;bytes&quot;:897490,&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/183216279?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.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_!jG_r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 424w, https://substackcdn.com/image/fetch/$s_!jG_r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 848w, https://substackcdn.com/image/fetch/$s_!jG_r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.gif 1272w, https://substackcdn.com/image/fetch/$s_!jG_r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf11dfd1-fdcc-4a9f-9619-d521bd56b746_800x942.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>Friends &#129309;</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W8Py!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W8Py!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 424w, https://substackcdn.com/image/fetch/$s_!W8Py!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 848w, https://substackcdn.com/image/fetch/$s_!W8Py!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!W8Py!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W8Py!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png" width="1456" height="723" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:723,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:970052,&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/183216279?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.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_!W8Py!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 424w, https://substackcdn.com/image/fetch/$s_!W8Py!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 848w, https://substackcdn.com/image/fetch/$s_!W8Py!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!W8Py!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F309006e1-46ce-4b58-95de-46d5ce77b8ec_2138x1062.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><h3><a href="https://www.ioskonf.mk/tickets/">iOSKonf26 - iOS Conference in the Balkans</a></h3><p>Three unforgettable days of learning and fun at the Philharmonic of Skopje in Macedonia, May 4-6.</p><p>This conference is organized by our newsletter friend and talented iOS developer - Monika Mateska.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.ioskonf.mk/tickets/&quot;,&quot;text&quot;:&quot;Grab your tickets &#127915;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.ioskonf.mk/tickets/"><span>Grab your tickets &#127915;</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://nshipster.com/replay/">Replay - Recording and Inspecting App Sessions</a></h3><p>Replay is a tool that lets you record, replay, and inspect iOS app UI sessions: capturing touches, animations, and view hierarchies so you can debug visual issues more effectively than with logs alone. It provides a timeline interface to step through interactions and uncover UI problems that are hard to diagnose otherwise.</p><p><strong><a href="https://nshipster.com/replay/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/swiftui/intercepting-swiftui-sheet-dismissal/">Intercepting SwiftUI Sheet Dismissal</a></h3><p>Artem Mirzabekian shows how to catch and handle sheet dismissal in SwiftUI using the state observing. Letting you confirm exits, save changes, or prevent accidental closure.</p><p><strong><a href="https://livsycode.com/swiftui/intercepting-swiftui-sheet-dismissal/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://swiftdevjournal.com/posts/sidebar-selection/">Sidebar Selection in SwiftUI</a></h3><p>This article explains how to manage and respond to sidebar selections in SwiftUI (using state bindings and NavigationSplitView) so your app can react when users pick different items in a sidebar layout.</p><p><strong><a href="https://swiftdevjournal.com/posts/sidebar-selection/">Read more.</a>&#128205;</strong></p><h3><a href="https://alexanderweiss.dev/blog/2025-12-30-adaptive-sheet-presentation-in-swiftui">Adaptive Sheet Presentation in SwiftUI</a></h3><p>Latest article from Alexander Wei&#223; shows how to create <em>adaptive sheet presentations</em> in SwiftUI that respond to device size and context, choosing the appropriate presentation style (like modal, popover, or full screen) automatically. It covers tools like presentationDetents, environment traits, and custom logic to make sheets feel natural across iPhone, iPad, and Mac apps.</p><p><strong><a href="https://alexanderweiss.dev/blog/2025-12-30-adaptive-sheet-presentation-in-swiftui">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://medium.com/@victorbaro/metalgraph-a-new-way-of-working-with-metal-shaders-for-swiftui-bed1cf1a2b81">MetalGraph: A New Way of Working With Metal Shaders for SwiftUI</a></h3><p>Victor Bar&#243; introduces MetalGraph, a framework that simplifies using Metal shaders in SwiftUI by letting you define GPU-driven visuals with a declarative graph-based API, reducing boilerplate and making complex rendering more approachable.</p><p><strong><a href="https://medium.com/@victorbaro/metalgraph-a-new-way-of-working-with-metal-shaders-for-swiftui-bed1cf1a2b81">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://newsletter.mobileengineer.io/p/mobile-engineers-youre-all-full-stack?r=g891u&amp;utm_campaign=post&amp;utm_medium=web&amp;triedRedirect=true">Mobile Engineers, You&#8217;re All Full-Stack</a></h3><p>In his latest issue Alex Bush argues that modern mobile engineers already operate as <em>full-stack developers</em>&#8212;handling UI, networking, persistence, and backend API decisions&#8212;and should embrace this responsibility by collaborating closely on API design, data contracts, and performance-oriented endpoints to deliver the best user experience.</p><p><strong><a href="https://newsletter.mobileengineer.io/p/mobile-engineers-youre-all-full-stack?r=g891u&amp;utm_campaign=post&amp;utm_medium=web&amp;triedRedirect=true">Read more.</a>&#128205;</strong></p><h3><a href="https://merowing.info/posts/the-age-of-micro-entrepreneurs/">The Age of Micro-Entrepreneurs</a></h3><p>Krzysztof Zab&#322;ocki explores how digital platforms have enabled a new class of <em>micro-entrepreneurs</em>: individuals building niche, often solo-run businesses that thrive on flexibility, community, and creative autonomy. It highlights the trade-offs between independence and instability, and suggests that success today depends on clarity of value, audience focus, and sustainable growth strategies.</p><p><strong><a href="https://merowing.info/posts/the-age-of-micro-entrepreneurs/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.amanjeet.me/discovering-ios-memory-leaks-iv-detecting-via-unit-tests/">Discovering iOS Memory Leaks IV: Detecting via Unit Tests</a></h3><p>Amanjeet Singh shows how to write unit tests that detect memory leaks in iOS apps by using weak references and XCTest expectations, helping catch retain cycles and cleanup issues before they reach production.</p><p><strong><a href="https://www.amanjeet.me/discovering-ios-memory-leaks-iv-detecting-via-unit-tests/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=zrqFczU1iFg">Mastering Preview Traits in SwiftUI</a></h3><p>Another deep-dive by Stewart Lynch shows how SwiftUI preview traits can turn previews into a powerful development sandbox. Learn to use built-in traits, create custom ones for dark mode and Dynamic Type, inject mocks, and fix common preview issues so previews support your workflow instead of slowing it down.</p><p><strong><a href="https://www.youtube.com/watch?v=zrqFczU1iFg">Watch here.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#129695;</h2><h3><a href="https://elementary.codes">Swift, in the browser </a></h3><p>Ever dreamed of deploying Swift on Web and run the code? Now you can with this WebAssembly-backed open-source tool.</p><p><strong><a href="https://elementary.codes">Try 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 247]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-247</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-247</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 31 Dec 2025 20:30:27 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 final issue of our newsletter is here, and as expected, it&#8217;s time to pause, reflect, and wrap up the highlights of the past year. iOS development continues to evolve every year, starting with WWDC and new Swift releases and extending to community-driven tools and projects that make our work more robust and stable.</p><p>In the previous issue, we already touched on one of the most discussed topics of the year: Liquid Glass. Whether you see it as a bold visual change or an uncomfortable shift, it clearly stirred the community. This time, let&#8217;s focus on other changes that shaped the ecosystem.</p><p>One of them is <strong><a href="https://github.com/swiftlang/swift-evolution/blob/main/visions/approachable-concurrency.md">Approachable Concurrency</a>.</strong> This new iteration of Swift&#8217;s concurrency model aims to make async code easier to understand, adopt, and migrate to, especially compared to last year&#8217;s experience. New Xcode settings allow developers to choose default isolation and Sendable behavior. Still, the topic gives many teams chills. It&#8217;s a strong step forward, but not without friction.</p><p>Another major moment was <strong><a href="https://www.swift.org/blog/nightly-swift-sdk-for-android/">Swift coming to Android</a></strong>. The Skip.tools team made a bold move toward writing multiplatform applications purely in Swift. There are limitations, of course, but compared to long-established solutions like Flutter or Kotlin Multiplatform, this is a serious attempt to reshape the mobile development landscape.</p><p><strong><a href="https://developer.apple.com/documentation/Xcode/writing-code-with-intelligence-in-xcode">AI integrations</a></strong> also became part of everyday development. Xcode gained built-in AI tools that require minimal setup, with support for ChatGPT, Claude, and custom model providers available out of the box in Xcode 26. While some predict a slowdown in AI hype, there&#8217;s no doubt AI is now embedded in both personal and professional workflows. Demand is so high that hardware prices for DDR and SSDs are reaching unprecedented levels. At the same time, model quality isn&#8217;t growing as fast as costs, and competition increasingly revolves around pricing and extra features rather than breakthroughs.</p><p>Finally, <strong>modular architecture</strong> gained even more traction. As tools, services, and MCPs multiply, architectures naturally become more complex. Modularization is one answer to that complexity and continues to grow in popularity, partly driven by Kotlin Multiplatform&#8217;s influence on iOS projects. Many job listings now explicitly require modular and multiplatform experience. Swift Package Manager has become the default choice for dependency management, with CocoaPods mostly appearing in legacy projects or libraries that haven&#8217;t yet migrated.</p><p>These are the changes that sparked the most discussion and reflection this year. We&#8217;d love to hear what resonated most with your experience. Feel free to leave a comment ).</p><p>Those Who Swift team wishes you a Happy New Year! &#127876;&#127879;</p><p>We&#8217;ll keep working to make next year&#8217;s content even more impactful than the highlights we&#8217;ve shared so far. &#129310;</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://appscreens.com/?via=tws">Create App Store screenshots in Minutes with AppScreens</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_!Vgkk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vgkk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 424w, https://substackcdn.com/image/fetch/$s_!Vgkk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 848w, https://substackcdn.com/image/fetch/$s_!Vgkk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 1272w, https://substackcdn.com/image/fetch/$s_!Vgkk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vgkk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1171013,&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/182556089?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.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_!Vgkk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 424w, https://substackcdn.com/image/fetch/$s_!Vgkk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 848w, https://substackcdn.com/image/fetch/$s_!Vgkk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.png 1272w, https://substackcdn.com/image/fetch/$s_!Vgkk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978a74d5-12a8-4511-86d0-699deb2cec36_3840x2160.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>Have you ever lost time resizing screenshots for every iPhone, iPad, or Apple Watch?</p><p>AppScreens solves that pain. &#9989;</p><p>You design once, then generate App Store compliant screenshots for every Apple device automatically. No Figma gymnastics, no manual exports, and direct uploads to App Store Connect.</p><p>Built by developers, trusted by over 100k app makers.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://appscreens.com/?via=tws&quot;,&quot;text&quot;:&quot;Create App Store Screenshots&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://appscreens.com/?via=tws"><span>Create App Store Screenshots</span></a></p><div><hr></div><h2>Swift Around the Web &#127760;</h2><h3><a href="https://livsycode.com/best-practices/explicit-dependency-injection/">Explicit Dependency Injection Best Practices</a></h3><p>This guide from Artem Mirzabekian explains how to use explicit dependency injection in Swift and SwiftUI to make code more modular, testable, and predictable &#8212; showing patterns that avoid hidden globals and improve maintainability.</p><p><strong><a href="https://livsycode.com/best-practices/explicit-dependency-injection/">Read more.</a>&#128205;</strong></p><h3><a href="https://www.sagarunagar.com/blog/swiftui-zoom-navigation-transitions/">SwiftUI Zoom Navigation Transitions</a></h3><p>This tutorial shows how to create smooth zoom-style navigation transitions in SwiftUI by animating scale and position between views during navigation, resulting in fluid, interactive screen changes.</p><p><strong><a href="https://www.sagarunagar.com/blog/swiftui-zoom-navigation-transitions/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://woodys-findings.com/posts/the-swift-predicate-error/">The Swift Predicate Error</a></h3><p>This post explores a subtle Swift bug related to Predicate evaluation where unexpected logic can slip through due to type inference or Boolean expression order and shows how to rewrite predicates so they behave predictably.</p><p><strong><a href="https://woodys-findings.com/posts/the-swift-predicate-error/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/gitconnected/swiftui-launch-app-with-side-button-d5ffe2439305">SwiftUI: Launch App With Side Button</a></h3><p>Article shows how to make your SwiftUI app respond when the <strong>side button</strong> is pressed - letting you trigger actions or UI changes when users interact with hardware buttons. It walks through detecting the press event and integrating it cleanly into your app logic.</p><p><strong><a href="https://medium.com/gitconnected/swiftui-launch-app-with-side-button-d5ffe2439305">Read more.</a>&#128205;</strong></p><h3><a href="https://antongubarenko.substack.com/p/swift-bits-override-color-scheme">Override Color Scheme</a></h3><p>Article shows how to override the system color scheme in UIKit/SwiftUI: letting you control light/dark mode at the view level for previews or specific UI flows, even when the app&#8217;s environment uses a different setting.</p><p><strong><a href="https://antongubarenko.substack.com/p/swift-bits-override-color-scheme">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=8jzbigf4">Update on Age Requirements for Apps Distributed in Texas</a></h3><p>Apple says a court has paused enforcement of Texas&#8217;s age-verification law (SB2420), which would have required app marketplaces and developers to verify ages and parental consent. Apple&#8217;s age-related APIs (like Declared Age Range and Significant Change) remain available for sandbox testing and can also support compliance with similar laws coming to Utah and Louisiana in 2026.</p><p><strong><a href="https://developer.apple.com/news/?id=8jzbigf4">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://swiftwithmajid.com/2025/10/15/introducing-jujutsu-vcs/">Introducing Jujutsu VCS</a></h3><p>Majid Jabrayilov introduces Jujutsu, a powerful version control system that offers advanced staging, intuitive commands, and efficient workflows&#8212;positioning it as a compelling alternative to Git for managing complex code histories and large projects.</p><p><strong><a href="https://swiftwithmajid.com/2025/10/15/introducing-jujutsu-vcs/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://manus.im/blog/manus-joins-meta-for-next-era-of-innovation">Manus Joins Meta for Next Era of Innovation</a></h3><p>Manus, a leading AI agent platform known for autonomous task execution, is joining Meta to accelerate the development and deployment of general-purpose agents at global scale. This strategic move aims to expand Manus&#8217;s reach across Meta&#8217;s products and bolster the company&#8217;s vision of reliable, real-world AI systems.</p><p><strong><a href="https://manus.im/blog/manus-joins-meta-for-next-era-of-innovation">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://azamsharp.com/2025/12/26/storekit-subscriptions-understanding-monetization-models.html">StoreKit Subscriptions: Understanding Monetization Models</a></h3><p>This post breaks down key <em>StoreKit</em> subscription strategies&#8212;freemium tiers, trial periods, and auto-renewal logic&#8212;focusing on how to choose models that improve retention, reduce churn, and grow revenue sustainably. It also highlights best practices for pricing, offer eligibility checks, and analytics you should track to optimize your monetization.</p><p><strong><a href="https://azamsharp.com/2025/12/26/storekit-subscriptions-understanding-monetization-models.html">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;</h2><h3><a href="https://fuckingapproachableswiftconcurrency.com/en/">F*** Approachable Swift Concurrency</a></h3><p>F*** Approachable Swift Concurrency is a free, web-based guide that breaks down Swift&#8217;s concurrency model into clear, friendly explanations: covering tasks, actors, structured concurrency, cancellation, and async/await patterns in a way that&#8217;s easy to follow for developers of all levels.</p><p><strong><a href="https://fuckingapproachableswiftconcurrency.com/en/">Read 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>