<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Comments for swiftyplace	</title>
	<atom:link href="http://www.swiftyplace.com/comments/feed" rel="self" type="application/rss+xml" />
	<link>http://www.swiftyplace.com</link>
	<description>Learn how to build amazing apps with SwiftUI and Combine</description>
	<lastBuildDate>Wed, 30 Jul 2025 12:05:55 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>
		Comment on How to Clean Xcode Junk and Reclaim Valuable Disk Space on Your Mac by William		</title>
		<link>http://www.swiftyplace.com/blog/how-to-clean-xcode-on-your-mac#comment-1001643</link>

		<dc:creator><![CDATA[William]]></dc:creator>
		<pubDate>Wed, 09 Jul 2025 21:16:49 +0000</pubDate>
		<guid isPermaLink="false">https://www.swiftyplace.com/?p=1005369#comment-1001643</guid>

					<description><![CDATA[This was extremely helpful for the development of my IOS applications I cannot thank you any more.]]></description>
			<content:encoded><![CDATA[<p>This was extremely helpful for the development of my IOS applications I cannot thank you any more.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on How to Load a SwiftUI WebView with WKWebView by Dip		</title>
		<link>http://www.swiftyplace.com/blog/loading-a-web-view-in-swiftui-with-wkwebview#comment-1001497</link>

		<dc:creator><![CDATA[Dip]]></dc:creator>
		<pubDate>Fri, 16 May 2025 07:15:43 +0000</pubDate>
		<guid isPermaLink="false">https://swiftyplace.com/?p=799#comment-1001497</guid>

					<description><![CDATA[problem is in my code loading is going on ..]]></description>
			<content:encoded><![CDATA[<p>problem is in my code loading is going on ..</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Why We Keep Avoiding Tests in iOS—And What the Tools Should Do About It by Tomasz		</title>
		<link>http://www.swiftyplace.com/blog/testing-in-ios-development#comment-1001483</link>

		<dc:creator><![CDATA[Tomasz]]></dc:creator>
		<pubDate>Sat, 10 May 2025 12:14:10 +0000</pubDate>
		<guid isPermaLink="false">https://www.swiftyplace.com/?p=1005510#comment-1001483</guid>

					<description><![CDATA[Hi, this is a good summary of existing apple delivered tooling, as well as the challenge with constructing actually meaningful test plans for a mobile product. 
I was wondering if you had experience with more 3rd party solutions. I had experience with maestro, both locally and in ci/cd environment. Below are my thoughts on it: 
- Easy test writing experience (they really focus on that) 
- Ability to write one set of test scenarios for apps on multiple platforms (Android and ios can be driven same way) 
- Only some simulators / devices are available
- Provide ci environment managed by parent company (which is nice)  

Overall I am still left searching for a solution to drive UI tests in CI/CD environment.]]></description>
			<content:encoded><![CDATA[<p>Hi, this is a good summary of existing apple delivered tooling, as well as the challenge with constructing actually meaningful test plans for a mobile product.<br />
I was wondering if you had experience with more 3rd party solutions. I had experience with maestro, both locally and in ci/cd environment. Below are my thoughts on it:<br />
&#8211; Easy test writing experience (they really focus on that)<br />
&#8211; Ability to write one set of test scenarios for apps on multiple platforms (Android and ios can be driven same way)<br />
&#8211; Only some simulators / devices are available<br />
&#8211; Provide ci environment managed by parent company (which is nice)  </p>
<p>Overall I am still left searching for a solution to drive UI tests in CI/CD environment.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Why We Keep Avoiding Tests in iOS—And What the Tools Should Do About It by Jim Stutsman		</title>
		<link>http://www.swiftyplace.com/blog/testing-in-ios-development#comment-1001479</link>

		<dc:creator><![CDATA[Jim Stutsman]]></dc:creator>
		<pubDate>Fri, 09 May 2025 13:39:41 +0000</pubDate>
		<guid isPermaLink="false">https://www.swiftyplace.com/?p=1005510#comment-1001479</guid>

					<description><![CDATA[Being a *very* old developer (my first program was written 58 years ago in FORTRAN) I tend to use old school methods. I&#039;ve been working in iOS for 14 years, and still learning. Switching from Objective C to Swift to SwiftUI has been a bit of a chore, and I&#039;ve yet to even try to get up to speed on testing. My testing tools of choice are breakpoints and print statements, which are not as useful in SwiftUI, but are more useful than the memory dumps that were our main tool back in the day. I&#039;m pleased to see that you are working on improving this area, and I look forward to the next installment.]]></description>
			<content:encoded><![CDATA[<p>Being a *very* old developer (my first program was written 58 years ago in FORTRAN) I tend to use old school methods. I&#8217;ve been working in iOS for 14 years, and still learning. Switching from Objective C to Swift to SwiftUI has been a bit of a chore, and I&#8217;ve yet to even try to get up to speed on testing. My testing tools of choice are breakpoints and print statements, which are not as useful in SwiftUI, but are more useful than the memory dumps that were our main tool back in the day. I&#8217;m pleased to see that you are working on improving this area, and I look forward to the next installment.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on How to Customise the SwiftUI List Style and Background Color by lee		</title>
		<link>http://www.swiftyplace.com/blog/customise-list-view-appearance-in-swiftui-examples-beyond-the-default-stylings#comment-1001464</link>

		<dc:creator><![CDATA[lee]]></dc:creator>
		<pubDate>Mon, 05 May 2025 11:38:40 +0000</pubDate>
		<guid isPermaLink="false">https://swiftyplace.com/?p=1061#comment-1001464</guid>

					<description><![CDATA[hi,

Is there a way to add a shadow to a List? I used the .plain style because I don’t want any spaces between the sections

thanks]]></description>
			<content:encoded><![CDATA[<p>hi,</p>
<p>Is there a way to add a shadow to a List? I used the .plain style because I don’t want any spaces between the sections</p>
<p>thanks</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on How to Use and Customize SwiftUI Label by Six game		</title>
		<link>http://www.swiftyplace.com/blog/swiftui-label-style-swift#comment-1001426</link>

		<dc:creator><![CDATA[Six game]]></dc:creator>
		<pubDate>Mon, 28 Apr 2025 12:18:04 +0000</pubDate>
		<guid isPermaLink="false">https://www.swiftyplace.com/?p=3397#comment-1001426</guid>

					<description><![CDATA[Great post! I really appreciate the detailed examples on customizing SwiftUI Labels. The tips on using different image and text combinations were particularly helpful. Looking forward to trying out the techniques you shared!]]></description>
			<content:encoded><![CDATA[<p>Great post! I really appreciate the detailed examples on customizing SwiftUI Labels. The tips on using different image and text combinations were particularly helpful. Looking forward to trying out the techniques you shared!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Better Navigation in SwiftUI with NavigationStack by SPRUNKI phase 8		</title>
		<link>http://www.swiftyplace.com/blog/better-navigation-in-swiftui-with-navigation-stack#comment-1001421</link>

		<dc:creator><![CDATA[SPRUNKI phase 8]]></dc:creator>
		<pubDate>Fri, 25 Apr 2025 09:12:28 +0000</pubDate>
		<guid isPermaLink="false">https://swiftyplace.com/?p=432#comment-1001421</guid>

					<description><![CDATA[Great insights on utilizing NavigationStack in SwiftUI! The examples you provided make it much easier to understand how to implement dynamic navigation in our apps. Looking forward to more content like this!]]></description>
			<content:encoded><![CDATA[<p>Great insights on utilizing NavigationStack in SwiftUI! The examples you provided make it much easier to understand how to implement dynamic navigation in our apps. Looking forward to more content like this!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on SwiftUI ForEach: More Than Just Loops in Swift by 1xbet Official APP		</title>
		<link>http://www.swiftyplace.com/blog/swiftui-foreach-more-than-just-loops-in-swift#comment-1001416</link>

		<dc:creator><![CDATA[1xbet Official APP]]></dc:creator>
		<pubDate>Mon, 21 Apr 2025 21:38:22 +0000</pubDate>
		<guid isPermaLink="false">https://swiftyplace.com/?p=435#comment-1001416</guid>

					<description><![CDATA[Great insights on using ForEach in SwiftUI! I never realized how powerful it could be for building dynamic interfaces. The examples really helped clarify its flexibility. Looking forward to trying out the techniques you&#039;ve shared!]]></description>
			<content:encoded><![CDATA[<p>Great insights on using ForEach in SwiftUI! I never realized how powerful it could be for building dynamic interfaces. The examples really helped clarify its flexibility. Looking forward to trying out the techniques you&#8217;ve shared!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on The Composable Architecture: How Architectural Design Decisions Influence Performance by Karin Prater		</title>
		<link>http://www.swiftyplace.com/blog/the-composable-architecture-performance#comment-1001365</link>

		<dc:creator><![CDATA[Karin Prater]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 09:40:04 +0000</pubDate>
		<guid isPermaLink="false">https://www.swiftyplace.com/?p=1005492#comment-1001365</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;http://www.swiftyplace.com/blog/the-composable-architecture-performance#comment-1001341&quot;&gt;TCAUser&lt;/a&gt;.

I appreciate your comment, but I think you might be misunderstanding how TCA&#039;s architecture actually works under the hood.

Yes, TCA has scoping - but scoping doesn&#039;t change the fundamental dependency flow in the architecture. Let me explain the difference:

&lt;strong&gt;What Actually Happens in TCA&lt;/strong&gt;

1. Dependency Flow: The `Store&lt;AppState, AppAction&gt;` is indeed passed down through the entire view hierarchy as a dependency. Look at how views are structured in TCA:

&lt;code&gt;
struct RootView: View {
    let store: Store&lt;AppState, AppAction&gt;
    
    var body: some View {
        HomeView(store: store) // Passing the entire store down
    }
}

struct HomeView: View {
    let store: Store&lt;AppState, AppAction&gt; // Gets the ENTIRE store as a dependency
    
    var body: some View {
        WithViewStore(store, observe: { state in
            // Only observe the specific parts we need
            return state.userProfile
        }) { viewStore in
            Text(&quot;Hello, \(viewStore.name)&quot;)
            ProfileView(store: store) // Continues passing the entire store down
        }
    }
}

struct ProfileView: View {
    let store: Store&lt;AppState, AppAction&gt; // Again, the ENTIRE store
    
    var body: some View {
        // More UI and potentially more views that receive the store
    }
}
&lt;/code&gt;

The store containing the entire global state is passed down through initializers at each level. This is not something I made up - it&#039;s directly from TCA&#039;s design and standard usage pattern.

2. ViewStore as an Optimization: The `WithViewStore` wrapper is precisely the workaround TCA introduced to deal with the performance problems of having the entire state available everywhere.

The confusion comes from conflating two different things:
- The actual dependency (the Store with full state that flows through initializers)
- The optimization layer (ViewStore that projects specific parts for SwiftUI updates)

&lt;strong&gt;Scoping Doesn&#039;t Change the Dependency Flow&lt;/strong&gt;

When you use `scope()` to create a child store:

&lt;code&gt;let profileStore = store.scope(
    state: { $0.profile },
    action: { AppAction.profile($0) }
)&lt;/code&gt;


You&#039;re creating a lens into the parent store. But the parent store (with the full state) still exists, and the child store is still connected to it. Actions sent to the child store flow back to the parent store and go through the entire reducer hierarchy.

The scoping is indeed &quot;tricking&quot; the view updating system. It&#039;s an optimization layer on top of an architecture that fundamentally passes the entire state tree through the system.

&lt;strong&gt;Why This Matters&lt;/strong&gt;

This distinction is important because the performance issues reported by many developers stem from this exact architectural decision. Even with scoping, TCA still:

1. Processes all actions through the entire reducer hierarchy
2. Maintains a single global state struct
3. Requires diffing the entire state to detect changes

Scoping helps with view updates, but it doesn&#039;t change these fundamental aspects of the architecture that create performance bottlenecks at scale.

&lt;strong&gt; Not a Criticism, Just Architecture Analysis&lt;/strong&gt;

This isn&#039;t about criticizing TCA - it&#039;s about understanding the trade-offs in its design. Every architecture makes trade-offs, and TCA prioritizes predictability and testability over raw performance. That&#039;s a valid choice, but one developers should understand when adopting it.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="http://www.swiftyplace.com/blog/the-composable-architecture-performance#comment-1001341">TCAUser</a>.</p>
<p>I appreciate your comment, but I think you might be misunderstanding how TCA&#8217;s architecture actually works under the hood.</p>
<p>Yes, TCA has scoping &#8211; but scoping doesn&#8217;t change the fundamental dependency flow in the architecture. Let me explain the difference:</p>
<p><strong>What Actually Happens in TCA</strong></p>
<p>1. Dependency Flow: The `Store<AppState, AppAction>` is indeed passed down through the entire view hierarchy as a dependency. Look at how views are structured in TCA:</p>
<p><code><br />
struct RootView: View {<br />
    let store: Store<AppState, AppAction></p>
<p>    var body: some View {<br />
        HomeView(store: store) // Passing the entire store down<br />
    }<br />
}</p>
<p>struct HomeView: View {<br />
    let store: Store<AppState, AppAction> // Gets the ENTIRE store as a dependency</p>
<p>    var body: some View {<br />
        WithViewStore(store, observe: { state in<br />
            // Only observe the specific parts we need<br />
            return state.userProfile<br />
        }) { viewStore in<br />
            Text("Hello, \(viewStore.name)")<br />
            ProfileView(store: store) // Continues passing the entire store down<br />
        }<br />
    }<br />
}</p>
<p>struct ProfileView: View {<br />
    let store: Store<AppState, AppAction> // Again, the ENTIRE store</p>
<p>    var body: some View {<br />
        // More UI and potentially more views that receive the store<br />
    }<br />
}<br />
</code></p>
<p>The store containing the entire global state is passed down through initializers at each level. This is not something I made up &#8211; it&#8217;s directly from TCA&#8217;s design and standard usage pattern.</p>
<p>2. ViewStore as an Optimization: The `WithViewStore` wrapper is precisely the workaround TCA introduced to deal with the performance problems of having the entire state available everywhere.</p>
<p>The confusion comes from conflating two different things:<br />
&#8211; The actual dependency (the Store with full state that flows through initializers)<br />
&#8211; The optimization layer (ViewStore that projects specific parts for SwiftUI updates)</p>
<p><strong>Scoping Doesn&#8217;t Change the Dependency Flow</strong></p>
<p>When you use `scope()` to create a child store:</p>
<p><code>let profileStore = store.scope(<br />
    state: { $0.profile },<br />
    action: { AppAction.profile($0) }<br />
)</code></p>
<p>You&#8217;re creating a lens into the parent store. But the parent store (with the full state) still exists, and the child store is still connected to it. Actions sent to the child store flow back to the parent store and go through the entire reducer hierarchy.</p>
<p>The scoping is indeed &#8220;tricking&#8221; the view updating system. It&#8217;s an optimization layer on top of an architecture that fundamentally passes the entire state tree through the system.</p>
<p><strong>Why This Matters</strong></p>
<p>This distinction is important because the performance issues reported by many developers stem from this exact architectural decision. Even with scoping, TCA still:</p>
<p>1. Processes all actions through the entire reducer hierarchy<br />
2. Maintains a single global state struct<br />
3. Requires diffing the entire state to detect changes</p>
<p>Scoping helps with view updates, but it doesn&#8217;t change these fundamental aspects of the architecture that create performance bottlenecks at scale.</p>
<p><strong> Not a Criticism, Just Architecture Analysis</strong></p>
<p>This isn&#8217;t about criticizing TCA &#8211; it&#8217;s about understanding the trade-offs in its design. Every architecture makes trade-offs, and TCA prioritizes predictability and testability over raw performance. That&#8217;s a valid choice, but one developers should understand when adopting it.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on The Composable Architecture: How Architectural Design Decisions Influence Performance by Karin Prater		</title>
		<link>http://www.swiftyplace.com/blog/the-composable-architecture-performance#comment-1001364</link>

		<dc:creator><![CDATA[Karin Prater]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 09:28:19 +0000</pubDate>
		<guid isPermaLink="false">https://www.swiftyplace.com/?p=1005492#comment-1001364</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;http://www.swiftyplace.com/blog/the-composable-architecture-performance#comment-1001354&quot;&gt;NoNeed&lt;/a&gt;.

My personal preference is Vanilla Swiftui. Use MVVM with Reposiory pattern to separate out logic and get testing capabilities.
For larger more complex flows, Coordinators are greate because they can take care of the navigation logic. This allows you thinks like programmatic navigation, deep linking.
I prefer a simple approach when starting a project and then adapt and introduce more design patterns as the app grows. 
These topics are quite vaste and I will for sure write and make videos about them (including more complex demo projects)]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="http://www.swiftyplace.com/blog/the-composable-architecture-performance#comment-1001354">NoNeed</a>.</p>
<p>My personal preference is Vanilla Swiftui. Use MVVM with Reposiory pattern to separate out logic and get testing capabilities.<br />
For larger more complex flows, Coordinators are greate because they can take care of the navigation logic. This allows you thinks like programmatic navigation, deep linking.<br />
I prefer a simple approach when starting a project and then adapt and introduce more design patterns as the app grows.<br />
These topics are quite vaste and I will for sure write and make videos about them (including more complex demo projects)</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: www.swiftyplace.com @ 2026-07-02 12:12:25 by W3 Total Cache
-->