<?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[SwiftUI Weekly]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com</link><image><url>https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png</url><title>SwiftUI Weekly</title><link>https://weekly.swiftwithmajid.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 22 Apr 2026 16:25:42 GMT</lastBuildDate><atom:link href="https://weekly.swiftwithmajid.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Majid Jabrayilov]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[swiftuiweekly@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[swiftuiweekly@substack.com]]></itunes:email><itunes:name><![CDATA[Majid Jabrayilov]]></itunes:name></itunes:owner><itunes:author><![CDATA[Majid Jabrayilov]]></itunes:author><googleplay:owner><![CDATA[swiftuiweekly@substack.com]]></googleplay:owner><googleplay:email><![CDATA[swiftuiweekly@substack.com]]></googleplay:email><googleplay:author><![CDATA[Majid Jabrayilov]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[SwiftUI Weekly - Issue #231]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-231</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-231</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 06 Apr 2026 15:12:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><a href="https://swiftwithmajid.com/2026/04/06/building-list-replacement-in-swiftui/">Building List replacement in SwiftUI</a></h4><p>Whenever you consider creating a scrollable screen in SwiftUI, you might think of using a <em>List</em>. However, it&#8217;s not always the best choice. Lists are great for displaying uniform data. For anything else, a <em>ScrollView</em> with a lazy stack is almost always the best option. This week, we will learn how to build a custom scrollable container in SwiftUI with precise control of look and feel.</p><h4><a href="https://captainswiftui.substack.com/p/talking-liquid-glass-with-apple">Talking Liquid Glass with Apple</a></h4><p>I spent three days talking Liquid Glass with Apple in NYC. Here&#8217;s what you need to know.</p><h4><a href="https://nerdyak.tech/development/2026/03/16/expand-animation-in-SwiftUI-List.html">Expanding Animations in SwiftUI Lists</a></h4><p>Ever tried to add a simple expand/collapse animation to a SwiftUI <code>List</code> and watched in horror as your beautiful animation turned into a janky mess? You&#8217;re not alone. I faced this issue a couple of months ago and thanks to Donny Wals, I decided to publish my findings.</p><h4><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></h4><p><code>onAppear</code> has had genuinely unpredictable moments across SwiftUI&#8217;s lifetime &#8212; firing twice, firing in unexpected order, not firing when you&#8217;d swear it should. For an API that every app relies on, that&#8217;s a problem.</p><h4><a href="https://tanaschita.com/ios-supporting-dark-mode-programmatically/">How to support dark mode in SwiftUI programmatically</a></h4><p>Learn how to improve type safety when working with semantic colors.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #230]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-230</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-230</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 09 Mar 2026 13:33:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://www.infoq.com/articles/kotlin-scalable-swiftui-patterns/">Borrowing from Kotlin/Android to Architect Scalable iOS Apps in SwiftUI</a></h4><p>After looking around, I discovered the Android world. I was surprised by what Google provides for developers compared to Apple. Android developers have clear guides and patterns, and most importantly, real-world examples that show how to structure production apps and not just toy projects.</p><h4><a href="https://nilcoalescing.com/blog/AdjustingLineHeightInSwiftUIOniOS26/">Adjusting line height in SwiftUI on iOS 26</a></h4><p>On iOS 26, we have a new SwiftUI modifier, <a href="https://developer.apple.com/documentation/swiftui/view/lineheight%28_%3A%29">lineHeight(_:)</a>, for adjusting the distance between the baselines of two subsequent lines of text. This modifier accepts a new AttributedString attribute, <a href="https://developer.apple.com/documentation/Foundation/AttributedString/LineHeight">AttributedString.LineHeight</a>, which can also be used separately for styling attributed strings.</p><h4><a href="https://www.sagarunagar.com/blog/geometry-in-swiftui/">Mastering Geometry in SwiftUI - GeometryReader, GeometryProxy &amp; onGeometryChange</a></h4><p>SwiftUI&#8217;s layout system is powerful but often misunderstood. Most of the time stacks and spacers are enough, but when you need things like scroll-based effects, collapsing headers, or custom layouts, you need to understand geometry. This article walks through how SwiftUI layout actually works and explores the tools that let you inspect it &#8212; including GeometryReader, GeometryProxy, coordinate spaces, and modern APIs like onGeometryChange.</p><h4><a href="https://github.com/twostraws/SwiftUI-Agent-Skill">SwiftUI Pro</a></h4><p>An agent skill to help you write smarter, simpler, and more modern SwiftUI, including guidance on API usage, design, performance, and accessibility.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #229]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-229</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-229</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 16 Feb 2026 14:07:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2026/02/10/agentic-coding-in-xcode/">Agentic coding in Xcode</a></h4><p>Apple has finally released Xcode 26.3, which now supports agentic coding. In this article, I&#8217;ll guide you through configuring Xcode 26.3 and utilizing the latest best practices when using agentic tools for building apps on Apple platforms.</p><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/morphing-sheets-out-of-buttons-in-swiftui/">Morphing Sheets Out of Buttons in SwiftUI</a></h4><p>WWDC 2025 brought many advancements in the UI with the new Liquid Glass design. Among them, there&#8217;s a brand new feature, <em>a transition</em> in particular, that would be easy to overlook in that huge load of novelties. This new built-in transition comes to add a new way to present sheets, as it allows to <em>morph a sheet out of the button that initiates its appearance</em>, instead of sliding up from the bottom edge. In plain words, the button is transformed into a sheet and the opposite, creating a beautiful visual effect.</p><h4><a href="https://tanaschita.com/swiftui-coordinators/">How to use SwiftUI Coordinators to communicate with UIKit</a></h4><p>When building SwiftUI apps, we sometimes still need UIKit. Maybe we&#8217;re integrating an older code base or using system controllers that don&#8217;t yet have a native SwiftUI equivalent. In those cases, we can wrap UIKit views or view controllers using UIViewControllerRepresentable. But as soon as delegates or callbacks are involved, we need a way to communicate back to SwiftUI. That&#8217;s where <strong>coordinators</strong> come in.</p><h4><a href="https://buczel.com/blog/swift-navigation-stack-patterns/">Advanced NavigationStack Patterns in SwiftUI</a></h4><p>If you&#8217;ve worked on any non-trivial SwiftUI app, you&#8217;ve felt it - navigation logic scattered across views, random <code>NavigationLink</code>s fighting each other, and deep linking bolted on as an afterthought. It works until it doesn&#8217;t, and then you&#8217;re hunting through ten files to figure out why tapping &#8220;Settings&#8221; opened the wrong screen.</p><h4><a href="https://www.neilmacy.co.uk/blog/swiftui-button-equal-sizing/">Making SwiftUI Buttons with Equal Widths</a></h4><p>It's really common to have two buttons, one above another, and to have those buttons be the same size. However, when I tried to do this by laying out <code>Button</code>s in a <code>VStack</code>, they wrapped to the smallest width needed to fit the labels. That meant that every button was a different width.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #228]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-228</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-228</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 09 Feb 2026 10:51:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftdevjournal.com/posts/open-recent-menu/">Add an Open Recent Menu to a SwiftUI app</a></h4><p>Why would you need to add an Open Recent menu? The most common reason is you created an app that doesn&#8217;t use the document architecture, and you want a way for your app&#8217;s users to access recent items.</p><h4><a href="https://tanaschita.com/swiftui-observation-migrating-to-observation/">Migrating to the Observation framework in SwiftUI</a></h4><p>SwiftUI's current state-of-the-art approach to state observation is the Observation framework. It uses the macro system in Swift to transform Swift types into observable state.</p><h4><a href="https://buczel.com/blog/welcome/">Advanced NavigationStack Patterns in SwiftUI</a></h4><p>NavigationStack, introduced in iOS 16, revolutionized navigation in SwiftUI. While basic usage is straightforward, mastering its advanced patterns unlocks powerful capabilities for building complex, production-ready apps.</p><h4><a href="https://antongubarenko.substack.com/p/swift-bits-transition-vs-transaction">Swift Bits: Transition vs Transaction</a></h4><p>Two concepts that frequently come up when building polished, animated interfaces are <strong>Transitions</strong> and <strong>Transactions</strong>. They sound similar (and they&#8217;re both related to motion and state changes) but they serve very different purposes.</p><h4><a href="https://www.avanderlee.com/ai-development/swiftui-agent-skill-build-better-views-with-ai/">SwiftUI Agent Skill: Build better views with AI</a></h4><p>A SwiftUI Agent Skill that helps you build better views or refactor existing ones. It&#8217;s the reality we&#8217;re in today, and I honestly can&#8217;t live without it anymore myself. Several skills helped me improve the code quality produced by agents, and I&#8217;m happy to introduce you to a new open-source skill for SwiftUI.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #227]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-227</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-227</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 02 Feb 2026 11:12:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://www.swiftdifferently.com/blog/swiftui/swiftui-performance-article">The Secret to Buttery Smooth SwiftUI</a></h4><p>Ever wondered why some SwiftUI views feel buttery smooth while others... don&#8217;t? I&#8217;ve been asking myself this question a lot lately.</p><h4><a href="https://www.sagarunagar.com/blog/app-wide-theming-swiftui/">Designing a Scalable App-Wide Theming System in SwiftUI</a></h4><p>Theming is one of those features users notice instantly &#8212; and one of the easiest places to introduce inconsistency if it&#8217;s not designed carefully.</p><h4><a href="https://ryanashcraft.com/introducing-fabbar/">Introducing FabBar: The Liquid Glass Tab Bar I Wish Apple Made</a></h4><p>FabBar is an open source SwiftUI library that recreates iOS 26's Liquid Glass tab bar with an integrated, tinted floating action button.</p><h4><a href="https://www.donnywals.com/migrating-an-ios-app-from-paid-up-front-to-freemium/">Migrating an iOS app from Paid up Front to Freemium</a></h4><p>Paid up front apps can be a tough sell on the App Store. You might be getting plenty of views on your product page, but if those views aren't converting to downloads, something has to change.</p><h4><a href="https://captainswiftui.substack.com/p/emptiness-in-swiftui">Emptiness in SwiftUI</a></h4><p>How &#8220;Empty&#8221; can be designed and accounted for using EmptyView, EmptyModifier, and ContentUnavailableView.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #226]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-226</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-226</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 22 Dec 2025 12:33:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/12/09/monitoring-app-performance-with-metrickit/">Monitoring app performance with MetricKit</a></h4><p>Xcode Organizer provides access to essential performance metrics such as crashes, energy impact, hangs, launch time, memory consumption, and app terminations. However, it lacks sufficient information to resolve certain issues, particularly app terminations. To address this, Apple introduced the MetricKit framework, enabling us to collect comprehensive diagnostics and build a detailed performance dashboard.</p><h4><a href="https://fatbobman.com/en/snippet/why-child-state-won-not-update-from-parent-in-swiftui/">Why Child @State Won't Update from Parent in SwiftUI</a></h4><p><code>@State</code> is designed to manage a view&#8217;s <strong>internal private state</strong>. Its initial value is only applied when the view establishes its <strong>Identity</strong> for the first time. To react to external data changes continuously, use <code>@Binding</code> or standard <code>let</code> properties instead.</p><h4><a href="https://nilcoalescing.com/blog/AnimatingSFSymbolsInSwiftUI/">Animating SF Symbols in SwiftUI</a></h4><p>SF Symbols are a natural choice for icons in SwiftUI apps. The system provides a very large symbol catalog, and extensive customization options. Size, weight, rendering mode, and color can all be adjusted to match the surrounding UI, making symbols easy to integrate across an app.</p><h4><a href="https://matteomanferdini.com/mvvm-coordinator-swiftui/">From broken to testable SwiftUI navigation: The decoupled approach of MVVM with coordinators</a></h4><p>SwiftUI provides several tools for managing navigation, and the introduction of <code>NavigationStack</code> and value-destination links improved programmatic navigation.</p><p>However, <strong>in larger applications, vanilla SwiftUI navigation can pose challenges </strong>for testability, maintainability, and modularity. Navigation logic is distributed across views, introducing coupling and making the navigation code hard to locate.</p><h4><a href="https://swiftdevjournal.com/posts/reducing-sheet-modifiers/">Reducing the Number of .sheet Modifiers in Your SwiftUI Views</a></h4><p>When a SwiftUI view needs to present many different sheets, each sheet typically requires its own @State Boolean and .sheet modifier. This quickly clutters code and makes it hard to maintain.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #225]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-225</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-225</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Tue, 02 Dec 2025 09:51:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://chris.eidhof.nl/post/swiftui-task-identity/">Task Identity</a></h4><p>When you write SwiftUI views, one of the big advantages over UIKit is that SwiftUI performs automatic dependency tracking. Whenever your model invalidates or one of your view&#8217;s properties change, your view is re-rendered.</p><h4><a href="https://nilcoalescing.com/blog/InitializingObservableClassesWithinTheSwiftUIHierarchy/">Initializing @Observable classes within the SwiftUI hierarchy</a></h4><p>I&#8217;ve noticed that many iOS developers, even those who have been working with SwiftUI for a while, still have questions about how <code>@Observable</code> classes work with SwiftUI views, how they should be initialized, and whether we need to store our observable models in <code>@State</code>. In this post, we&#8217;ll look at some examples of managing observable state in SwiftUI, explore the recommended approaches, and see what can go wrong if our observable classes are not stored correctly.</p><h4><a href="https://livsycode.com/swiftui/document-preview-options-in-swiftui/">Document Preview Options in SwiftUI</a></h4><p>Working with documents is a common requirement in many iOS apps. Whether you&#8217;re displaying a PDF, showing a Quick Look preview, or handing the file off to the system for deeper interactions, developers today have multiple options available. Each framework offers different capabilities, limitations, and levels of control.</p><h4><a href="https://www.createwithswift.com/understanding-the-transferable-protocol-in-swift/">Understanding the Transferable Protocol in Swift</a></h4><p>Learn how to prepare your custom types to be sharable between applications and system features with the Transferable protocol.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #224]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-224</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-224</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 03 Nov 2025 11:19:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/zooming-with-the-magnify-gesture-in-swiftui/">Zooming With The Magnify Gesture in SwiftUI</a></h4><p>Zooming content in and out is a fundamental gesture that users of smartphones and tablets are well acquainted with. Also known as <em>pinch to zoom</em>, this gesture is available to attach to our SwiftUI views programmatically, letting users change the <em>scale level</em> of what they are interacting with, using a familiar move of the fingers.</p><h4><a href="https://nilcoalescing.com/blog/ScrollViewSnappingInSwiftUI/">ScrollView snapping in SwiftUI</a></h4><p>By default, a <code>ScrollView</code> in SwiftUI uses the system&#8217;s standard deceleration rate and the scrolling velocity to determine where the scroll motion should stop. While this behavior works well in most situations, it doesn&#8217;t consider the dimensions of the scroll view or its content.</p><h4><a href="https://www.avanderlee.com/swiftui/swiftui-architecture-structure-views-for-reusability-and-clarity/">SwiftUI Architecture: Structure Views for Reusability and Clarity</a></h4><p>As your SwiftUI projects grow, the need for a better SwiftUI architecture grows, as it&#8217;s easy for view bodies to become very long. You start with a simple screen, and before you realize it, your body includes dozens of nested VStacks, HStacks, and custom modifiers. At some point, scrolling through the body feels like reading a novel.</p><h4><a href="https://antongubarenko.substack.com/p/optimize-your-apps-speed-and-efficiency?r=21t43r&amp;utm_campaign=post&amp;utm_medium=web&amp;triedRedirect=true">Optimize Your App&#8217;s Speed and Efficiency: Q&amp;A</a></h4><p>Learn depth of optimization from Apple Team.</p><h2>Video</h2><h4><a href="https://www.youtube.com/watch?v=yXAQTIKR8fk">Optimize your app's speed and efficiency</a></h4><p>Whether you&#8217;re optimizing an existing app or just starting out, you&#8217;ll learn how to improve your app&#8217;s responsiveness with SwiftUI, monitor performance when using foundation models, and explore ways to reduce your app&#8217;s battery usage.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #223]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-223</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-223</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 20 Oct 2025 15:15:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/09/16/feature-flags-in-swift/">Feature flags in Swift</a></h4><p>Almost every project I work on has at least three build configurations: Debug, TestFlight, and App Store. These configurations differ not only in build settings but also in functionality. This week, we&#8217;ll learn how to implement feature flags in Swift, which allow us to toggle on and off specific functionalities under certain conditions.</p><h4><a href="https://github.com/roberthein/kinetics">Tunable, physics-driven motion primitives for SwiftUI</a></h4><p>Kinetics brings the natural feel of real-world physics to your SwiftUI animations. Built on Swift 6 with strict concurrency compliance, it provides a modern, safe foundation for creating motion that responds to user input, respects boundaries, and feels alive.</p><h4><a href="https://tanaschita.com/swiftui-glass-auto-apply/">When SwiftUI automatically applies the glass look and when it doesn&#8217;t</a></h4><p>Since iOS 18, buttons, toolbars, and other controls can appear in Apple&#8217;s new glass button style. What&#8217;s interesting is that SwiftUI sometimes applies this effect automatically, depending on where a view is placed. In this article, we&#8217;ll look at when that happens, when it doesn&#8217;t.</p><h4><a href="https://nilcoalescing.com/blog/AddACloseButtonToSwiftUIModalsOnIOS26/">Add a Close button to SwiftUI modals on iOS 26</a></h4><p>In iOS 26, SwiftUI introduces a new close button role designed for buttons that dismiss informational views or modals, for example, sheets showing read-only content or contextual details.</p><h4><a href="https://www.swiftwithvincent.com/blog/why-a-custom-viewmodifier-is-often-useless">Why a custom ViewModifier is often useless</a></h4><p>You don&#8217;t always need to create a separate ViewModifier struct in SwiftUI. If your modifier just chains some view modifiers and <strong>does not</strong> depend on internal state or environment values, you can simplify by implementing it as a function on View instead.</p><p></p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #222]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-222</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-222</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 01 Sep 2025 13:02:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><a href="https://swiftwithmajid.com/2025/07/30/streaming-changes-with-observations/">Streaming changes with Observations</a></h4><p>Apple introduced the Observation framework a few years ago. The Observation framework became the main tool for building observable models, replacing the Combine framework. This week, we will talk about a new piece of the framework called <em>Observations</em>.</p><h4><a href="https://tanaschita.com/swiftui-reusable-toolbar/">How to create a custom reusable toolbar in SwiftUI</a></h4><p>When building navigation bars and toolbars in SwiftUI, we'll often want to keep the same look and functionality across multiple screens. Instead of copying and pasting the same toolbar code everywhere, we can abstract the toolbar into a reusable component.</p><h4><a href="https://www.swiftbysundell.com/articles/building-a-design-system-at-genius-scan/">Building a design system at Genius Scan</a></h4><p>As an app&#8217;s code base grows and evolves, it can be really tricky to maintain consistency within its UI. It&#8217;s easy for things like margins and padding, or colors and fonts, to start diverging, as different developers might use different values within each individual UI component&#8217;s implementation. At the same time, UI code can also become increasingly complex, since new features might be designed and implemented completely from scratch, which often leads to a minimum amount of code reuse and duplicated engineering efforts.</p><h4><a href="https://nilcoalescing.com/blog/ConcentricRectangleInSwiftUI/">Corner concentricity in SwiftUI on iOS 26</a></h4><p>At WWDC 25, Apple talked a lot about corner concentricity in their new design system. The idea of concentric corners, rounded corners where the curved portions of the inner and outer shapes share the same center and create a visually consistent and nested appearance, was highlighted multiple times. They also showed how to create concentric shapes in SwiftUI in one of the WWDC sessions, but the API was missing from the early betas.</p><h4><a href="https://www.pointfree.co/blog/posts/180-perception-2-0-an-updated-back-port-of-swift-s-observation-framework">Perception 2.0: An updated back-port of Swift&#8217;s Observation framework</a></h4><p>Today we are releasing a big update that brings many of the recent advancements in the Observation framework to Perception, and of course it is all back-ported to iOS 13+ and macOS 10.15+. Join us for a quick overview of what is new in <a href="http://github.com/pointfreeco/swift-perception">Perception</a>.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #221]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-221</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-221</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 28 Jul 2025 14:19:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/07/23/glassifying-custom-swiftui-views-groups/">Glassifying custom SwiftUI views. Groups</a></h4><p>Glassifying custom views can be very easy using the <em>glassEffect</em> view modifier. It is a one-shot view modifier that handles everything for you. But things can become quite complicated when you try to glassify a group of views. Today, we will talk about glassifying a group of views in SwiftUI.</p><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/providing-multiple-accent-colors-in-swiftui-apps/">Providing Multiple Accent Colors in SwiftUI Apps</a></h4><p>Apps are not monochrome, and one particular color with special meaning is the <em>accent color</em> that an app displays. We meet it mainly in primary actions, buttons, tabs, navigation bar elements, toolbars and other places, while it often works much like a visual signature. When trying to make our apps appealing to users, it seems suitable sometimes to provide various accent colors that users can choose from.</p><h4><a href="https://nilcoalescing.com/blog/SwiftUISearchEnhancementsIniOSAndiPadOS26/">SwiftUI Search Enhancements in iOS and iPadOS 26</a></h4><p>In iOS and iPadOS 26, the search experience has been updated with new placement behaviors and visual styling, and we also have new SwiftUI APIs to support the changes. In this post, we'll explore how we can take advantage of these enhancements to build search interfaces that feel modern and consistent with the system.</p><h4><a href="https://danielsaidi.com/blog/2025/06/19/creating-amazing-loading-animations-with-sf-symbols">Creating amazing loading animations with SF Symbols.</a></h4><p>In this post, we&#8217;ll take a look at how to use SF Symbols to easily create amazing loading animations.</p><h4><a href="https://antongubarenko.substack.com/p/swiftui-scrollview-tracking-offsetitems">SwiftUI: Scrollview tracking offset/items</a></h4><p>Recently, I've been working on a feature which involved a small full screen banner implementation with scrollable content and pagination. Since the amount of items were fixed and were small - I picked the <strong>ScrollView</strong> with <strong>HStack</strong> in it. Had no issues with rendering them right away - that was even great since from UX will be no loaders.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #220]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-220</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-220</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 21 Jul 2025 14:51:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/07/16/glassifying-custom-swiftui-views/">Glassifying custom SwiftUI views</a></h4><p>We already talked about glassifying tabs and toolbars in SwiftUI. This week, we will continue the topic of the new Liquid Glass design language and will talk about applying this concept to custom views.</p><h4><a href="https://nilcoalescing.com/blog/PresentingLiquidGlassSheetsInSwiftUI/">Presenting Liquid Glass sheets in SwiftUI on iOS 26</a></h4><p>iOS 26 introduces the new Liquid Glass design, which brings updates to the appearance and behavior of sheets in SwiftUI. In this post, we'll explore these changes and how we can adopt them in our apps.</p><h4><a href="https://www.artemnovichkov.com/blog/handling-webview-navigation-in-swiftui">Handling WebView navigation in SwiftUI</a></h4><p>A key feature of web browsing is the ability to move backward and forward through your navigation history. In this post, we'll explore how to handle navigation in WebView and WebPage.</p><h4><a href="https://tanaschita.com/ios-accessibility-reduced-motion/">Supporting Reduced Motion accessibility setting in SwiftUI</a></h4><p>Learn how to respect system settings for reduced motion to improve usability for motion-sensitive users.</p><h4><a href="https://www.mobilesystemdesign.com/blog/design-system-spacing/">Structuring Spacing for Scalable Mobile UIs</a></h4><p>In growing teams and evolving codebases, maintaining visual consistency is a challenge, especially in mobile apps where layouts must adapt to different devices, screen sizes, and use cases. One of the easiest places for inconsistencies to creep in is spacing.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #219]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-219</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-219</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 07 Jul 2025 19:56:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/06/24/glassifying-tabs-in-swiftui/">Glassifying tabs in SwiftUI</a></h4><p>One of the most important changes presented during WWDC 25 was the new design language used across all Apple platforms called Liquid Glass. Tabs play a significant role in the new design and provide new ways of interacting with them.</p><h4><a href="https://swiftwithmajid.com/2025/07/01/glassifying-toolbars-in-swiftui/">Glassifying toolbars in SwiftUI</a></h4><p>Liquid Glass is the new design language Apple using across all of its platforms. The look and feel of tabs was the major change that we covered last week. This week we will focus on another significant change related to toolbars.</p><h4><a href="https://www.donnywals.com/designing-custom-ui-with-liquid-glass-on-ios-26/">Designing custom UI with Liquid Glass on iOS 26</a></h4><p>Liquid Glass is iOS 26&#8217;s new design language. This means that a lot of apps will be adopting a new UI philosophy that might require some significant changes to how you&#8217;re designing your app&#8217;s UI.</p><h4><a href="https://www.artemnovichkov.com/blog/using-webkit-to-load-web-content-in-swiftui">Using WebKit to load web content in SwiftUI</a></h4><p>Apple introduced <code>WebView</code> and <code>WebPage</code> to simplify web content handling in SwiftUI. Surprisingly, these new APIs are already available starting with iOS 18.4. Let's try to use them.</p><h4><a href="https://chris.eidhof.nl/presentations/attribute-graph/">Attribute graph</a></h4><p>It&#8217;s about the attribute graph, and I want to start off by saying I don&#8217;t know how this works, but I think we can make some educated guesses based on the information that&#8217;s out there and based on the dumps you can get. In my head, it kind of makes sense, and it really helps, I think, to understand how SwiftUI rendering works and how SwiftUI can be as efficient as it is.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #218]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-218</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-218</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 23 Jun 2025 10:41:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/06/10/what-is-new-in-swiftui-after-wwdc25/">What is new in SwiftUI after WWDC25</a></h4><p>The 25th World Wide Developers Conference is here, and it&#8217;s the perfect time to explore the most significant changes and additions to the SwiftUI framework. Let&#8217;s delve into all the exciting new features Apple has prepared for us this year.</p><h4><a href="https://yaacoub.github.io/articles/swift-tip/state-of-the-union-what-i-took-away/">State of the Union: What I Took Away</a></h4><p>This article is a quick post on what I took away from watching Apple&#8217;s Platforms State of the Union at WWDC25. The aim is to be neither overly objective nor overly subjective, but to cherry-pick the information that mattered most to me in a quick read.</p><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/overlapping-views-in-swiftui-with-zindex/">Overlapping Views in SwiftUI with zIndex</a></h4><p>SwiftUI lays out our views automatically based on the container they are in and the modifiers applied on them. Most of the time that&#8217;s enough, but when it comes to overlapping and the order in the Z-axis, then we have an additional tool at our disposal; the <strong>zIndex</strong> view modifier. Using it is pretty straightforward, so let&#8217;s get to know it next.</p><h4><a href="https://www.donnywals.com/exploring-tab-bars-on-ios-26-with-liquid-glass/">Exploring tab bars on iOS 26 with Liquid Glass</a></h4><p>When your app has a tab bar and you recompile it using Xcode 26, you will automatically see that your tab bar has a new look and feel based on Liquid Glass. In this blog post, we&#8217;ll explore the new tab bar, and which new capabilities we&#8217;ve gained with the Liquid Glass redesign. I&#8217;ll also spend a little bit of time on providing some tips around how you can conditionally apply iOS 26 specific view modifiers to your tab bar using <a href="https://davedelong.com/blog/2021/10/09/simplifying-backwards-compatibility-in-swift/">Dave DeLong&#8217;s &#8220;Backport&#8221;</a> approach.</p><h4><a href="https://nilcoalescing.com/blog/StretchyHeaderInSwiftUI/">Stretchy header in SwiftUI with visualEffect()</a></h4><p>It&#8217;s a common design pattern in modern iOS apps to have a large image at the top of a scroll view, extending all the way into the top safe area. When the user pulls down to overscroll, instead of revealing empty space above the image, the image expands, growing in size and creating a dynamic visual effect.</p><h2>Books</h2><h4><a href="https://sarahreichelt.gumroad.com/l/iqdry/nuy8ey0">Escape from Tutorial Hell</a></h4><p>This book aims to fill in that gap and take you from a person who knows the basics of Swift and SwiftUI to a developer with an app that's designed, built, shipped, and ready to be maintained.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #217]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-217</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-217</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 02 Jun 2025 12:56:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://medium.com/tripadvisor/the-evolution-of-native-engineering-at-tripadvisor-part-1-577cc0e36ec8">The evolution of native engineering at Tripadvisor: Part 1</a></h4><p>In December 2024, we made the pivotal decision to migrate to The Composable Architecture (TCA), developed by Point-Free. This wasn&#8217;t just a technical refactoring &#8212; it represented a fundamental shift in how we approach iOS development, particularly for complex applications with sophisticated navigation requirements.</p><h4><a href="https://dimillian.medium.com/swiftui-in-2025-forget-mvvm-262ff2bbd2ed">SwiftUI in 2025: Forget MVVM</a></h4><p>It&#8217;s 2025, and I&#8217;m still getting asked the same question: &#8220;Where are your ViewModels?&#8221; Every time I share this opinion or code from my open-source projects like my BlueSky client, <a href="https://github.com/Dimillian/IcySky/blob/main/App/IcySkyApp.swift">IcySky</a>, or even the Medium iOS app, developers are surprised to see clean, simple views without a single ViewModel in sight.</p><h4><a href="https://www.swiftbysundell.com/articles/swiftui-viewbuilder-tips-and-tricks/">Tips and tricks for when using SwiftUI&#8217;s ViewBuilder</a></h4><p>SwiftUI&#8217;s <code>ViewBuilder</code> type is a key part of the library&#8217;s overall API design, in that it&#8217;s what enables multiple view expressions to be declared within a given scope (such as a <code>body</code> property implementation, or a closure passed to containers such as <code>HStack</code> or <code>VStack</code>) without requiring any manual grouping or wrapping at each call site.</p><h4><a href="https://tanaschita.com/swiftui-toolbars-guide/">Understanding toolbars in SwiftUI</a></h4><p>Learn how to add toolbar items in SwiftUI views across various placements like navigation bars, bottom bars and more.</p><h4><a href="https://nilcoalescing.com/blog/EnableScrollingBasedOnContentSizeInSwiftUI/">Enable scrolling based on content size in SwiftUI</a></h4><p>When designing interfaces in SwiftUI, it&#8217;s often a good idea to wrap our app&#8217;s content in a scroll view, even if the content usually fits on screen. This helps ensure that users who enable larger text sizes in accessibility settings can still access all the content without layout issues, clipped views and truncated text. However, doing this introduces an unintended side effect. By default, <code>ScrollView</code> adds a bouncy scrolling behavior, even when the content fits entirely within the available space. This can make the interface feel oddly springy when no scrolling is actually needed.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #216]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-216</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-216</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 26 May 2025 11:50:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://nilcoalescing.com/blog/MeshGradientsInSwiftUI/">Mesh gradients in SwiftUI</a></h4><p>A mesh gradient is a technique for rendering smooth, multi-directional color transitions across a surface using a structured network of control points. Unlike linear or radial gradients, which interpolate color along fixed axes, a mesh gradient defines colors at specific positions within a two-dimensional grid. These positions act as anchors, and the rendering engine computes smooth interpolations between them across the surface.</p><h4><a href="https://fatbobman.com/en/posts/demystifying-swiftuis-ignoredbylayout/">Demystifying SwiftUI&#8217;s .ignoredByLayout() &#8212; How to Apply Geometry Effects Without Breaking Your Layout</a></h4><p>Among SwiftUI&#8217;s many APIs, .ignoredByLayout() is something of an &#8220;understated member.&#8221; Information is scarce, usage scenarios are uncommon, and its very name tends to raise questions.</p><h4><a href="https://www.swiftwithvincent.com/blog/ever-heard-of-contextmenu">Ever heard of .contextMenu()?</a></h4><p>Vincent Pradeilles demonstrates how to implement a simple emoji reaction feature in a SwiftUI chat interface using the built-in .contextMenu() modifier. This approach allows developers to add contextual menus that appear upon a long press on a chat bubble, offering various emoji reactions.</p><h4><a href="https://www.swiftyplace.com/blog/xcuitest-ui-testing-swiftui?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=xcuitest-ui-testing-swiftui">XCUITest: How to Write UI Tests for SwiftUI Apps</a></h4><p>If you&#8217;ve ever shipped a bug where a button did nothing, a sheet didn&#8217;t show, or the wrong item appeared on screen&#8212;this post is for you.</p><h2>Videos</h2><h4><a href="https://www.youtube.com/watch?v=yMOS-2OFtho">Elevate Your SwiftUI Lists with iOS 18&#8217;s New Container Features</a></h4><p>I&#8217;ll walk you through two practical examples: enhancing a basic list with stylized sections and creating a dynamic, filterable to-do list using ContainerValue to elevate a selected section to the top.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #215]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-214-8dc</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-214-8dc</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 12 May 2025 16:53:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Reading</h2><h4><a href="https://www.hackingwithswift.com/articles/277/whats-new-in-swift-6-2">What's new in Swift 6.2?</a></h4><p>Raw identifiers, backtraces, task naming, and more.</p><h4><a href="https://chris.eidhof.nl/post/swiftui-view-model/">SwiftUI View Model Ownership</a></h4><p>When we cover SwiftUI&#8217;s state system in <a href="https://www.swiftuifieldguide.com/workshops/">our workshops</a>, we often get asked: <em>How can I set up my view model in a view?</em> There&#8217;s a bit more to this question, so let&#8217;s try to spell out the requirements.</p><h4><a href="https://www.donnywals.com/choosing-between-lazyvstack-list-and-vstack-in-swiftui/">Choosing between LazyVStack, List, and VStack in SwiftUI</a></h4><p>SwiftUI offers several approaches to building lists of content. You can use a <code>VStack</code> if your list consists of a bunch of elements that should be placed on top of each other. Or you can use a <code>LazyVStack</code> if your list is really long. And in other cases, a <code>List</code> might make more sense.</p><h4><a href="https://nilcoalescing.com/blog/FormattingDataInsideSwiftUITextViews/">Formatting data inside SwiftUI Text views</a></h4><p>I&#8217;ve just started a new "Nil Coalescing" <a href="https://www.youtube.com/@NilCoalescing">YouTube channel</a>, and in the first video I take a closer look at how we can use <code>FormatStyle</code> and <code>Text.DateStyle</code> directly inside SwiftUI <code>Text</code> views to format values inline using string interpolation. This approach allows us to display arrays of strings, measurements, dates and other types of data in a clean, declarative way without writing additional formatting code.</p><h4><a href="https://www.swiftyplace.com/blog/swiftui-testing-with-preferencekeys">Can You use PreferenceKeys for Testing SwiftUI Views</a></h4><p>One afternoon I was experimenting with EnvironmentKeys&#8212;trying to drive navigation and coordinate between screens without resorting to imperative hacks. SwiftUI&#8217;s environment feels like a top&#8209;down broadcast: you inject a value at the root, and child views pick it up. But what if you want the opposite? What if a child view could whisper something back up the tree?</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #214]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-214</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-214</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 28 Apr 2025 13:32:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Sponsor</h2><h4><a href="https://fnf.dev/4lkI0hT">Free mobile payments SDK by Square</a></h4><p>Square&#8217;s new <strong>Mobile Payments SDK</strong> is free, and easy to embed&#8212;perfect for adding seamless in-app payments!</p><h2>Reading</h2><h4><a href="https://www.avanderlee.com/swiftui/swiftui-foreach-loop-index/">SwiftUI ForEach Explained with Code Examples</a></h4><p>If you&#8217;re building dynamic lists or repeating UI components in SwiftUI, there&#8217;s a high chance you&#8217;re already using the SwiftUI ForEach view element. It&#8217;s a powerful, yet sometimes misunderstood, view element in SwiftUI.</p><h4><a href="https://collin.blog/2025/04/24/loving-swiftui-missing-uikit/">Loving SwiftUI, missing UIKit.</a></h4><p>At this point, I am primarily working in SwiftUI. At work right now, we are doing macOS and iOS, and we&#8217;re not using AppKit or UIKit at all. Where I&#8217;m at right now in my thinking is that while I do like SwiftUI, I kind of miss the old way of doing things.</p><h4><a href="https://tanaschita.com/swiftui-navigation-persist-state/">How to persist navigation state in SwiftUI</a></h4><p>Learn how to save and restore NavigationPath to maintain user context across app launches.</p><h4><a href="https://medium.com/@wesleymatlock/why-your-swiftui-app-is-slower-than-you-think-c3e9bb46174b">Why Your SwiftUI App Is Slower Than You Think</a></h4><p>Ever wondered why your SwiftUI views feel sluggish, even though you&#8217;ve followed every &#8220;best practice&#8221;? Yeah, I&#8217;ve been there too &#8212; pulling my hair out at Frontier Airlines as a seemingly simple list lagged like it was running on an iPhone. Turns out, SwiftUI&#8217;s magic isn&#8217;t always free; unnecessary view invalidation and subtle diffing issues can absolutely murder your app&#8217;s performance.</p><h4><a href="https://captainswiftui.substack.com/p/the-underground-wrapper-scene?triedRedirect=true">The Underground Wrapper Scene</a></h4><p>10 SwiftUI Property Wrappers and Values You Probably Don&#8217;t Know&#8230; But Should.</p><h2>Video</h2><h4><a href="https://www.youtube.com/watch?v=N1H9lvHwQxc&amp;list=PLED4k3CZkY9RBltAgj-o9xSFOMOhBdmXm">iOS Conf SG 2025</a></h4><p>The Grand Gathering of Apple Developers in Asia.</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #213]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-213</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-213</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 21 Apr 2025 14:45:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Sponsor</h2><h4><a href="https://fnf.dev/4lkI0hT">Free mobile payments SDK by Square</a></h4><p>Square&#8217;s new <strong>Mobile Payments SDK</strong> is free, and easy to embed&#8212;perfect for adding seamless in-app payments!</p><h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/04/15/introducing-swift-testing-scoping/">Introducing Swift Testing. Scoping.</a></h4><p>Apple recently released Swift 6.1, with most of the changes being cosmetic. However, I particularly like the scoping feature introduced in the Swift Testing framework. This week, we&#8217;ll delve into the new test scoping feature and explore how to effectively utilize it in Swift.</p><h4><a href="https://www.donnywals.com/using-instruments-to-profile-a-swiftui-app/">Using Instruments to profile a SwiftUI app</a></h4><p>A key skill for every app developer is being able to profile your app's performance. Your app might look great on the surface, but if it doesn&#8217;t perform well, it&#8217;s going to feel off&#8212;sometimes subtly, sometimes very noticeably. Beautiful animations, slick interactions, and large data sets all fall flat if the app feels sluggish or unresponsive.</p><h4><a href="https://codingwithvera.com/what-is-mainactor-in-swift/">What is @MainActor In Swift?</a></h4><p>Today I want to explain a simple topic: the use of <code>@MainActor</code> when you're using Swift. I came across this macro while programming async with SwiftUI, so I want to share my findings with you. Let's start with a scenario so we can understand the problem that this macro solves.</p><h4><a href="https://serialcoder.dev/text-tutorials/swiftui/swiftui-colors-exploring-overlooked-features/">SwiftUI Colors &#8211; Exploring Overlooked Features</a></h4><p>Working with colors is one of the most common tasks for any developer in SwiftUI. However, we almost always stick to the basics; we apply the necessary colors and sometimes we also change their opacity. So, in this post we'll see some not so well-known Color features; <em>levels, gradients, mixing and shadow</em>s.</p><h4><a href="https://captainswiftui.substack.com/p/is-there-a-better-asyncbutton?triedRedirect=true">Is There A Better AsyncButton?</a></h4><p>Can We Tap Into Button's Full Async Potential... Or Are We Pressing Luck?</p>]]></content:encoded></item><item><title><![CDATA[SwiftUI Weekly - Issue #212]]></title><description><![CDATA[The curated collection of links about SwiftUI. Delivered every Monday.]]></description><link>https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-212</link><guid isPermaLink="false">https://weekly.swiftwithmajid.com/p/swiftui-weekly-issue-212</guid><dc:creator><![CDATA[Majid Jabrayilov]]></dc:creator><pubDate>Mon, 14 Apr 2025 08:07:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OST7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb5c3d-f973-4401-9732-bd41276b2ddf_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Sponsor</h2><h4><a href="https://fnf.dev/4lkI0hT">Free mobile payments SDK by Square</a></h4><p>Square&#8217;s new <strong>Mobile Payments SDK</strong> is free, and easy to embed&#8212;perfect for adding seamless in-app payments!</p><h2>Reading</h2><h4><a href="https://swiftwithmajid.com/2025/04/08/wwdc25-wishes/">WWDC25 wishes</a></h4><p>The World Wide Developers Conference, the largest event in the Apple development world, is just around the corner. Today, I&#8217;m excited to share my wishes for the upcoming WWDC 25, which is expected to be unveiled in two months.</p><h4><a href="https://www.swiftjectivec.com/Simply-Whats-New-Logic-in-SwiftUI-iOS-apps/">Showing What's New Screens using @AppStorage</a></h4><p>In this post, Jordan demonstrates how to create new screens in a SwiftUI app using the AppStorage property wrapper.</p><h4><a href="https://samwize.com/2025/04/11/plurals-with-swiftui/">Plurals with SwiftUI</a></h4><p>SwiftUI introduced new ways of working with plurals in code.</p><h4><a href="https://nilcoalescing.com/blog/TextConcatenationVsTextInterpolationInSwiftUI/">Text concatenation vs Text interpolation in SwiftUI</a></h4><p>SwiftUI allows us to combine multiple <code>Text</code> views into a single view using the plus (<code>+</code>) operator. This enables us to apply different styles to individual parts of the text.</p><h4><a href="https://www.devfright.com/a-guide-to-the-swiftui-environment/">A Guide to the SwiftUI @Environment</a></h4><p>The @Environment property wrapper in SwiftUI gives access to shared values across your app. Apple provides a wide range of values that are built-in to every app. These cover accessibility, layout, colours, and more. The system automatically updates the built-in environment values so that your app knows more about the environment it is running in.</p>]]></content:encoded></item></channel></rss>