Sign in

Jacob Bartlett 🍺

@jacobstechtavern.com
471 followers 1.1K following 2.9K posts

Writing the #1 iOS newsletter on Substack. Turbocharge your Swift career with in-depth weekly articles 🚀 Sign up free today! join.jacobstechtavern.com

PostsRepliesMedia
Jacob Bartlett 🍺 @jacobstechtavern.com · 11/11/2025
You can find it on my substack if you subscribe! - join.jacobstechtavern.com
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
040
Jacob Bartlett 🍺 @jacobstechtavern.com · 11/11/2025
Proof of Concept, yeah, I did an Android app powered by Swift and an iOS app powered by Colin.
030
Jacob Bartlett 🍺 @jacobstechtavern.com · 04/11/2025
My life was a lie. It turns out the shiny new Mutex was just syntax sugar on `os_unfair_lock` all along 👻 Read my full article to see how performance of this Mutex in the Synchronisation framework compares against Swift actors: blog.jacobstechtavern.com/p/the-synchr...
040
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
out to my paid subs by Tuesday 11. Support my journey to independence by subscribing for free: join.jacobstechtavern.com
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
concurrency course as a new pillar in why someone should become a paid subscriber. Think like a game where each level is an increasingly difficult puzzle that you have to solve with a different tool, or combination of tools, in Swift Concurrency. With my full focus this week, I'm aiming to get it
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
crazy. I think my potential positive avenues vis-a-vis sponsorship has reduced the intensity with which I'm going to try and muck around with LeetCode. Depends on my runway though. Spent the last part of the day planning out my “Swift Concurrency Kata” which is going to join in with my
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
Thanks a ton to to Alex Bush and Pierluigi Cifani 🙏 I have an interview with a very legendary figure in the iOS community tomorrow, so I spent the rest of the day prepping the various questions I want to ask. With the rest of the day, I actually managed to get a gym session in which is
210
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
vs Swift for Android post. Fortunately/unfortunately, they team had just merged in a way to interop Async/Await with swift-java. This dramatically improves the ergonomics, but I had to re-write my whole f*cking project. Got it out in time. Managed to get some people to proofread my stuff.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
Indie creator log day 13/100 (before my wife makes me get a real job) ARR growth: +$636. I can proudly announce I have achieved minimum wage 🎉 If I can release a banger like this every week we might be getting somewhere. Spent the day rushing to finish my Kotlin Multiplatform
220
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
Be among the first to read my exclusive in-depth comparison: blog.jacobstechtavern.com/p/swift-for-...
blog.jacobstechtavern.com
Swift for Android vs. Kotlin Multiplatform
The "Xbox vs. Playstation" of the multiplatform era
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
It's the "Xbox vs. Playstation" of the multiplatform era. Swift for Android has arisen to challenge the dominance of Kotlin Multiplatform. The prize? The hearts and souls of native mobile engineers everywhere.
120
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
See the full article: blog.jacobstechtavern.com/p/swiftui-sc...
blog.jacobstechtavern.com
SwiftUI Scroll Performance: The 120FPS Challenge
Squeezing high performance from the magic
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
SwiftUI can run into very painful performance problems when dealing with infinite scrolling feeds. Today, we will investigate these performance problems, understand why they happen, and explore techniques to mitigate them, making your SwiftUI performance buttery smooth 🧈.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
To achieve the maximum 120Hz refresh rate, the main thread has to execute all layout computation and rendering in 8.3ms to avoid a frame drop: the dreaded hitch. With system overhead, you’re lucky to get 5ms for this work.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 03/11/2025
SwiftUI is like magic. But, like all well-designed magic systems, it comes with a cost. What, you thought that beautiful declarative syntax and automatic data bindings come free? Think again.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 02/11/2025
Here’s the trace showing these dropped frames and micro-hangs. Overall, though, it wasn’t terrible considering the unfair example I used (with random cell heights). See the full article here: blog.jacobstechtavern.com/p/swiftui-sc...
blog.jacobstechtavern.com
SwiftUI Scroll Performance: The 120FPS Challenge
Squeezing high performance from the magic
020
Jacob Bartlett 🍺 @jacobstechtavern.com · 02/11/2025
If you programmatically scroll to a specific cell way off-screen, SwiftUI suddenly has to run all this layout computation, causing a big performance hit. With dynamically-sized cells, we see a visible degradation in performance, with several dropped frames.
110
Jacob Bartlett 🍺 @jacobstechtavern.com · 02/11/2025
LazyVStack dynamically estimates geometry based on the number of views. What does this mean practically? Let’s imagine your views are all dynamically sized, or your layout contains cells with varying heights.
110
Jacob Bartlett 🍺 @jacobstechtavern.com · 02/11/2025
The 120FPS SwiftUI challenge: Pushing LazyVStack with dynamic sizing Let’s take a look at dynamically-sized cells. Because LazyVStack sizing and layout computations are performed on-demand, we are trading off some accuracy to get this performance.
140
Jacob Bartlett 🍺 @jacobstechtavern.com · 02/11/2025
Read The Meme that gave me Imposter Syndrome: A primer on type attributes in functions today! blog.jacobstechtavern.com/p/the-meme-t...
blog.jacobstechtavern.com
The Meme that gave me Imposter Syndrome
A primer on type attributes in functions
010
Jacob Bartlett 🍺 @jacobstechtavern.com · 02/11/2025
Advanced Swift tips: Argument Attributes It's not every day a meme gives you imposter syndrome, but this showed me I knew nothing about argument attributes. To fix this knowledge gap, I built an app implementing a function using @escaping @Sendable @MainActor @autoclosure
250
Jacob Bartlett 🍺 @jacobstechtavern.com · 01/11/2025
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 01/11/2025
My favourite Swift feature is switching over self on enum computed properties and it’s not close What’s your favourite? Master Swift for 10 mins a week @ join.jacobstechtavern.com
040
Jacob Bartlett 🍺 @jacobstechtavern.com · 01/11/2025
Jacob’s Tech Tavern is hiring!! 🚀 I need to pay someone £10 a pop to hit me over the head with a bat whenever I touch my Facebook ads Pls apply in the comments below
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 01/11/2025
I need to find a way to integrate these kinds of stats into Jacob's Tech Tavern. I reckon I'm sleeping on some great viral shareability. What stats would people like to see?
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
You after reading Jacob’s Tech Tavern for 10 minutes (sorry for the slop 😅)
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
to stop touching the ads but dreams of paid acquisition consume my every waking moment. Support me pls my family is starving: join.jacobstechtavern.com
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
I spent all day writing "Swift for Android vs Kotlin Multiplatform". Coming Monday. Also fixed some boring tracking stuff with my ads. Annoyingly, after a great first day, the Meta algo ate 98% of my ad spend on the Apple Notes ad with zero extra results. Turned the f*cker off. I really need
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
Indie creator log day 10/100 (before my wife makes me get a real job) ARR growth: +$455 🚀 this is the first day since I started where the ARR growth is actually on-plan, so I’m gonna have a beer to celebrate. Uuhh I was super busy writing so forgot to do this as I went along.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
First they came for the URL.appendingPathComponent(_:), but I was not a path component, so I said nothing...
010
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
of coding. I hope you guys don't mind that I'm constantly talking about paid acquisition instead of something interesting like building a dev tool. But I've got to brush my teeth before I can drink my beer. You know what I mean? Support me here: join.jacobstechtavern.com
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
It's just the subscribe button that I'm trying to track was being ignored in favour of the subscribe quick link that is added to the bottom of the page by default. Thanks Beehiv! I cannot believe you didn't test this once. It's not fun to debug this. It's not like coding, it's like… a sh*t version
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
But damn, I hate it. I can't believe that before App Tracking Transparency and cookies, you could literally just track people and it would work perfectly. I feel like maybe privacy has gone too far. After debugging the tracking again, it looks like it is working fine.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
growth engine of about $1 per signup. Remember to tip your marketing guy because it is incredibly annoying to set up this tracking and attribution. It's so fiddly, I mean, I'm sort of already quite good at it because every time it broke, the marketing people would always make it my problem.
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
getting incredibly cheap clicks but terrible landing-page conversion, so I ran an A/B test, creating a variant where traffic is sent to Beehiv page with a free subscriber break. Interested to see if this converts better, because if I can get 33% conversion on this page, we have an ultra-cheap
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
very profitable engine where I reinvest revenue into inorganic growth, and Surprisingly good results with my Apple-Notes-style ad, so will keep that one running. Re-made the carousel with my thumbnails, mostly because I’m very attached to it. My “Apple is Killing Swift” creative is still
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
or even get a rough draft ready. Maybe tomorrow I can do a LeetCode marathon if I get this post finished. I have a killer thumbnail though, I won’t spoil it yet. Spent the morning looking at my ads. They are actually getting pretty cheap now. If I can successfully sell ad space, I can see a
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
I make for my work because it's pretty obvious that if I post an article about this ASAP, it'll probably make me some money. If you want me to save you the time, don't do it. It took me forever to get my head around the weird broken bridging so I didn’t get a chance to self-flaggelate via leetcode
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
Indie creator log day 9/100 (before my wife makes me get a real job) ARR growth: +$142, despite getting 4 new paid subs in the last 24 hours. Make it make sense! I spent quite a lot of my day smashing my head against Kotlin Multiplatform and Swift for Android. This is the sort of suffering
220
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
benchmarked their performance versus Actors. Learn them here: blog.jacobstechtavern.com/p/the-synchr...
blog.jacobstechtavern.com
The Synchronization Framework in Swift 6
Performance testing the new concurrency primitives
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
Swift 6 and iOS 18 introduce the Synchronization framework, containing two new low-level concurrency primitives — Mutex and Atomics.  These features could only be introduced with Swift 6 because they are implemented using the brand-new generic ownership mechanics. I tested them out and
110
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
of coding. I hope you guys don't mind that I'm constantly talking about paid acquisition instead of something interesting like building a dev tool. But I've got to brush my teeth before I can drink my beer. You know what I mean? Support me here: join.jacobstechtavern.com
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
000
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
It's just the subscribe button that I'm trying to track was being ignored in favour of the subscribe quick link that is added to the bottom of the page by default. Thanks Beehiv! I cannot believe you didn't test this once. It's not fun to debug this. It's not like coding, it's like… a sh*t version
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
But damn, I hate it. I can't believe that before App Tracking Transparency and cookies, you could literally just track people and it would work perfectly. I feel like maybe privacy has gone too far. After debugging the tracking again, it looks like it is working fine.
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
growth engine of about $1 per signup. Remember to tip your marketing guy because it is incredibly annoying to set up this tracking and attribution. It's so fiddly, I mean, I'm sort of already quite good at it because every time it broke, the marketing people would always make it my problem.
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
getting incredibly cheap clicks but terrible landing-page conversion, so I ran an A/B test, creating a variant where traffic is sent to Beehiv page with a free subscriber break. Interested to see if this converts better, because if I can get 33% conversion on this page, we have an ultra-cheap
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
very profitable engine where I reinvest revenue into inorganic growth, and Surprisingly good results with my Apple-Notes-style ad, so will keep that one running. Re-made the carousel with my thumbnails, mostly because I’m very attached to it. My “Apple is Killing Swift” creative is still
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
or even get a rough draft ready. Maybe tomorrow I can do a LeetCode marathon if I get this post finished. I have a killer thumbnail though, I won’t spoil it yet. Spent the morning looking at my ads. They are actually getting pretty cheap now. If I can successfully sell ad space, I can see a
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
make for my work because it's pretty obvious that if I post an article about this ASAP, it'll probably make me some money. If you want me to save you the time, don't do it. It took me forever to get my head around the weird broken bridging so I didn’t get a chance to self-flaggelate via leetcode
join.jacobstechtavern.com
Jacob's Tech Tavern
Sign up free
100
Jacob Bartlett 🍺 @jacobstechtavern.com · 31/10/2025
Indie creator log day 9/100 (before my wife makes me get a real job) ARR growth: +$142, despite getting 4 new paid subs in the last 24 hours. Make it make sense! I spent quite a lot of my day smashing my head against Kotlin Multiplatform and Swift for Android. This is the sort of suffering I
100