<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/styles.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Fatbobman&apos;s Blog</title><description>English Home | Fatbobman&apos;s Blog ｜肘子的 Swift 记事本 – Sharing content related to Swift, SwiftUI, Core Data, and Swift Data, as well as covering development tools, AI, and other topics. All articles are original creations; for reproduction, please contact the author.</description><link>https://fatbobman.com/</link><language>en</language><follow_challenge><feedId>57718511161060352</feedId><userId>60878761419746304</userId></follow_challenge><item><title>The Opportunities and Challenges of iPhone Duo - Fatbobman&apos;s Swift Weekly #153</title><link>https://fatbobman.com/en/weekly/issue-153/</link><guid isPermaLink="true">https://fatbobman.com/en/weekly/issue-153/</guid><description>Although some details of the iPhone Duo’s design had already leaked months ago, and Apple is a latecomer to the foldable phone market, its ability to tightly integrate hardware and software—and the interaction changes that integration enables—still managed to surprise quite a few consumers.</description><pubDate>Mon, 14 Sep 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Although some details of the iPhone Duo’s design had already leaked months ago, and Apple is a latecomer to the foldable phone market, its ability to tightly integrate hardware and software—and the interaction changes that integration enables—still managed to surprise quite a few consumers.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/weekly/issue-153/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>weekly</category><category>swiftui</category><author>Fatbobman</author></item><item><title>When the Mac mini’s Price Is No Longer Mini - Fatbobman&apos;s Swift Weekly #152</title><link>https://fatbobman.com/en/weekly/issue-152/</link><guid isPermaLink="true">https://fatbobman.com/en/weekly/issue-152/</guid><description>Late last month, Apple released the new Mac mini and Mac Studio. Alongside the impressive performance upgrades, the noticeably higher prices were just as striking. Rising memory and storage costs are undoubtedly a major factor, but in the AI era, developers’ hardware needs are also quietly changing. More memory and more storage keep raising our idea of what counts as a “good enough” configuration—and pushing the price we actually pay even higher.</description><pubDate>Mon, 07 Sep 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Late last month, Apple released the new Mac mini and Mac Studio. Alongside the impressive performance upgrades, the noticeably higher prices were just as striking. Rising memory and storage costs are undoubtedly a major factor, but in the AI era, developers’ hardware needs are also quietly changing. More memory and more storage keep raising our idea of what counts as a “good enough” configuration—and pushing the price we actually pay even higher.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/weekly/issue-152/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>weekly</category><category>swiftui</category><author>Fatbobman</author></item><item><title>SwiftData: Optimization Starts with Modeling</title><link>https://fatbobman.com/en/posts/swiftdata-optimization-starts-with-modeling/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/swiftdata-optimization-starts-with-modeling/</guid><description>Once a dataset grows large, SwiftData lists start to stutter. This has been the performance complaint I&apos;ve heard most often these past few years. Once you actually spend time on it, you find that the slowness isn&apos;t only the long initial load — the enormous memory footprint drags performance down just as much. This article looks at why these problems show up in SwiftData, and where to start fixing them.</description><pubDate>Wed, 02 Sep 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Once a dataset grows large, SwiftData lists start to stutter. This has been the performance complaint I&apos;ve heard most often these past few years. Once you actually spend time on it, you find that the slowness isn&apos;t only the long initial load — the enormous memory footprint drags performance down just as much. This article looks at why these problems show up in SwiftData, and where to start fixing them.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/swiftdata-optimization-starts-with-modeling/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftdata</category><author>Fatbobman</author></item><item><title>Just a Few Keystrokes - Fatbobman&apos;s Swift Weekly #151</title><link>https://fatbobman.com/en/weekly/issue-151/</link><guid isPermaLink="true">https://fatbobman.com/en/weekly/issue-151/</guid><description>Last weekend, I attended an App Accelerator event hosted by Apple in Beijing. The event focused primarily on app development, operations, and business models in the age of AI. Most of the attendees were managers at tech companies or app developers. Throughout the event, enthusiasm for AI was high, with people exchanging their own perspectives on AI and sharing how they were putting it to use. I learned a great deal from those conversations.</description><pubDate>Mon, 31 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last weekend, I attended an App Accelerator event hosted by Apple in Beijing. The event focused primarily on app development, operations, and business models in the age of AI. Most of the attendees were managers at tech companies or app developers. Throughout the event, enthusiasm for AI was high, with people exchanging their own perspectives on AI and sharing how they were putting it to use. I learned a great deal from those conversations.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/weekly/issue-151/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>weekly</category><category>swiftui</category><author>Fatbobman</author></item><item><title>AI Wanted to Give Up. The Human Didn’t. - Fatbobman&apos;s Swift Weekly #150</title><link>https://fatbobman.com/en/weekly/issue-150/</link><guid isPermaLink="true">https://fatbobman.com/en/weekly/issue-150/</guid><description>Recently, while debugging an issue in the Intel Xe GPU driver, Linus Torvalds went through what he himself called a “⁠debug session from hell.” The eventual fix was almost absurdly simple: changing a `round_up()` to a `round_down()`. But finding that single line took 24 debugging patches and 18 kernel boots. Much of the tedious work along the way was done with the help of AI.</description><pubDate>Mon, 24 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently, while debugging an issue in the Intel Xe GPU driver, Linus Torvalds went through what he himself called a “⁠debug session from hell.” The eventual fix was almost absurdly simple: changing a `round_up()` to a `round_down()`. But finding that single line took 24 debugging patches and 18 kernel boots. Much of the tedious work along the way was done with the help of AI.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/weekly/issue-150/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>weekly</category><category>swiftui</category><author>Fatbobman</author></item><item><title>From Using AI to Delegating Work to AI (Part 1): Why I No Longer Wait for Stronger Models</title><link>https://fatbobman.com/en/posts/from-using-ai-to-delegating-work-to-ai/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/from-using-ai-to-delegating-work-to-ai/</guid><description>From Q&amp;A and code generation to letting agents take on more complete pieces of work, I have now been using AI for several years.</description><pubDate>Wed, 19 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;From Q&amp;A and code generation to letting agents take on more complete pieces of work, I have now been using AI for several years.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/from-using-ai-to-delegating-work-to-ai/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>ai</category><author>Fatbobman</author></item><item><title>From Using AI to Delegating Work to AI (Part 2): What I Mean by Delegability</title><link>https://fatbobman.com/en/posts/from-using-ai-to-delegating-work-to-ai-2/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/from-using-ai-to-delegating-work-to-ai-2/</guid><description>How to build a trusted AI collaborator? Discover &quot;delegatability&quot; using a deterministic runtime and external docs, featuring a practical Task-Driven workflow guide.</description><pubDate>Wed, 19 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How to build a trusted AI collaborator? Discover &quot;delegatability&quot; using a deterministic runtime and external docs, featuring a practical Task-Driven workflow guide.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/from-using-ai-to-delegating-work-to-ai-2/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>ai</category><author>Fatbobman</author></item><item><title>Who Is the Slower App Review Process Actually Stopping? - Fatbobman&apos;s Swift Weekly #149</title><link>https://fatbobman.com/en/weekly/issue-149/</link><guid isPermaLink="true">https://fatbobman.com/en/weekly/issue-149/</guid><description>Slower App Store reviews have become something more and more developers can clearly feel. In the age of vibe coding, the cost of building and iterating on apps has dropped dramatically, so it is not hard to understand why the review system is under greater pressure. The problem is that longer review times seem to be little more than a system overwhelmed by a growing volume of submissions, without a corresponding increase in the barriers that keep scam apps out of the store.</description><pubDate>Mon, 17 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Slower App Store reviews have become something more and more developers can clearly feel. In the age of vibe coding, the cost of building and iterating on apps has dropped dramatically, so it is not hard to understand why the review system is under greater pressure. The problem is that longer review times seem to be little more than a system overwhelmed by a growing volume of submissions, without a corresponding increase in the barriers that keep scam apps out of the store.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/weekly/issue-149/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>weekly</category><category>swiftui</category><author>Fatbobman</author></item><item><title>ContentBuilder Explained: The Secret Behind SwiftUI&apos;s Type-Checking Speedup</title><link>https://fatbobman.com/en/posts/contentbuilder-explained/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/contentbuilder-explained/</guid><description>In WWDC 2026, Apple engineers introduced a new SwiftUI feature — ContentBuilder. From the usage perspective, it seems to be nothing more than a ViewBuilder with a wider scope. Apple also claims this adjustment can significantly improve type-checking performance. This article will dissect the essence of ContentBuilder and explore the secrets behind the performance boost.</description><pubDate>Wed, 12 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In WWDC 2026, Apple engineers introduced a new SwiftUI feature — ContentBuilder. From the usage perspective, it seems to be nothing more than a ViewBuilder with a wider scope. Apple also claims this adjustment can significantly improve type-checking performance. This article will dissect the essence of ContentBuilder and explore the secrets behind the performance boost.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/contentbuilder-explained/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><author>Fatbobman</author></item><item><title>Controlling Orphans in SwiftUI Text: Uncovering the Undocumented avoidsOrphans</title><link>https://fatbobman.com/en/posts/controlling-orphans-in-swiftui-text/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/controlling-orphans-in-swiftui-text/</guid><description>SwiftUI&apos;s Text has a default behavior: when the final line of a paragraph is left holding a single stranded word or character, it proactively pushes the complete word group from the preceding line down to join it, so that nothing is left standing alone. This bit of thoughtfulness is right most of the time, but it comes at a cost — the preceding line may be left with a wide gap. In narrow containers, or in mixed Chinese-English typesetting, that can end up disrupting the balance of the paragraph rather than preserving it.</description><pubDate>Thu, 06 Aug 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SwiftUI&apos;s Text has a default behavior: when the final line of a paragraph is left holding a single stranded word or character, it proactively pushes the complete word group from the preceding line down to join it, so that nothing is left standing alone. This bit of thoughtfulness is right most of the time, but it comes at a cost — the preceding line may be left with a wide gap. In narrow containers, or in mixed Chinese-English typesetting, that can end up disrupting the balance of the paragraph rather than preserving it.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/controlling-orphans-in-swiftui-text/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><author>Fatbobman</author></item><item><title>Liquid Glass: A Field Guide to UIKit Compatibility Pitfalls</title><link>https://fatbobman.com/en/posts/liquid-glass-a-field-guide-to-uikit-compatibility-pitfalls/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/liquid-glass-a-field-guide-to-uikit-compatibility-pitfalls/</guid><description>Although Liquid Glass has been around for two years, the compatibility issues it introduced haven’t completely disappeared. Drawing on a real-world project, SLIT_STUDIO developer Megabits summarizes several common UIKit adaptation pitfalls and the solutions he used to address them.</description><pubDate>Wed, 29 Jul 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Although Liquid Glass has been around for two years, the compatibility issues it introduced haven’t completely disappeared. Drawing on a real-world project, SLIT_STUDIO developer Megabits summarizes several common UIKit adaptation pitfalls and the solutions he used to address them.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/liquid-glass-a-field-guide-to-uikit-compatibility-pitfalls/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><category>guest post</category><author>Fatbobman</author></item><item><title>Debugging Notes on Two SwiftUI Animation Bugs</title><link>https://fatbobman.com/en/posts/debugging-notes-on-two-swiftui-animation-bugs/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/debugging-notes-on-two-swiftui-animation-bugs/</guid><description>Easy-to-use animation has always been one of SwiftUI&apos;s defining features. But the nature of a declarative framework is a double-edged sword: once an animation misbehaves, tracking down the cause is often trickier than in an imperative framework. This post records two SwiftUI animation bugs I ran into over the past two weeks, along with how I tracked each of them down.</description><pubDate>Wed, 01 Jul 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Easy-to-use animation has always been one of SwiftUI&apos;s defining features. But the nature of a declarative framework is a double-edged sword: once an animation misbehaves, tracking down the cause is often trickier than in an imperative framework. This post records two SwiftUI animation bugs I ran into over the past two weeks, along with how I tracked each of them down.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/debugging-notes-on-two-swiftui-animation-bugs/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><author>Fatbobman</author></item><item><title>From Size Class to Available Space: Is horizontalSizeClass Still Reliable?</title><link>https://fatbobman.com/en/posts/from-size-class-to-available-space/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/from-size-class-to-available-space/</guid><description>Starting with WWDC 26, when an iPhone app is mirrored to a Mac through iPhone Mirroring, its window can be freely resized. At the same time, iPhone-only apps running on iPad will also enter a resizable environment. Even without updating a physical device to a beta system, developers can already experience this change through Xcode 27 previews or the iOS 27 simulation environment in Device Hub.</description><pubDate>Wed, 17 Jun 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Starting with WWDC 26, when an iPhone app is mirrored to a Mac through iPhone Mirroring, its window can be freely resized. At the same time, iPhone-only apps running on iPad will also enter a resizable environment. Even without updating a physical device to a beta system, developers can already experience this change through Xcode 27 previews or the iOS 27 simulation environment in Device Hub.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/from-size-class-to-available-space/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><author>Fatbobman</author></item><item><title>Core Data + Observation: From Property-Level Reactivity to a Freer Mental Model</title><link>https://fatbobman.com/en/posts/core-data-observation-freer-mental-model/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/core-data-observation-freer-mental-model/</guid><description>The introduction of the Observation framework has refined SwiftUI’s state reactivity from the object level down to the property level, significantly reducing many unnecessary view computations caused by coarse-grained observation. I recently explored and implemented Observation support in Core Data Evolution, giving `NSManagedObject` property-level precise observation capabilities. This article discusses the motivation behind this feature, how to use it, its implementation approach, the engineering challenges involved, and some of the trade-offs made during development.</description><pubDate>Wed, 03 Jun 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The introduction of the Observation framework has refined SwiftUI’s state reactivity from the object level down to the property level, significantly reducing many unnecessary view computations caused by coarse-grained observation. I recently explored and implemented Observation support in Core Data Evolution, giving `NSManagedObject` property-level precise observation capabilities. This article discusses the motivation behind this feature, how to use it, its implementation approach, the engineering challenges involved, and some of the trade-offs made during development.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/core-data-observation-freer-mental-model/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>core data</category><category>concurrency</category><category>swiftui</category><author>Fatbobman</author></item><item><title>Taming Row Height and Spacing Jumps in SwiftUI List with a Custom Layout</title><link>https://fatbobman.com/en/posts/taming-row-height-and-spacing-jumps/</link><guid isPermaLink="true">https://fatbobman.com/en/posts/taming-row-height-and-spacing-jumps/</guid><description>The declarative expression of animation is one of SwiftUI&apos;s core strengths. But in some scenarios the result isn&apos;t always as smooth as we&apos;d hope. A typical example: when the content height inside a `List` row changes dynamically — a subtitle going from empty to non-empty, or text changing its line count after an update — the system&apos;s built-in layout engine often fails to produce a continuous transition. Instead we get visible height jumps, flicker, or even clipping anomalies. This article starts from that phenomenon, peels back the causes layer by layer, and gives a solution built entirely on SwiftUI&apos;s native primitives. Along the way it revisits a few key constraints in SwiftUI&apos;s layout machinery.</description><pubDate>Wed, 27 May 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The declarative expression of animation is one of SwiftUI&apos;s core strengths. But in some scenarios the result isn&apos;t always as smooth as we&apos;d hope. A typical example: when the content height inside a `List` row changes dynamically — a subtitle going from empty to non-empty, or text changing its line count after an update — the system&apos;s built-in layout engine often fails to produce a continuous transition. Instead we get visible height jumps, flicker, or even clipping anomalies. This article starts from that phenomenon, peels back the causes layer by layer, and gives a solution built entirely on SwiftUI&apos;s native primitives. Along the way it revisits a few key constraints in SwiftUI&apos;s layout machinery.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;https://fatbobman.com/en/posts/taming-row-height-and-spacing-jumps/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><author>Fatbobman</author></item><item><title>【Tips】Why Child @State Won&apos;t Update from Parent in SwiftUI</title><link>https://fatbobman.com/en/snippet/why-child-state-won-not-update-from-parent-in-swiftui/</link><guid isPermaLink="true">https://fatbobman.com/en/snippet/why-child-state-won-not-update-from-parent-in-swiftui/</guid><description>Assigning values to @State in init usually fails on updates. Discover the mechanics of SwiftUI View Identity and the correct data flow patterns to fix this common issue.</description><pubDate>Thu, 18 Dec 2025 08:21:01 GMT</pubDate><content:encoded>&lt;p&gt;Assigning values to @State in init usually fails on updates. Discover the mechanics of SwiftUI View Identity and the correct data flow patterns to fix this common issue.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;/en/snippet/why-child-state-won-not-update-from-parent-in-swiftui/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>swiftui</category><author>Fatbobman</author></item><item><title>【Tips】Fixing GTM Events in Partytown: Forwarding dataLayer &amp; gtag</title><link>https://fatbobman.com/en/snippet/how-to-forward-custom-tag-events-to-gtm-running-inside-partytown/</link><guid isPermaLink="true">https://fatbobman.com/en/snippet/how-to-forward-custom-tag-events-to-gtm-running-inside-partytown/</guid><description>Did your GA4 events stop working after optimizing with Partytown? Learn how to configure the `forward` property in Astro to bridge `gtag` and `dataLayer.push` between the main thread and Web Workers.</description><pubDate>Mon, 08 Dec 2025 14:20:00 GMT</pubDate><content:encoded>&lt;p&gt;Did your GA4 events stop working after optimizing with Partytown? Learn how to configure the `forward` property in Astro to bridge `gtag` and `dataLayer.push` between the main thread and Web Workers.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;/en/snippet/how-to-forward-custom-tag-events-to-gtm-running-inside-partytown/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>web</category><category>performance</category><category>astro</category><author>Fatbobman</author></item><item><title>【Tips】Faster Swift 6 Builds: Enabling SwiftSyntax Prebuilts</title><link>https://fatbobman.com/en/snippet/speed-up-compilation-with-prebuilt-swift-syntax/</link><guid isPermaLink="true">https://fatbobman.com/en/snippet/speed-up-compilation-with-prebuilt-swift-syntax/</guid><description>Is compiling Swift Macros slowing you down? Learn how to enable SwiftSyntax Prebuilts in Swift 6.1+ to significantly slash Xcode build times.</description><pubDate>Fri, 06 Jun 2025 00:20:00 GMT</pubDate><content:encoded>&lt;p&gt;Is compiling Swift Macros slowing you down? Learn how to enable SwiftSyntax Prebuilts in Swift 6.1+ to significantly slash Xcode build times.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;/en/snippet/speed-up-compilation-with-prebuilt-swift-syntax/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><author>Fatbobman</author></item><item><title>【Tips】Swift package Access Level: Sharing Code Across Targets Securely</title><link>https://fatbobman.com/en/snippet/controlling-access-within-a-swift-package/</link><guid isPermaLink="true">https://fatbobman.com/en/snippet/controlling-access-within-a-swift-package/</guid><description>Learn how to share code between multiple Targets within a Swift Package without exposing it publicly. We explore the `package` access modifier to bridge the gap between `internal` and `public`.</description><pubDate>Thu, 08 May 2025 14:21:01 GMT</pubDate><content:encoded>&lt;p&gt;Learn how to share code between multiple Targets within a Swift Package without exposing it publicly. We explore the `package` access modifier to bridge the gap between `internal` and `public`.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;/en/snippet/controlling-access-within-a-swift-package/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><author>Fatbobman</author></item><item><title>【Tips】Fixing SwiftLint Configuration for Monorepos in VSCode &amp; Cursor</title><link>https://fatbobman.com/en/snippet/fixing-swiftlint-configuration-not-working-in-monorepo-projects/</link><guid isPermaLink="true">https://fatbobman.com/en/snippet/fixing-swiftlint-configuration-not-working-in-monorepo-projects/</guid><description>SwiftLint ignoring your root config in VSCode or Cursor? Learn how to set `configSearchPaths` and structure your Monorepo to share linting rules across multiple packages.</description><pubDate>Thu, 24 Apr 2025 14:20:00 GMT</pubDate><content:encoded>&lt;p&gt;SwiftLint ignoring your root config in VSCode or Cursor? Learn how to set `configSearchPaths` and structure your Monorepo to share linting rules across multiple packages.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;/en/snippet/fixing-swiftlint-configuration-not-working-in-monorepo-projects/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>dev tools</category><author>Fatbobman</author></item><item><title>【Tips】VSCode/Cursor Core Data: Manually Compiling xcdatamodeld for Tests</title><link>https://fatbobman.com/en/snippet/how-to-test-core-data-code-in-vscode-cursor/</link><guid isPermaLink="true">https://fatbobman.com/en/snippet/how-to-test-core-data-code-in-vscode-cursor/</guid><description>Core Data unit tests failing in VSCode or Cursor? Learn how to configure the Xcode toolchain and use `xcrun momc` to manually compile `.xcdatamodeld` files.</description><pubDate>Tue, 15 Apr 2025 14:21:01 GMT</pubDate><content:encoded>&lt;p&gt;Core Data unit tests failing in VSCode or Cursor? Learn how to configure the Xcode toolchain and use `xcrun momc` to manually compile `.xcdatamodeld` files.&lt;/p&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&gt;&lt;a href=&quot;https://fatbobman.com/zh/rss.xml&quot;&gt;&lt;b&gt;订阅中文版 RSS&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   &lt;div style=&quot;margin-top: 20px;&quot;&gt;
                   &lt;p&quot;&gt;&lt;a href=&quot;/en/snippet/how-to-test-core-data-code-in-vscode-cursor/&quot;&gt;&lt;b&gt;Read More&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
                   &lt;/div&gt;
                   </content:encoded><category>computing</category><category>swift</category><category>learning</category><category>programming</category><category>swift-programming</category><category>ios-development</category><category>core data</category><author>Fatbobman</author></item></channel></rss>