<?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>Tue, 14 Apr 2026 14:36:00 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 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><item><title><![CDATA[Those Who Swift - Issue 246]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-246</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-246</guid><dc:creator><![CDATA[Those Who Swift]]></dc:creator><pubDate>Wed, 24 Dec 2025 21:00:56 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><a href="https://developer.apple.com/documentation/TechnologyOverviews/liquid-glass">Liquid Glass</a> has been a hot topic for the last few months.</p><p>It arrived quickly, was partially adopted just as fast, and soon after, the lead designer behind it <a href="https://gizmodo.com/alan-dye-leaving-apple-for-meta-liquid-glass-visionos-2000695284">moved on to Meta</a>. Coincidence or not, these things rarely happen without a reason. It&#8217;s hard to imagine a similar scenario during the iMac redesign era, for example.</p><p>We&#8217;ve seen this pattern before, notably with <a href="https://www.swift.org/blog/swift-6.2-released/">Swift Concurrency</a>. Big ideas take time to settle, mature, and truly fit into daily workflows. The same may be true for UI and UX consistency going forward.</p><p>December brought its usual wave of updates, sometimes <a href="https://lapcatsoftware.com/articles/2025/12/4.html">forced overnight on iOS 16&#8211;18 devices</a>, reminding us once again how quickly the ecosystem evolves.</p><p>All of this points to a familiar lesson: adapt at your own pace. Don&#8217;t rush to install betas on critical devices, and give new technologies time to prove themselves.</p><p>As a small practical help, we&#8217;re sharing a <code>UIGlassEffectContainer</code> tip. &#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_!BiSd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BiSd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 424w, https://substackcdn.com/image/fetch/$s_!BiSd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 848w, https://substackcdn.com/image/fetch/$s_!BiSd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 1272w, https://substackcdn.com/image/fetch/$s_!BiSd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BiSd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif" width="550" height="357.9474342928661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:799,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:983489,&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/181962767?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.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_!BiSd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 424w, https://substackcdn.com/image/fetch/$s_!BiSd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 848w, https://substackcdn.com/image/fetch/$s_!BiSd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.gif 1272w, https://substackcdn.com/image/fetch/$s_!BiSd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a080b3f-dbeb-4a2b-b88f-7f8016adef22_799x520.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;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" 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/exploring-the-swift-sdk-for-android/">Exploring the Swift SDK for Android</a></h3><p>The official Swift SDK for Android lets you compile Swift code directly into native Android binaries with similar performance to C/C++, bundling a native runtime and standard libraries for Android targets. It opens the door for cross-platform development, enabling reuse of Swift logic and interoperability with Java/Kotlin in Android apps.</p><p><strong><a href="https://www.swift.org/blog/exploring-the-swift-sdk-for-android/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@itsuki.enjoy/swiftui-live-activity-broadcast-push-notifications-1fcf4418f87b">SwiftUI Live Activity Broadcast Push Notifications</a></h3><p>This article shows how to implement broadcast push notifications for Live Activities in SwiftUI&#8212;enabling updates to all users at once (e.g., event starts, score changes). It covers setting up notification payloads, matching activity states, and handling updates in your app for responsive, real-time experiences.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swiftui-live-activity-broadcast-push-notifications-1fcf4418f87b">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://livsycode.com/swiftui/stretchable-header-in-swiftui-for-vertical-and-horizontal-scrollview/">Stretchable Header in SwiftUI for Vertical &amp; Horizontal ScrollView</a></h3><p>This tutorial shows how to build a stretchable header in SwiftUI that expands or contracts based on scroll position&#8212;working for both vertical and horizontal scroll views and adding smooth, dynamic interaction to your UI.</p><p><strong><a href="https://livsycode.com/swiftui/stretchable-header-in-swiftui-for-vertical-and-horizontal-scrollview/">Read more.</a>&#128205;</strong></p><h3><a href="https://fatbobman.com/en/snippet/why-child-state-won-not-update-from-parent-in-swiftui/">Why Child State Won&#8217;t Update From Parent in SwiftUI</a></h3><p>This snippet explains a common SwiftUI issue where child view state doesn&#8217;t update when its parent changes &#8212; often due to value-type bindings or state isolation &#8212; and shows how using proper bindings or observable state can fix it for reactive UI updates.</p><p><strong><a href="https://fatbobman.com/en/snippet/why-child-state-won-not-update-from-parent-in-swiftui/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=074b3wzz">Changes to iOS in Japan</a></h3><p>To comply with Japan&#8217;s <em>Mobile Software Competition Act</em>, Apple is updating iOS to allow alternative app marketplaces and alternative in-app payment options &#8212; with new protections like notarisation requirements and safeguards for younger users. Developers must agree to the updated Apple Developer Program License Agreement by <strong>March 17, 2026</strong> to use these new distribution and payment options in Japan.</p><p><strong><a href="https://developer.apple.com/news/?id=074b3wzz">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://dimasw.com/blog/2025/12/21/responder-chain/">Understanding the Responder Chain in iOS</a></h3><p>This post breaks down the responder chain in UIKit&#8212;the sequence of objects that handle events like touches and actions&#8212;and explains how events travel from views up through view controllers and windows. It highlights practical tips for managing event handling and custom responders to build more predictable UI interactions in your apps.</p><p><strong><a href="https://dimasw.com/blog/2025/12/21/responder-chain/">Read more.</a>&#128205;</strong></p><h3><a href="https://newsletter.mobileengineer.io/p/pragmatic-backend-apis-for-mobile?r=g891u&amp;utm_campaign=post&amp;utm_medium=web&amp;triedRedirect=true">Pragmatic Backend APIs For Mobile Apps</a></h3><p>Alex Bush explains how mobile apps benefit from backend APIs tailored to mobile constraints &#8212; suggesting a blend of REST and RPC-style endpoints that return exactly the data a screen needs, reducing wasted requests and improving UX. He argues that mobile engineers should advocate for or help design these optimized API contracts rather than defaulting to generic backend services.</p><p><strong><a href="https://newsletter.mobileengineer.io/p/pragmatic-backend-apis-for-mobile?r=g891u&amp;utm_campaign=post&amp;utm_medium=web&amp;triedRedirect=true">Read more.</a>&#128205;</strong></p><h3><a href="https://twocentstudios.com/2025/12/19/you-are-a-frameworks-engineer-at-big-tech-corp/">You Are a Frameworks Engineer at Big Tech Corp</a></h3><p>This satirical post walks through a day in the life of a <em>frameworks engineer</em> at a big tech company, playfully highlighting design reviews, endless meetings, abstraction debates, and the ironies of modern software culture.</p><p><strong><a href="https://twocentstudios.com/2025/12/19/you-are-a-frameworks-engineer-at-big-tech-corp/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://blog.google/products/gemini/gemini-3-flash/">Google Announces Gemini 3 Flash</a></h3><p>Google launched Gemini 3 Flash, a fast, efficient version of its Gemini-3 AI model that blends high-end reasoning with low-latency performance and lower cost. It&#8217;s rolling out as the default model in the Gemini app, AI Mode in Search, and across developer platforms like Gemini API, Google Antigravity, and Vertex AI, helping build responsive, multimodal AI applications.</p><p><strong><a href="https://blog.google/products/gemini/gemini-3-flash/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.createwithswift.com/implementing-consumable-in-app-purchases-with-storekit-2/">Implementing Consumable In-App Purchases With StoreKit 2</a></h3><p>This guide shows how to add consumable IAPs in Swift using StoreKit 2, covering purchase requests, transaction verification, and delivering consumable content safely in your app.</p><p><strong><a href="https://www.createwithswift.com/implementing-consumable-in-app-purchases-with-storekit-2/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=bOFTLU3e5Ew">Adding Custom HTTP Headers to WebView in SwiftUI</a></h3><p>Stewart Lynch shows how to inject custom HTTP headers into a SwiftUI WebView on iOS 26, enabling secure access to protected or custom web content. He builds a reusable WebView component that accepts a URL and headers dictionary, making authenticated web requests clean and maintainable.</p><p><strong><a href="https://www.youtube.com/watch?v=bOFTLU3e5Ew">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 245]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-245</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-245</guid><pubDate>Wed, 17 Dec 2025 21:47:37 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>Working on a newsletter means working with people - developers, tech bloggers, indie developers, as well as YOU, the reader. &#129781;</p><p>Every issue, we try to include a variety of content so you can relate to it.</p><p>Some of you prefer long reads; others like to jump straight to videos. That&#8217;s why we continue to expand our categories and experiment with different formats.</p><p>This time we decided to partner with <em><a href="https://www.linkedin.com/in/theswiftvlad/">Vlad Tretiak</a></em> and asked him to create something unique for our community. He created a Foundation Models&#8217; cancellation behavior gif. You will see that cancellation doesn&#8217;t stop immediately for all response methods.</p><p>Thank you for your support. Likes &#10084;&#65039; and comments &#128172;.</p><p>More great content is coming your way, including posts like this one. You&#8217;ll be hearing more about this and other collaborations very soon across our social channels - so stay connected. &#129309;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vpDO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vpDO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 424w, https://substackcdn.com/image/fetch/$s_!vpDO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 848w, https://substackcdn.com/image/fetch/$s_!vpDO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 1272w, https://substackcdn.com/image/fetch/$s_!vpDO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vpDO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif" width="500" height="623.6111111111111" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1796,&quot;width&quot;:1440,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:524882,&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/181497624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.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_!vpDO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 424w, https://substackcdn.com/image/fetch/$s_!vpDO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 848w, https://substackcdn.com/image/fetch/$s_!vpDO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.gif 1272w, https://substackcdn.com/image/fetch/$s_!vpDO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaaa0e3f-c39c-44fe-955c-105af64cefc8_1440x1796.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://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_!ET-1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ET-1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 424w, https://substackcdn.com/image/fetch/$s_!ET-1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 848w, https://substackcdn.com/image/fetch/$s_!ET-1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 1272w, https://substackcdn.com/image/fetch/$s_!ET-1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ET-1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png" width="1270" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:543145,&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/181497624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.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_!ET-1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 424w, https://substackcdn.com/image/fetch/$s_!ET-1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 848w, https://substackcdn.com/image/fetch/$s_!ET-1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.png 1272w, https://substackcdn.com/image/fetch/$s_!ET-1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8de10d5-2333-4fc7-b137-30c464733dec_1270x760.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;:null}" data-component-name="ButtonCreateButton"><a class="button primary" 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://www.swift.org/blog/swift-configuration-1.0-released/">Swift Configuration 1.0 Released</a></h3><p>Swift Configuration 1.0 is now officially released, offering a stable, unified API for reading app and library configuration from layered sources like environment variables, JSON/YAML files, and more &#8212; reducing ad-hoc config parsing and duplication.</p><p><strong><a href="https://www.swift.org/blog/swift-configuration-1.0-released/">Read more.</a>&#128205;</strong></p><h3><a href="https://twocentstudios.com/2025/12/12/swiftui-group-still-considered-harmful/">SwiftUI Group Still(?) Considered Harmful</a></h3><p>Christopher Trott argues that SwiftUI&#8217;s Group can lead to ambiguous layouts, hidden performance costs, and unintended view identities, urging developers to favour clearer, more explicit container choices to avoid subtle bugs and improve maintainability.</p><p><strong><a href="https://twocentstudios.com/2025/12/12/swiftui-group-still-considered-harmful/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://fatbobman.com/en/posts/my-eight-years-with-cloudkit/">Eight Years with CloudKit</a></h3><p>The author reflects on nearly a decade of building apps with CloudKit, sharing lessons on schema design, data modelling, performance quirks, syncing strategies, and how the platform has evolved &#8212; offering practical wisdom for developers choosing or maintaining CloudKit-based infrastructure.</p><p><strong><a href="https://fatbobman.com/en/posts/my-eight-years-with-cloudkit/">Read more.</a>&#128205;</strong></p><h3><a href="https://levelup.gitconnected.com/swiftui-share-wi-fi-network-credentials-with-paired-accessories-30004a4bf8f9">SwiftUI: Share Wi-Fi Network Credentials With Paired Accessories</a></h3><p>This article explains how to securely share Wi-Fi credentials from a SwiftUI app to paired accessories using <code>UIAccesssoryConnectionService</code> and related APIs &#8212; enabling seamless setup experiences for connected hardware.</p><p><strong><a href="https://levelup.gitconnected.com/swiftui-share-wi-fi-network-credentials-with-paired-accessories-30004a4bf8f9">Read more.</a>&#128205;</strong></p><h3><a href="https://danijelavrzan.com/posts/2025/12/strings-localized-in-a-single-file/">Strings Localized in a Single File</a></h3><p>Danijela Vrzan shows how to centralize Swift string localization into one file using custom helpers and enums, making translations easier to manage, use uniformly across the app, and keep your codebase tidy without scattering <code>NSLocalizedString</code> calls.</p><p><strong><a href="https://danijelavrzan.com/posts/2025/12/strings-localized-in-a-single-file/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.createwithswift.com/the-power-of-ethics-in-mobile-design/">The Power of Ethics in Mobile Design</a></h3><p>This article explores how ethical design in mobile apps goes beyond usability to respect user dignity, privacy, and well-being &#8212; encouraging designers to consider impact, consent, and long-term trust when shaping interactions and features.</p><p><strong><a href="https://www.createwithswift.com/the-power-of-ethics-in-mobile-design/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Other cool stuff &#129520;</h2><h3><a href="https://elegantchaos.com/2025/12/12/navigation-pain.html">SwiftUI Navigation Pain</a></h3><p>Article explains the challenges of building a flexible, action-driven routing system with SwiftUI&#8217;s modern NavigationStack, highlighting how managing routes and abstracting navigation actions can become harder than expected. While NavigationPath and type-safe destinations help, achieving a reusable command-based pattern for navigation remains a design hurdle.</p><p><strong><a href="https://elegantchaos.com/2025/12/12/navigation-pain.html">Read more.</a>&#128205;</strong></p><h3><a href="https://www.massicotte.org/blog/non-sendable-first-design/">Non-Sendable-First Design</a></h3><p>Matt Massicotte advocates designing Swift concurrency APIs with non-Sendable-first safety &#8212; embracing value types and isolation boundaries up front to avoid hidden data races and runtime crashes, while clarifying where unsafe escapes are truly justified.<br><strong><a href="https://www.massicotte.org/blog/non-sendable-first-design/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://openai.com/index/gpt-5-2-for-science-and-math/">GPT-5.2 for Science and Math</a></h3><p>OpenAI introduces <strong>GPT-5.2</strong>, optimized for scientific reasoning and mathematics, with stronger performance in multi-step problem solving, symbolic reasoning, and research workflows across physics, chemistry, and math.</p><p><strong><a href="https://openai.com/index/gpt-5-2-for-science-and-math/">Read more.</a></strong></p><h3><a href="https://openai.com/index/new-chatgpt-images-is-here/">The New ChatGPT Images Is Here</a></h3><p>The new Images feature in ChatGPT makes creative and practical image creation easier and more intuitive, both inside the app and via the API.</p><p><strong><a href="https://openai.com/index/new-chatgpt-images-is-here/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://www.createwithswift.com/understanding-scenes-for-your-macos-app/">Understanding Scenes for Your macOS App</a></h3><p>This article explains how to structure macOS apps using <strong>scenes</strong>, covering window groups, commands, lifecycle events, and how scenes help manage multiple windows and document-based interfaces in SwiftUI.</p><p><strong><a href="https://www.createwithswift.com/understanding-scenes-for-your-macos-app/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@wesleymatlock/%EF%B8%8F-getting-started-with-weatherkit-in-swiftui-a450f0c99dc4">Getting Started with WeatherKit in SwiftUI</a></h3><p>Wesley Matlock walks through integrating <strong>WeatherKit</strong> into a SwiftUI app &#8212; from requesting permissions and fetching current conditions to displaying data in views and handling errors gracefully. This practical guide helps you surface real-time weather info with modern, type-safe APIs.</p><p><strong><a href="https://medium.com/@wesleymatlock/%EF%B8%8F-getting-started-with-weatherkit-in-swiftui-a450f0c99dc4">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Books &#128218;</h2><h3><a href="https://psimas.gumroad.com/l/swiftui?layout=discover&amp;recommended_by=search&amp;_gl=1*10g751b*_ga*ODYxNDkzMDQzLjE3NjU2NDU4NjM.*_ga_6LJN6D94N6*czE3NjU2NDU4NjIkbzEkZzAkdDE3NjU2NDU4NjIkajYwJGwwJGgw">Mastering SwiftUI &#8212; Free Guide</a></h3><p><em>&#8220;</em>Mastering SwiftUI<em>&#8220;</em> is a free downloadable guide by Pavlos Simas that walks through the core concepts and practical techniques of building apps with SwiftUI across Apple platforms &#8212; covering layouts, state management, navigation, data, animation, and more to help both beginners and experienced developers level up.</p><p><strong><a href="https://psimas.gumroad.com/l/swiftui?layout=discover&amp;recommended_by=search&amp;_gl=1*10g751b*_ga*ODYxNDkzMDQzLjE3NjU2NDU4NjM.*_ga_6LJN6D94N6*czE3NjU2NDU4NjIkbzEkZzAkdDE3NjU2NDU4NjIkajYwJGwwJGgw">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=PBMqJgtznn4">Smarter Lists, Labels, and Dictionary Grouping in SwiftUI</a></h3><p>This video by Stewart Lynch highlights subtle but powerful SwiftUI updates in iOS 26, focusing on Label, List, and Section. You&#8217;ll learn how new modifiers and grouping APIs make layouts cleaner, lists more customizable, and data easier to organize&#8212;without extra boilerplate.</p><p><strong><a href="https://www.youtube.com/watch?v=PBMqJgtznn4">Watch here.</a>&#128205;</strong></p><h3><a href="https://www.youtube.com/watch?v=-e8Ey6oTI24&amp;t=320s">Swift Protocols as Existential Types vs. Generic Constraints</a></h3><p>This video breaks down the two ways to use protocols in Swift&#8212;existential types and generic constraints&#8212;and why the choice has major performance implications. You&#8217;ll learn where the hidden runtime costs come from, when generics shine, and how to choose the right approach for faster, more efficient Swift code.</p><p><strong><a href="https://www.youtube.com/watch?v=-e8Ey6oTI24&amp;t=320s">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 244]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-244</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-244</guid><pubDate>Wed, 10 Dec 2025 21:30:39 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&#8217;s announcement from the Linux Foundation about the new <strong><a href="https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation">Agentic AI Foundation</a></strong> nicely contrasts with the recently unveiled White House &#8220;<strong>Genesis Mission&#8221;</strong>.</p><p>While Genesis is a top-down, government-driven effort focused on national infrastructure&#8212;data centers, energy grids, and large-scale scientific computation&#8212;the Linux Foundation approach is bottom-up. It&#8217;s about open standards, shared protocols, and practical building blocks that developers and companies can adopt today.</p><p>The Agentic AI Foundation aims to make autonomous AI agents interoperable and portable, rather than locked into proprietary platforms. Instead of massive centralized systems, it promotes collaboration through open governance, community-driven tools, and shared context protocols. This feels closer to how Linux itself reshaped infrastructure: quietly, gradually, but everywhere.</p><p>Together, these two initiatives show the split paths AI is taking&#8212;one driven by national strategy and infrastructure, the other by open ecosystems and developer needs. Different scales, different goals, but both point to the same direction: AI is no longer just a feature, it&#8217;s becoming foundational.</p><p>This may feel distant from mobile dev life now, but history shows infrastructure shifts eventually ripple downward. Agentic AI may influence tooling, backend automation, or cross-platform utilities &#8212; affecting how we build apps in a few years. It&#8217;s worth keeping a close eye on AAIF, because this might be one of those &#8220;before everyone else noticed&#8221; moments.</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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-3Vz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-3Vz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-3Vz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-3Vz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-3Vz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-3Vz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134539,&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/180779854?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.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_!-3Vz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-3Vz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-3Vz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-3Vz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c01e90d-d844-4532-8763-dc4915b7316a_1500x500.jpeg 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://appscreens.com/?via=tws">Create App Store Screenshots in Minutes</a></h3><p>AppScreens is an App Store screenshot generator, built to help app developers release their iOS app with professional App Store screenshots.</p><p>Create one responsive design, then instantly generate iPhone and iPad screenshots for every language. One-click upload to App Store Connect means no manual resizing, no messy exports, and faster releases.</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://www.hackingwithswift.com/articles/281/what-to-fix-in-ai-generated-swift-code">What to Fix in AI-Generated Swift Code</a></h3><p>This article by Paul Hudson walks through common pitfalls when using AI to generate Swift &#8212; covering issues like force-unwrapped optionals, missing error handling, poor code structure, and API misuse &#8212; and shows how to review and fix them for production-ready code.</p><p><strong><a href="https://www.hackingwithswift.com/articles/281/what-to-fix-in-ai-generated-swift-code">Read more.</a>&#128205;</strong></p><h3><a href="https://www.massicotte.org/blog/what-settings/">What Settings Should You Use for Swift Concurrency?</a></h3><p>The post outlines recommended project settings for Swift 6 to enable full concurrency support &#8212; including enabling Strict Concurrency Checking, using Swift 6 language mode, and opting into upcoming concurrency features for maximum safety and performance.</p><p><strong><a href="https://www.massicotte.org/blog/what-settings/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://calcopilot.app/blog/posts/swift-6-and-strict-concurrency/">Journey to Swift 6 and Strict Concurrency</a></h3><p>Irving Popovetsky recounts migrating a real iOS app to Swift 6, showing how strict concurrency exposed hidden data races and required careful, phased refactoring. The result is a safer, more predictable codebase&#8212;with lessons on actors, @MainActor, callbacks, and real-device testing.</p><p><strong><a href="https://calcopilot.app/blog/posts/swift-6-and-strict-concurrency/">Read more.</a>&#128205;</strong></p><h3><a href="https://swiftwithmajid.com/2025/12/09/monitoring-app-performance-with-metrickit/">Monitoring App Performance with MetricKit</a></h3><p>Majid Jabrayilov shows how to use Apple&#8217;s MetricKit framework to gather real-world telemetry&#8212;like CPU usage, memory spikes, and hang stats&#8212;from actual users. This enables you to identify worst-case performance issues and proactively fix problems you might never catch in testing.</p><p><strong><a href="https://swiftwithmajid.com/2025/12/09/monitoring-app-performance-with-metrickit/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/news/?id=y1bckxf8">New Requirements for Social Media Apps in Australia</a></h3><p>Starting December 10, 2025, Australian law requires social-media apps to block users under 16 from creating accounts (or deactivate existing ones). Developers targeting Australia must adopt age-verification and parental-consent flows, and can use Apple&#8217;s Declared Age Range API to adjust app behaviour accordingly.</p><p><strong><a href="https://developer.apple.com/news/?id=y1bckxf8">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.createwithswift.com/designing-with-people-creating-applications-for-reality/">Designing With People: Creating Applications for Reality</a></h3><p>This article argues for building apps grounded in real human needs and contexts &#8212; focusing on empathy, usability, and meaningful impact rather than features-for-features&#8217; sake. It emphasizes designing with people, not just designing for them.</p><p><strong><a href="https://www.createwithswift.com/designing-with-people-creating-applications-for-reality/">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-13">Which Indie Developers Should I Follow?</a></h3><p>In the latest issue of the <em>Indie App Devs</em> newsletter I curated a list of indie developers that every developer should follow. We have ASO experts, iOS instructors, and many more. Take a look, maybe you will find some new faces.</p><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-13">Read more.</a>&#128205;</strong></p><h3><a href="https://fatbobman.com/en/posts/watchos-development-pitfalls-and-practical-tips/">watchOS Development Pitfalls and Practical Tips</a></h3><p>This post outlines common pitfalls when building for watchOS&#8212;such as performance, UI limitations, and background tasks&#8212;and offers practical tips to avoid them and make your watchOS apps smoother and more reliable.</p><p><strong><a href="https://fatbobman.com/en/posts/watchos-development-pitfalls-and-practical-tips/">Read more.</a>&#128205;</strong></p><h3><a href="https://antongubarenko.substack.com/p/swiftui-charts-interactivity-part-1ed">SwiftUI Charts Interactivity &#8212; Part 2</a></h3><p>Tutorial explores how to add interactivity to charts in SwiftUI, including handling taps, gestures, and dynamic updates to make data visualizations more engaging and user-friendly and with interpolation in this part.</p><p><strong><a href="https://antongubarenko.substack.com/p/swiftui-charts-interactivity-part-1ed">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://mistral.ai/news/devstral-2-vibe-cli">Devstral 2 &amp; Mistral Vibe CLI Released</a></h3><p>Mistral AI launched Devstral 2 &#8212; a powerful 123B-parameter open-source coding model (and a 24B &#8220;Small&#8221; variant) &#8212; alongside Mistral Vibe CLI, a new command-line tool for AI-driven &#8220;vibe-coding.&#8221;</p><p><strong><a href="https://mistral.ai/news/devstral-2-vibe-cli">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://medium.com/@itsuki.enjoy/swiftui-supporting-apple-pay-bbd61fc08d5c">SwiftUI: Supporting Apple Pay</a></h3><p>This guide walks you through enabling Apple Pay in a SwiftUI app &#8212; setting up merchant IDs and certificates, configuring Xcode, creating PKPaymentRequests, adding a PayWithApplePayButton, and handling payment authorization &#8212; including common pitfalls and how to avoid them.</p><p><strong><a href="https://medium.com/@itsuki.enjoy/swiftui-supporting-apple-pay-bbd61fc08d5c">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Freebies &#128091; </h2><h3><a href="https://www.bigmountainstudio.com/free-swiftui-book">SwiftUI Book &#8212; Big Mountain Studio</a></h3><p>Big Mountain Studio offers a free &#8220;SwiftUI Views Quick Start&#8221; picture-book: a visual, example-rich guide with 200+ pages and 150+ screenshots to help you learn and reference SwiftUI fast &#8212; ideal for beginners and those who prefer learning by sight over dense code.</p><p><strong><a href="https://www.bigmountainstudio.com/free-swiftui-book">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=UUvgm9-yltE">Finishing the Rich Notes App in SwiftUI</a></h3><p>The final video in the Rich Notes series by Stewart Lynch adds categories, sorting, and filtering to a SwiftUI + SwiftData notes app&#8212;along with UI improvements like a line-limit slider, timestamps, and category colors. By the end, you&#8217;ll have a complete, fully customizable rich notes experience.</p><p><strong><a href="https://www.youtube.com/watch?v=UUvgm9-yltE">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 243]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-243</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-243</guid><pubDate>Wed, 03 Dec 2025 22:14: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>This week brought several important updates in the AI world. OpenAI issued a notice about a <a href="https://openai.com/index/mixpanel-incident/">data breach</a> involving one of its partners: Mixpanel. For those unfamiliar, Mixpanel is a major analytics provider used widely across the industry, including by OpenAI&#8217;s platform. Fortunately, no direct AI-related data was exposed &#8212; no chats, no requests, no attachments.</p><p>Still, OpenAI is urging users to stay alert, especially when it comes to spam and phishing attempts. The company emphasized that it <strong>never</strong> asks for passwords or personal information via email. And this incident raises a broader security question: how much trust should we place in third-party services that handle or process parts of our data?</p><p>It&#8217;s a reminder that even analytics data can be sensitive. Mixpanel doesn&#8217;t store generated content or user requests, which limits the damage &#8212; but it&#8217;s still a wake-up call. Avoid tagging, storing, or linking user-generated data outside your own security boundary. If major companies can experience leaks, smaller ones are certainly not immune.</p><p>This brings us to another significant development: Apple&#8217;s senior vice president responsible for its overall AI strategy has stepped down. His responsibilities will now be divided between leaders overseeing software engineering, services, and operations. Meanwhile, Amar Subramanya &#8212; previously involved in developing Google&#8217;s Gemini chatbot &#8212; will join Apple as vice president of AI.</p><p>This restructuring signals a new phase for Apple&#8217;s AI efforts, which have clearly fallen behind the broader industry. AI coding assistants are already becoming standard tools for developers, not optional add-ons. It&#8217;s no longer about choosing a flavor &#8212; AI has become an essential part of the workflow.</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><p>AppScreens is an App Store screenshot generator, built to help app developers release their iOS app with professional App Store screenshots. Create one responsive design, then instantly generate iPhone and iPad screenshots for every language. One-click upload to App Store Connect means no manual resizing, no messy exports, and faster releases.</p><p>Key features:</p><ul><li><p>Generate all Apple App store and Google Play screenshots</p></li><li><p>One-click upload to App Store Connect</p></li><li><p>Localization for every language, without rebuilding designs</p></li><li><p>Advanced customization and design.</p></li></ul><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;:null}" data-component-name="ButtonCreateButton"><a class="button primary" 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://nilcoalescing.com/blog/InitializingObservableClassesWithinTheSwiftUIHierarchy/">Initializing Observable Classes Within the SwiftUI Hierarchy</a></h3><p>Natalia Panferova explains how to properly initialize @Observable-annotated classes inside the SwiftUI view hierarchy to ensure they work correctly with environment injection and view updates &#8212; covering pitfalls and best practices when mixing SwiftUI state and shared models.<br><strong><a href="https://nilcoalescing.com/blog/InitializingObservableClassesWithinTheSwiftUIHierarchy/">Read more.</a>&#128205;</strong></p><h3><a href="https://medium.com/@wesleymatlock/building-the-pit-a-metallica-themed-physics-playground-in-visionos-47cc58125ae6">A Metallica-Themed Physics Playground in visionOS</a></h3><p>Wesley Matlock walks you through creating a physics-based &#8220;mosh pit&#8221; in visionOS &#8212; complete with immersive 3D interactions, collision physics, and music-synchronized animations &#8212; showing how to combine Metal, SceneKit (or RealityKit), and audio for a fully interactive experience.<br><strong><a href="https://medium.com/@wesleymatlock/building-the-pit-a-metallica-themed-physics-playground-in-visionos-47cc58125ae6">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://www.createwithswift.com/understanding-the-transferable-protocol-in-swift/">Understanding the Transferable Protocol in Swift</a></h3><p>This article explains how Swift&#8217;s Transferable protocol simplifies drag-and-drop and copy-paste interactions by wrapping data in a standard, type-safe format &#8212; making it easy to transfer complex model objects between views or apps.<br><strong><a href="https://www.createwithswift.com/understanding-the-transferable-protocol-in-swift/">Read more.</a>&#128205;</strong></p><h3><a href="https://livsycode.com/swiftui/organizing-swiftui-views-with-tabcontent-and-tabcontentbuilder/">Organizing SwiftUI Views with TabContent and TabContentBuilder</a></h3><p>This guide explains how to use the new TabContent and TabContentBuilder APIs in SwiftUI to structure tabbed interfaces cleanly &#8212; letting you define tabs declaratively, improve readability, and avoid boilerplate in your view hierarchy.<br><strong><a href="https://livsycode.com/swiftui/organizing-swiftui-views-with-tabcontent-and-tabcontentbuilder/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://belkadan.com/blog/2025/11/Whats-in-a-Button/">What&#8217;s in a Button?</a></h3><p>The article examines what truly makes a button beyond its look &#8212; from proper click/tap handling and drag cancellation to keyboard navigation and accessibility, arguing that a button should safely support mouse, touch, keyboard, and even voice-control users to be truly functional.<br><strong><a href="https://belkadan.com/blog/2025/11/Whats-in-a-Button/">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-12">How to Price Your Indie App, For Real</a></h3><p>Wilmer Terrero owner of ASO.report tool is sharing his knowledge on how to correctly price your app.</p><p><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-12">Read more.</a>&#128205;</strong></p><h3><a href="https://antongubarenko.substack.com/p/swiftui-charts-interactivity-part">SwiftUI Charts Interactivity &#8212; Part 1</a></h3><p>Explore how to add interactive behavior to your SwiftUI charts, covering gestures like tap and drag to inspect data, dynamic state-driven highlights, and smooth animations &#8212; making charts more engaging and informative for users.<br><strong><a href="https://antongubarenko.substack.com/p/swiftui-charts-interactivity-part">Read more.</a>&#128205;</strong></p><h3><a href="https://tuist.dev/blog/2025/11/27/teaching-ai-to-read-xcode-builds">Teaching AI to Read Xcode Builds</a></h3><p>Tuist explains how Xcode&#8217;s build system emits rich structured events that usually get flattened into plain text logs. By capturing those underlying messages, AI tools can analyze errors, performance, and dependencies far more accurately.<br><strong><a href="https://tuist.dev/blog/2025/11/27/teaching-ai-to-read-xcode-builds">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://robkerr.com/vectorizing-images-with-llms/">Vectorizing Images With LLMs &#8212; Image Search &amp; Semantic Matching</a></h3><p>Rob Kerr walks through how to build a full-stack system that converts images into embeddings using a multimodal LLM, stores them in a vector database (e.g., ChromaDB), and enables similarity search via semantic similarity &#8212; perfect for building image search, recommendation, or retrieval features.<br><strong><a href="https://robkerr.com/vectorizing-images-with-llms/">Read more.</a>&#128205;</strong></p><h3><a href="https://x.com/deepseek_ai/status/1995452641430651132">DeepSeek-V3.2 &amp; DeepSeek-V3.2-Speciale</a></h3><p>DeepSeek has launched two new models &#8212; DeepSeek&#8209;V3.2 and DeepSeek&#8209;V3.2&#8209;Speciale &#8212; that deliver performance on par with, or even surpass, leading models like GPT&#8209;5 and Gemini 3 Pro, while staying open-source and resource-efficient.<br><strong><a href="https://x.com/deepseek_ai/status/1995452641430651132">Read more.</a>&#128205;</strong></p><h3><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-4-best-practices?utm_source=newsletter.theresanaiforthat.com&amp;utm_medium=newsletter&amp;utm_campaign=the-ai-prompting-playbook&amp;_bhlid=7afe4debe25af0edf36981a08fd9f57c1a334211#long-horizon-reasoning-and-state-tracking">Prompt-Engineering Best Practices for Claude 4</a></h3><p>The official Claude 4 guide recommends explicit, structured prompts &#8212; clearly tell the model what to do (not what to avoid), include relevant context and examples, and define output format precisely.<br><strong><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-4-best-practices?utm_source=newsletter.theresanaiforthat.com&amp;utm_medium=newsletter&amp;utm_campaign=the-ai-prompting-playbook&amp;_bhlid=7afe4debe25af0edf36981a08fd9f57c1a334211#long-horizon-reasoning-and-state-tracking">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://danijelavrzan.com/posts/2025/11/get-your-talk-proposal-noticed/">How to Get Your Talk Proposal Noticed</a></h3><p>The article shares practical advice for writing conference talk proposals that stand out &#8212; from defining a clear, relevant topic and audience, to crafting a concise title and abstract, and structuring your pitch so reviewers immediately see the value. It also emphasizes shaping proposals around what conference organizers are looking for: clarity, novelty, and audience-fit.<br><strong><a href="https://danijelavrzan.com/posts/2025/11/get-your-talk-proposal-noticed/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=YCRvVfDGQuY">Swift SDK for Android, Shipathon Winners &amp; SwiftUI Scroll Performance</a></h3><p>Sean Allen breaks down the new Swift SDK for Android, highlights standout Shipathon-winning apps, and shares practical tips for achieving smooth 120fps scrolling in SwiftUI. A quick roundup packed with cross-platform updates and performance insights.<br><strong><a href="https://www.youtube.com/watch?v=YCRvVfDGQuY">Watch here.</a>&#128205;</strong></p><div><hr></div><h2>Yet, another thing&#8230;&#128467;&#65039;</h2><h3><a href="https://adventofagents.com/">Advent of Agents 2025 &#8212; Build Your First AI Agent in Minutes</a></h3><p>Advent of Agents is a free 25-day program that helps you build production-ready AI agents using Gemini 3 + Google ADK in under five minutes &#8212; no coding knowledge required.<br><strong><a href="https://adventofagents.com/">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 242]]></title><description><![CDATA[Your weekly dose of Swift!]]></description><link>https://thosewhoswift.substack.com/p/those-who-swift-issue-242</link><guid isPermaLink="false">https://thosewhoswift.substack.com/p/those-who-swift-issue-242</guid><pubDate>Wed, 26 Nov 2025 21:15:31 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>Not all developers regularly read official releases from the White House, <em><strong><a href="https://www.whitehouse.gov/presidential-actions/2025/11/launching-the-genesis-mission/">but this one is truly exceptional</a></strong></em>.</p><p>The project already being nicknamed the &#8220;New Manhattan Project&#8221; outlines a multi-year plan to move the U.S. into a leading position in modern AI. It includes expanding data centers, upgrading energy infrastructure, and coordinating efforts between government agencies and private companies. It&#8217;s an unprecedented mission in scale and ambition.</p><p>The initiative, officially called the Genesis Mission, focuses on building a unified national AI platform powered by federal scientific datasets, national laboratories, and supercomputing resources. The goal is to accelerate breakthroughs in fields like energy, biotechnology, materials science, quantum research, semiconductors, and national security. Instead of fragmented research efforts, the plan aims to create a coordinated AI-driven engine for scientific discovery across the entire country.</p><p>The government is positioning this as a rallying point (much like the original Manhattan Project) but for computational science and AI. It signals a shift from AI as consumer-facing tools toward AI as national infrastructure. If executed well, it could reshape research pipelines, automate complex simulations, and dramatically shorten the time from idea to discovery.</p><p>For developers, this might feel distant, but initiatives at this scale often trickle down in the form of new tools, APIs, datasets, and technical standards. Industries tied to scientific computing, energy, health, and materials may see a surge in demand for engineers who understand both software and scientific workflows.</p><p>Whether the mission will meet its ambitions remains to be seen, but one thing is clear: this isn&#8217;t just another policy announcement.</p><p>It&#8217;s a blueprint for how AI, science, and infrastructure may evolve over the next decade &#8212; and it&#8217;s definitely worth keeping an eye on.</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://dimillian.medium.com/beyond-geometryreader-building-better-swiftui-modifiers-with-ongeometrychange-ac976e5c9107">Building Better SwiftUI Modifiers with onGeometryChange</a></h3><p>Thomas Ricouard demonstrates how to use a custom onGeometryChange modifier instead of GeometryReader to react to layout changes more efficiently in SwiftUI &#8212; leading to cleaner code, better performance, and fewer layout-related bugs.<br><strong><a href="https://dimillian.medium.com/beyond-geometryreader-building-better-swiftui-modifiers-with-ongeometrychange-ac976e5c9107">Read more.</a>&#128205;</strong></p><h3><a href="https://nilcoalescing.com/blog/AutomaticPropertyObservationInUIKitWithObservable/">Automatic Property Observation in UIKit with @Observable</a></h3><p>Natalia Panferova shows how UIKit in iOS 26 gains SwiftUI-style reactivity using <code>@Observable</code> and <code>updateProperties()</code>, letting views update automatically when model data changes.<br><strong><a href="https://nilcoalescing.com/blog/AutomaticPropertyObservationInUIKitWithObservable/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Coding &#128104;&#8205;&#128187;</h2><h3><a href="https://serialcoder.dev/text-tutorials/swiftui/enabling-selection-double-click-and-context-menus-in-swiftui-list-on-macos/">Enabling Selection, Double-Click &amp; Context Menus in SwiftUI List on macOS</a></h3><p>This tutorial shows how to add selection, double-click actions and right-click context menus to List in macOS SwiftUI apps&#8212;making your lists feel more native and interactive.<br><strong><a href="https://serialcoder.dev/text-tutorials/swiftui/enabling-selection-double-click-and-context-menus-in-swiftui-list-on-macos/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Apple &#127823;</h2><h3><a href="https://developer.apple.com/app-store/app-store-awards-2025/">App Store Awards 2025: Finalists Announced&#127942;</a></h3><p>Apple has revealed 45 finalists for the 2025 App Store Awards across 12 platforms and categories, recognising apps and games that excel in innovation, design, and cultural impact.<br><strong><a href="https://developer.apple.com/app-store/app-store-awards-2025/">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Design &#127912;</h2><h3><a href="https://www.createwithswift.com/designing-humanist-data-visualization-for-mobile/">Designing Humanist Data Visualization for Mobile</a></h3><p>Giselle Katics explores how mobile apps can transform raw data into meaningful stories by focusing on user goals, context, and ethics - emphasizing simplicity, accessibility, and narrative over flashy charts.<br><strong><a href="https://www.createwithswift.com/designing-humanist-data-visualization-for-mobile/">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-11">AI Prompts for Realistic Images to Use in Your Marketing Materials and App Store Screenshots</a></h3><p>Teodora Dobre explains how to craft prompts that guide image generators like Midjourney, unlocking unique styles that stand out and convert. She shares how to develop their own distinctive look for use in projects like App Store visuals based on thousands of hours of experimentation.<br><strong><a href="https://indieappdevs.substack.com/p/indie-app-devs-11">Read more.</a>&#128205;</strong></p><h3><a href="https://tuist.dev/blog/2025/11/17/smart-before-fast">Tuist: Build Smart Before You Build Fast</a></h3><p>The blog post explains that once your mobile engineering team grows, velocity often drops because of slow CI, large test suites, and inefficient workflows - so instead of buying faster machines or hiring more engineers, invest in smarter workflows like incremental builds, selective testing, and caching to truly boost throughput.<br><strong><a href="https://tuist.dev/blog/2025/11/17/smart-before-fast">Read more.</a>&#128205;</strong></p><h3><a href="https://fatbobman.com/en/posts/from-ios-to-android/">From iOS to Android: A Candid Look at My Real-World Journey into Dual-Platform Development</a></h3><p>Article shows how to handle both Android and iOS platforms with all benefits and pitfalls for an indie-developer or a small teams.<br><strong><a href="https://tuist.dev/blog/2025/11/17/smart-before-fast">Read more.</a>&#128205;</strong></p><div><hr></div><h2>AI &#129302;</h2><h3><a href="https://openai.com/index/small-business-ai-jam/?utm_source=chatgpt.com">Small Business AI Jam 2025</a></h3><p>OpenAI Academy&#8217;s one-day event on November 20 is designed for small businesses (1&#8211;100 employees) to build a real ChatGPT-powered tool (like a marketing assistant or booking bot) with hands-on mentoring and no coding background required.<br><strong><a href="https://openai.com/index/small-business-ai-jam/?utm_source=chatgpt.com">Read more.</a>&#128205;</strong></p><h3><a href="https://www.anthropic.com/news/claude-opus-4-5">Introducing Claude Opus 4.5</a></h3><p>Anthropic has launched <strong>Claude Opus 4.5</strong>, its most advanced AI model yet, designed for standout capabilities in coding, task automation, tool use, and reasoning&#8212;claiming benchmarks that surpass humans on technical tests.<br><strong><a href="https://www.anthropic.com/news/claude-opus-4-5">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Tutorials &#128210;</h2><h3><a href="https://levelup.gitconnected.com/swift-macros-from-0-to-hero-0-01-2ff3eac8571a">Swift Macros From 0 to Hero</a></h3><p>This tutorial walks you through the fundamentals of Swift Macros - how to create, use, and apply them - helping you understand this powerful metaprogramming feature from the ground up.<br><strong><a href="https://levelup.gitconnected.com/swift-macros-from-0-to-hero-0-01-2ff3eac8571a">Read more.</a>&#128205;</strong></p><div><hr></div><h2>Video &#127909;</h2><h3><a href="https://www.youtube.com/watch?v=-hKpuysa6PM">Rich Text Editing in SwiftUI Mastering Attributed Strings in iOS 26</a></h3><p>This tutorial shows how the upgraded AttributedString API in iOS 26 makes it easy to build a full Notes-style rich text editor in SwiftUI - with formatting tools, reusable components, and attribute transformations.<br><strong><a href="https://www.youtube.com/watch?v=-hKpuysa6PM">Watch here.</a>&#128205;</strong></p><div><hr></div><p>Thanks for reading Those Who Swift! Subscribe for free to receive new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thosewhoswift.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thosewhoswift.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>