Sign in

Paul Hudson

@twostraws.bsky.social
6.6K followers 77 following 520 posts

I write Swift and write about Swift, but most people prefer my dogs.

PostsRepliesMedia
Paul Hudson @twostraws.bsky.social · 21h
Every polished demo you've ever watched was built multiple times behind the scenes. Making mistakes isn't a sign you're failing - it's how learning actually works. www.hackingwithswift.com/articles/271...
hackingwithswift.com
Making mistakes while learning Swift
Tired of making mistakes while learning to code? You're not alone.
030
Paul Hudson @twostraws.bsky.social · 07/10/2026
I'm pleased to announce v2.0 of my SwiftUI Pro agent skill! It's packed with improvements based on real-world testing of iOS 27 and iPhone Duo, and also integrates a variety of advice from Apple's own skills. Get it here: github.com/twostraws/sw...
github.com
GitHub - twostraws/SwiftUI-Agent-Skill: SwiftUI agent skill for Claude Code, Codex, and other AI tools.
SwiftUI agent skill for Claude Code, Codex, and other AI tools. - twostraws/SwiftUI-Agent-Skill
2151
Paul Hudson @twostraws.bsky.social · 07/10/2026
For HWS+ subscribers: There's more to good networking than just fetching data. NWPathMonitor and URLSessionConfiguration let you respect the user's connection, wait for connectivity, and avoid expensive requests. www.hackingwithswift.com/plus/network...
hackingwithswift.com
User-friendly network access – Hacking with Swift+
Anyone can write Swift code to fetch network data, but much harder is knowing how to write code to do it respectfully. In this article we’ll look at building a considerate network stack, taking into a...
010
Paul Hudson @twostraws.bsky.social · 06/10/2026
Codable structs and enums work as SwiftData properties, but collections like [String] get stored as binary data and can't be used in predicates. Tread *carefully*. www.hackingwithswift.com/quick-start/...
hackingwithswift.com
Using structs and enums in SwiftData models - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
061
Paul Hudson @twostraws.bsky.social · 05/10/2026
Long, complex type annotations got a bit more manageable. Write _ for the parts you want Swift to infer, and spell out only what matters. A small addition, but surprisingly handy when working with deeply nested generic types. 🧩 www.hackingwithswift.com/swift/5.6/ty...
hackingwithswift.com
Type placeholders – available from Swift 5.6
Type placeholders example code from Swift 5.6
040
Paul Hudson @twostraws.bsky.social · 04/10/2026
Sunday Build with HWS+: Build a SwiftData app that monitors your Xcode build times, then calculates how much time and money you'd save by upgrading hardware. #SundayBuild www.hackingwithswift.com/plus/live-st...
hackingwithswift.com
Upgrade your Mac – Hacking with Swift+
In this stream we're going to build a SwiftUI and SwiftData app that monitors how long Xcode takes to build your projects, then uses that to calculate how much time and money you would save by upgradi...
182
Paul Hudson @twostraws.bsky.social · 02/10/2026
The .drawOn symbol effect animates SF Symbols as if they're being drawn with a pen, with three speed options for controlling how layers animate. www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to make SF Symbols draw themselves - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
050
Paul Hudson @twostraws.bsky.social · 01/10/2026
"But Paul, couldn't you have updated your skill without first using an iPhone Duo?" Sure I could, but that's not how I work – I want to see exactly what agents get wrong with real code on a real device, not guess and risk causing problems with your projects.
000
Paul Hudson @twostraws.bsky.social · 01/10/2026
Sneak peek: There's a reason I went to an iPhone Duo workshop this week. Big skill update coming this week! 👀
221
Paul Hudson @twostraws.bsky.social · 01/10/2026
There's an open-source SwiftUI agent skill that catches the mistakes AI tools keep making: deprecated modifiers, accessibility gaps, performance pitfalls. One command to install, and your AI-generated SwiftUI gets a serious quality boost. www.hackingwithswift.com/articles/282...
hackingwithswift.com
SwiftUI Agent Skill - Write better code with Claude, Codex, and other AI tools
Improve the AI-written code in all your SwiftUI projects with my free agent skill
3142
Paul Hudson @twostraws.bsky.social · 01/10/2026
📨 The Kickstart newsletter: every issue will have one tip for App Store success, and the latest news on my Kickstart app. It will be fairly irregular, and sent only when I have something to say. First issue goes out today! newsletter.kickstart.tools
newsletter.kickstart.tools
Kickstart news and app growth tips
Subscribe to the Kickstart newsletter, and grow your success on the App Store.
010
Paul Hudson @twostraws.bsky.social · 01/10/2026
📨 The Kickstart newsletter: every issue will have one tip for App Store success, and the latest news on my Kickstart app. It will be fairly irregular, and sent only when I have something to say. First issue goes out today! newsletter.kickstart.tools
newsletter.kickstart.tools
Kickstart news and app growth tips
Subscribe to the Kickstart newsletter, and grow your success on the App Store.
011
Paul Hudson @twostraws.bsky.social · 30/09/2026
For HWS+ subscribers: When JSON is messy or completely unstructured, Codable becomes more trouble than it's worth. A custom JSON type with @dynamicMemberLookup can let you dig through any structure using clean dot syntax. www.hackingwithswift.com/plus/working...
hackingwithswift.com
Parsing difficult JSON – Hacking with Swift+
If you have nice, clean JSON then using Swift and Codable is like a dream come true. But what if you have messy JSON, or JSON where you really don’t know what you’ll receive ahead of time? In this art...
041
Paul Hudson @twostraws.bsky.social · 29/09/2026
You can pass multiple configurations into a single ModelContainer, handy for keeping some data in permanent storage and others in memory only. Just remember: related models must always share the same store! www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to add multiple configurations to a ModelContainer - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
010
Paul Hudson @twostraws.bsky.social · 28/09/2026
Migrating a large project to Swift concurrency is a big ask all at once. @preconcurrency lets you annotate modules and individual APIs as "pre-concurrency" to suppress warnings incrementally, buying yourself time to migrate properly. www.hackingwithswift.com/swift/5.6/pr...
hackingwithswift.com
More concurrency changes – available from Swift 5.6
More concurrency changes example code from Swift 5.6
081
Paul Hudson @twostraws.bsky.social · 27/09/2026
Sunday Build with HWS+: Why not try a deceptively simple SwiftUI game: tap the one green circle in a grid of red ones before time runs out, with multiple difficulty variations to keep things interesting. #SundayBuild www.hackingwithswift.com/plus/live-st...
hackingwithswift.com
Flashlight – Hacking with Swift+
In this stream we're going to build a trivial game with SwiftUI, but then look at ways we can make it more interesting through difficulty variations – there's so much room to experiment!
061
Paul Hudson @twostraws.bsky.social · 25/09/2026
The symbolEffect() modifier adds bounce, pulse, variable color, and rotation animations to SF Symbols with almost no effort. Multi-layer symbols can even animate each layer individually ✨ www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to animate SF Symbols - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
030
Paul Hudson @twostraws.bsky.social · 23/09/2026
For HWS+ subscribers: A* isn't guaranteed to find the single perfect route, but it's fast, practical, and close enough to optimal that it's the go-to choice for path finding in both games and apps. www.hackingwithswift.com/plus/algorit...
hackingwithswift.com
A* path finding – Hacking with Swift+
The A* algorithm for path finding is not the perfect way to find an optimal route between two nodes in a graph, but it is either the best or darned close most of the time and that makes it a fantastic...
031
Paul Hudson @twostraws.bsky.social · 22/09/2026
Add -com.apple.CoreData.SQLDebug 1 as a launch argument and you can watch exactly what SwiftData is doing under the hood. Tip: don't delete it when you're done, just uncheck the box so it's ready when you need it again 🔍 www.hackingwithswift.com/quick-start/...
hackingwithswift.com
Using launch arguments to debug SwiftData and Core Data - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
0143
Paul Hudson @twostraws.bsky.social · 21/09/2026
Primary associated types let you write any Collection<String> instead of juggling type erasure. It's a cleaner, more expressive way to work with protocols that have associated types you care about. www.hackingwithswift.com/swift/5.7/pr...
hackingwithswift.com
Lightweight same-type requirements for primary associated types – available from Swift 5.7
Lightweight same-type requirements for primary associated types example code from Swift 5.7
061
Paul Hudson @twostraws.bsky.social · 20/09/2026
Sunday Build with HWS+: Bake a slice of Pi! Create a macOS app that helps you memorize the digits of pi by mapping numbers to letters, then building stories from them. 🥧 #SundayBuild www.hackingwithswift.com/plus/live-st...
hackingwithswift.com
Slice of Pi – Hacking with Swift+
In this stream we're going to build a macOS app that helps you remember the digits of pi. The concept is simple, and a rough implementation is simple, but then we'll make it better!
043
Paul Hudson @twostraws.bsky.social · 20/09/2026
Sunday Build with HWS+: Bake a slice of Pi! Create a macOS app that helps you memorize the digits of pi by mapping numbers to letters, then building stories from them. 🥧 #SundayBuild www.hackingwithswift.com/plus/live-st...
hackingwithswift.com
Slice of Pi – Hacking with Swift+
In this stream we're going to build a macOS app that helps you remember the digits of pi. The concept is simple, and a rough implementation is simple, but then we'll make it better!
011
Paul Hudson @twostraws.bsky.social · 19/09/2026
Today's Hacking with Swift+ livestream is at 5pm UK time / 9am Pacific! We're going hard on Foundation Models with Private Cloud Compute – easily my favorite iOS 27 feature. We're building a complete app from scratch, and as usual I hope someone ships it! www.hackingwithswift.com/plus
hackingwithswift.com
Hacking with Swift+
Subscribe to Hacking with Swift+ and get advanced Swift tutorials to help take your career to the next level.
021
Paul Hudson @twostraws.bsky.social · 16/09/2026
It took two months to build Kickstart 2.0 because it was so feature-packed. 2.1 will ship faster, but to help you stay up to date I'm starting a (very irregular!) email newsletter – Kickstart news, yes, but also app growth tips and more. Sign up free here: newsletter.kickstart.tools
newsletter.kickstart.tools
Main landing page
Subscribe to the Kickstart newsletter, and grow your success on the App Store.
040
Paul Hudson @twostraws.bsky.social · 14/09/2026
One thing that *isn't* changing is the price: Kickstart is still just $2.99/week or $69.99/year. Find the perfect keywords, create marketing videos, build press kits, track Apple Ads, explore the paywalls of successful apps, and more, all in one Mac app! www.kickstart.tools
kickstart.tools
Kickstart: The app that helps indie developers ship
Kickstart is the Mac app for tracking App Store keywords, optimizing Apple Ads, understanding reviews and analytics, and growing your app.
000
Paul Hudson @twostraws.bsky.social · 14/09/2026
And there's more – a built-in tool to calculate optimal app pricing! Big Picture mode to track your entire app portfolio in one place! Support for Xcode 27 and Device Hub, and even more! 😎
211
Paul Hudson @twostraws.bsky.social · 14/09/2026
Fifth, on macOS Golden Gate Kickstart 2.0 can take full advantage of Private Cloud Compute to deliver the most advanced privacy-focused AI analysis around. Plus for macOS 26.3 users, Kickstart is now optimized for the improved Foundation Models context window.
100
Paul Hudson @twostraws.bsky.social · 14/09/2026
Fourth, Kickstart Screens is an all-new library of app reviews that pick out key details from the best-selling apps across the store – their onboarding, paywalls, key features, and more, *including* the search terms each of them rank highest for.
100
Paul Hudson @twostraws.bsky.social · 14/09/2026
Third, Keyword Trends and Search Suggestions help you uncover emerging search trends ahead of the pack – see how the App Store is likely to autocomplete key searches, and watch their trends rise and fall with a full year of history 📈
100
Paul Hudson @twostraws.bsky.social · 14/09/2026
Second, Keyword Explorer generates alternative search terms for each of your keywords, then automatically analyzes the search popularity of the alternatives so you can find the perfect combination ✨
100
Paul Hudson @twostraws.bsky.social · 14/09/2026
What's new in Kickstart 2.0? I'm glad you asked! First, you can now opt in to tracking keyword search popularity as well as difficulty and App Store rankings – stop guessing, and start relying on real data, updated daily!
100
Paul Hudson @twostraws.bsky.social · 14/09/2026
I'm really pleased to announce Kickstart 2.0 is available now, with huge upgrades for keyword tracking, private AI integration, design inspiration, and more! www.kickstart.tools/blog/kicksta...
kickstart.tools
Kickstart 2.0: The best ASO tool just got better
Kickstart’s keyword tracking has had a huge upgrade, making it easier than ever to find winning keywords on the App Store.
250
Paul Hudson @twostraws.bsky.social · 13/09/2026
Final checks complete: Kickstart 2.0 is ready to launch tomorrow, alongside macOS Golden Gate. It is *packed* with incredible new features, and I can't wait to share them with you 🤩
0101
Paul Hudson @twostraws.bsky.social · 13/09/2026
Sunday Build with HWS+: Ship a language learning app designed to help you master hiragana and katakana, introducing new characters one at a time and reinforcing them through repetition. #SundayBuild www.hackingwithswift.com/plus/live-st...
hackingwithswift.com
Kana Quest – Hacking with Swift+
In this stream we're going to build a small app for language learners, then add some upgrades to make it both more pretty and more useful.
451
Paul Hudson @twostraws.bsky.social · 11/09/2026
SwiftUI's PhotosPicker brings up the system photo picker and supports powerful filtering: screenshots only, everything except videos, or any combination you need. www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to let users select pictures using PhotosPicker - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
070
Paul Hudson @twostraws.bsky.social · 10/09/2026
Agent skills are lightweight Markdown files that teach AI coding assistants things they don't already know, like deprecated APIs and platform-specific edge cases. They load into context on demand, so nothing gets wasted. www.hackingwithswift.com/articles/283...
hackingwithswift.com
Agent skills in Xcode: How to install and use them today
Get agent skills for Swift, SwiftUI, Swift Testing, and more
4131
Paul Hudson @twostraws.bsky.social · 09/09/2026
For HWS+ subscribers: register(defaults:) is a much cleaner way to set initial UserDefaults values, and this article also covers sharing preferences across app extensions and syncing them to iCloud. Worth a look: www.hackingwithswift.com/plus/making-...
hackingwithswift.com
Storing preferences efficiently – Hacking with Swift+
Apple’s UserDefaults system lets us store small amounts of user data for our app, which might sound simple but it’s deceptively powerful. In this article I’ll show you the correct way to create initia...
010
Paul Hudson @twostraws.bsky.social · 08/09/2026
FetchDescriptor gives you fine-grained control over your SwiftData queries - filtering, sorting, fetch limits, pagination, and even which properties to load. A lot of power in one place: www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to create a custom FetchDescriptor - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
020
Paul Hudson @twostraws.bsky.social · 07/09/2026
I'm doing some research on App Store keywords and could use some help. If you have a moment, please (anonymously!) add your app's App Store keywords here: forms.gle/ezY6hwSfTMt2... – don't post the app's name or URL; I don't want to know. Just some of the keywords you care about.
forms.gle
Anonymous App Store Keywords
I'm doing some research on App Store keywords, and would appreciate it if you could enter the keywords your app uses below. Please DO NOT identify your app – no app name or subtitle! I do NOT want to ...
044
Paul Hudson @twostraws.bsky.social · 07/09/2026
Protocols with Self or associated type requirements used to be restricted from use as existential types. That restriction is lifted, so any Equatable and similar are now valid where they previously were not. www.hackingwithswift.com/swift/5.7/un...
hackingwithswift.com
Unlock existentials for all protocols – available from Swift 5.7
Unlock existentials for all protocols example code from Swift 5.7
041
Paul Hudson @twostraws.bsky.social · 06/09/2026
Sunday Build with HWS+: Minesweeper, built entirely in SwiftUI? Oh yes! Simple rules, surprisingly tricky logic, and a great exercise in grid-based game design. #SundayBuild www.hackingwithswift.com/plus/live-st...
hackingwithswift.com
Minesweeper – Hacking with Swift+
Despite this game originally being made in the early 80s, Minesweeper remains as popular as ever. But can we make it wholly with SwiftUI? Of course we can!
0110
Paul Hudson @twostraws.bsky.social · 04/09/2026
Some SF Symbols support variable coloring, where different parts fill based on a fraction between 0 and 1. Bind that value to a slider or other state and the icon updates in real time. www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to dynamically adjust the color of an SF Symbol - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
050
Paul Hudson @twostraws.bsky.social · 03/09/2026
One of the most popular videos I ever made: a rapid-fire tour of all core Swift concepts designed to be watched in a single sitting, from optionals to protocols to closures. Great for learners reviewing fundamentals or folks switching from other languages! www.hackingwithswift.com/articles/242...
hackingwithswift.com
Learn essential Swift in one hour
Here’s the least you need to know to get started with Swift.
092
Paul Hudson @twostraws.bsky.social · 02/09/2026
For HWS+ subscribers: Sprinkling optionals across your Codable types handles version changes but creates real semantic confusion. Nested versioned structs keep your main type clean and contain all the messy migration logic in one place. www.hackingwithswift.com/plus/interme...
hackingwithswift.com
Versioning Codable data – Hacking with Swift+
Codable is the fastest and easiest way to store Swift objects, but what happens when your data types need to evolve to add extra information? In this tutorial I’ll show you the traditional way this is...
131
Paul Hudson @twostraws.bsky.social · 02/09/2026
It looks like Kickstart Exchange will pass 300 apps in just a couple of days – who wants to be the lucky number? 🙂 Indie developers promoting other indie developers, all free: exchange.kickstart.tools
exchange.kickstart.tools
Kickstart Exchange: free advertising for indie app developers
Your app shows ads for other indie apps, and every two shown earn one view of yours. Free, with no user tracking.
130
Paul Hudson @twostraws.bsky.social · 01/09/2026
True one-to-one relationships in SwiftData require both sides to be optional, or you'll hit a chicken-and-egg problem at creation time. www.hackingwithswift.com/quick-start/...
hackingwithswift.com
How to create one-to-one relationships - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
121
Paul Hudson @twostraws.bsky.social · 31/08/2026
Pro tip for folks working with Apple documentation: add ".md" to the end of a URL to get it as Markdown – much lighter to load, and also friendlier for agents. Example: developer.apple.com/documentatio...
developer.apple.com
24310
Paul Hudson @twostraws.bsky.social · 31/08/2026
Opaque return types used to mean a single concrete type hidden behind some Protocol. Structural opaque types extend this so you can return things like (some View, some View) or [some Hashable] - more flexibility, same type safety guarantees. www.hackingwithswift.com/swift/5.7/st...
hackingwithswift.com
Structural opaque result types – available from Swift 5.7
Structural opaque result types example code from Swift 5.7
021
Paul Hudson @twostraws.bsky.social · 30/08/2026
I totally missed that Kickstart Exchange has now passed 250 apps – we're at 265 now! Not bad for less than two weeks of existence 😎 Promote your apps for free! exchange.kickstart.tools
exchange.kickstart.tools
Kickstart Exchange: free advertising for indie app developers
Your app shows ads for other indie apps, and every two shown earn one view of yours. Free, with no user tracking.
020
Paul Hudson @twostraws.bsky.social · 28/08/2026
New on the Kickstart blog: Free App Store optimization tools for indie developers 💸 Seven free browser tools and guides for improving your App Store keywords, pricing, metadata, reviews, screenshots, icons, and press kit. www.kickstart.tools/blog/free-ap...
kickstart.tools
Free App Store optimization tools for indie developers
Seven free browser tools and guides for improving your App Store keywords, pricing, metadata, reviews, screenshots, icons, and press kit.
0152