Paul Hudson
@twostraws.bsky.social
📤 6234
📥 77
📝 367
I write Swift and write about Swift, but most people prefer my dogs.
pinned post!
Today I'm launching my new app, Hacktivate. It teaches real-world computer science skills through 240 "capture the flag" challenges, and works on iPhone, iPad, and Mac with one purchase. I've poured a ton of love into it, and I'd love to hear what you think 🙌
apps.apple.com/gb/app/hackt...
loading . . .
Hacktivate: Capture the Flag
Crack codes. Break firewalls. Conquer the map. Hacktivate is the ultimate cybersecurity challenge: a world map of 240 missions where every puzzle is built on real cybersecurity techniques hackers us...
https://apps.apple.com/gb/app/hacktivate-capture-the-flag/id6748286602
8 months ago
17
164
30
Sunday Build with HWS+: Visualize sorting algorithms step by step in SwiftUI, helping learners see exactly how bubble sort, insertion sort, and others actually work.
#SundayBuild
www.hackingwithswift.com/plus/live-st...
loading . . .
SortVis – Hacking with Swift+
In this stream we're going to build an app that visualizes sorting algorithms, to help learners understand how they work. This requires some algorithm coding wrapped up in a surprisingly small amount ...
https://www.hackingwithswift.com/plus/live-streams/sortvis
5 days ago
0
9
1
AttributedString lets you attach underlines, links, and background colors to your text, all independent of the view rendering it. The real power? It works semantically with dates, names, and measurements too.
www.hackingwithswift.com/quick-start/...
loading . . .
How to add advanced text styling using AttributedString - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftui/how-to-add-advanced-text-styling-using-attributedstring
7 days ago
0
12
0
I help run the WWDC Community repository, which lists events taking place in and around
#WWDC26
. Previously we put indie app discounts there too, but the repo is so big I'm thinking to make a second repo just for that – to list app discounts available during WWDC. Useful or not?
7 days ago
0
7
0
You can control SwiftUI particle effects by tilting your head while wearing AirPods, using gyroscopic sensors most developers don't even know exist. The whole system is built purely in SwiftUI, no SpriteKit or Metal required.
www.hackingwithswift.com/articles/246...
loading . . .
Special Effects with SwiftUI
TimelineView, Canvas, particles, and… AirPods?!
https://www.hackingwithswift.com/articles/246/special-effects-with-swiftui
8 days ago
1
20
1
It's almost
#WWDC26
, which means it's time for my annual sale – you can save 50% on my books and bundles! Pro Swift, Pro SwiftUI, Everything but the Code, and even my gigantic Everything Pack!
www.hackingwithswift.com/offers/wwdc2...
loading . . .
Save up to 50% in the Hacking with Swift WWDC26 sale!
Save big on our books and bundles.
https://www.hackingwithswift.com/offers/wwdc26-50
9 days ago
0
10
2
“Heart rate 170? I’d better ease off with this treadmill.” “Now it’s 175? Damn! I’d better slow down more.” “180?!” *hits Emergency Stop for the first time ever* The moral of this story: wear your glasses at the gym. Signed, someone who just burned 180 kcals 🫠
9 days ago
0
42
2
For HWS+ subscribers: A flock of birds looks like it's thinking as one, but each bird actually just follows three simple rules. 🐦 We can implement Craig Reynolds' boids algorithm in SwiftUI, and the results are beautiful!
www.hackingwithswift.com/plus/algorit...
loading . . .
Flocking with boids – Hacking with Swift+
If you watch a flock of birds you’ll see it exhibits all sorts of complex behaviors as they swarm around in the air – they often stay together but not too close, they move in the same direction but al...
https://www.hackingwithswift.com/plus/algorithms/flocking-with-boids
9 days ago
0
7
1
One of the smallest, simplest features of Kickstart is also one of my favorites – it's a menu bar extra that adds useful developer things I need every day. Another completely free feature of Kickstart!
loading . . .
10 days ago
1
8
2
enumerate() is SwiftData's answer to processing large datasets in batches. The concept is solid, though it's worth profiling in your own project to make sure memory behaves as expected:
www.hackingwithswift.com/quick-start/...
loading . . .
How to enumerate a fetch request to handle lots of data efficiently - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftdata/how-to-enumerate-a-fetch-request-to-handle-lots-of-data-efficiently
10 days ago
0
7
0
LHR ✈️
#WWDC26
#ItBegins
10 days ago
2
12
0
✨ Make your App Store screenshots look great for free, thanks to Kickstart. It integrates my Control Room project, so you can adjust iOS Simulator settings however you want – check out how easy it is!
loading . . .
11 days ago
1
9
1
Swift has always let you throw, but not say what you throw. Typed throws change that - write throws(NetworkError) and callers know exactly what they're dealing with.
www.hackingwithswift.com/swift/6.0/ty...
loading . . .
Typed throws – available from Swift 6.0
Typed throws example code from Swift 6.0
https://www.hackingwithswift.com/swift/6.0/typed-throws
11 days ago
0
7
0
Before you start work on your next Big App Idea, take a moment to check how hard it is to rank on the App Store for your top keywords – it takes just a minute!
loading . . .
12 days ago
1
12
2
Sunday Build with HWS+: Build a macOS app that simulates an assembly language and virtual machine, mixing regex parsing with document-based app features.
#SundayBuild
www.hackingwithswift.com/plus/live-st...
loading . . .
TOM – Hacking with Swift+
In this stream we’re going to build a macOS app that simulates a small assembly language and virtual machine, which is great for learners. Along the way we’ll explore some fun features such as regular...
https://www.hackingwithswift.com/plus/live-streams/tom
12 days ago
1
5
0
✅ "Kickstart makes a developer’s life so much easier." ✅ "The app is jam-packed with features and provides incredible value - even on the free tier." ✅ "I’m in awe of the depth and breadth of tools available." Kickstart: the app that helps indie developers ship 😎
14 days ago
2
18
2
A computed property using .formatted(.currency(code:)) combined with SwiftUI's reactive body means your order total updates live as the user adjusts their tip.
www.hackingwithswift.com/quick-start/...
loading . . .
Formatting interpolated strings in SwiftUI - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftui/formatting-interpolated-strings-in-swiftui
14 days ago
0
8
1
"There is no learning without struggle" - forgetting code, hitting walls, and questioning your career are all part of the process, not signs you're doing it wrong.
www.hackingwithswift.com/articles/252...
loading . . .
8 Things I Wish I Knew When I Started Programming
I don’t have a time machine, but you can learn from my mistakes!
https://www.hackingwithswift.com/articles/252/8-things-i-wish-i-knew-when-i-started-programming
15 days ago
1
12
3
For HWS+ subscribers: Swift refuses to encode arrays of mixed protocol types by default, but a simple enum wrapper solves the problem cleanly.
www.hackingwithswift.com/plus/learn-s...
loading . . .
Using Codable with protocols – Hacking with Swift+
It's easy to encode an array of objects that have the same type, but how can you handle an array of objects with a different type? In this tutorial I'll show you exactly how to do it with a simple and...
https://www.hackingwithswift.com/plus/learn-something-new/using-codable-with-protocols
16 days ago
0
9
3
If you only need a count, don't fetch all the objects just to call .count on the result. fetchCount() does the work entirely in the database and is dramatically faster:
www.hackingwithswift.com/quick-start/...
loading . . .
How to count results without loading them - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftdata/how-to-count-results-without-loading-them
17 days ago
1
9
0
Reviews for Kickstart keep coming in, and my mission today is to read and reply to every one of them – thank you to everyone who took a couple of minutes out to write something, because it really helps for new apps!
18 days ago
8
9
0
Want to count how many elements in a collection match a condition? Rather than filtering then counting, count(where:) does it in one clean step.
www.hackingwithswift.com/swift/6.0/co...
loading . . .
count(where:) – available from Swift 6.0
count(where:) example code from Swift 6.0
https://www.hackingwithswift.com/swift/6.0/count-where
18 days ago
0
11
0
Sunday Build with HWS+: Create a one-touch physics game built with SpriteKit, proving you don't need complex controls to make something fun and addictive.
#SundayBuild
www.hackingwithswift.com/plus/live-st...
loading . . .
Infinite Bounce – Hacking with Swift+
Is it possible to make a fun physics game that can be played with just one touch? It certainly is – and with SpriteKit it’s not even that difficult!
https://www.hackingwithswift.com/plus/live-streams/infinite-bounce
19 days ago
0
10
0
Mesh gradients look beautiful and render fast - just specify a grid of points and colors and SwiftUI handles the rest. Animate the grid points over time for a flowing, dynamic effect 🎨
www.hackingwithswift.com/quick-start/...
loading . . .
How to create a mesh gradient - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-a-mesh-gradient
21 days ago
0
13
1
Current Kickstart work: bringing back features I removed during the TestFlight because they weren't quite polished enough. Hopefully these all land in the next release: - Apple Ads support - SwiftData/Core Data explorer in Overdrive - macOS competitors
apps.apple.com/app/kickstar...
loading . . .
Kickstart - App Accelerator App - App Store
Download Kickstart - App Accelerator by Hudson Heavy Industries on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Kickstart…
https://apps.apple.com/app/kickstart-app-accelerator/id6758355178
22 days ago
1
14
2
The first Kickstart app update has been submitted for review – thank you to everyone who sent in suggestions! The bug fix list is long, but there are some delightful new features too. This one in particular is so much fun 😎
loading . . .
23 days ago
2
12
1
For HWS+ subscribers: SwiftUI's Canvas view is fast, but it's also surprisingly powerful once you start layering contexts, stacking filters, and even dropping into Core Graphics when you need to. Six techniques to take your custom rendering further:
www.hackingwithswift.com/plus/advance...
loading . . .
Getting the most from Canvas – Hacking with Swift+
SwiftUI’s Canvas view is an extremely fast and efficient way to render custom graphics, but it’s also powerful – if you know what you’re doing you can unlock a huge amount of extra functionality to ge...
https://www.hackingwithswift.com/plus/advanced-swiftui/getting-the-most-from-canvas
23 days ago
0
7
2
Try it here – even the free features will really help!
apps.apple.com/gb/app/kicks...
add a skeleton here at some point
24 days ago
0
5
0
One-to-many is the most common SwiftData relationship type - one array on one side, an optional on the other. I'd still recommend making the inverse explicit though:
www.hackingwithswift.com/quick-start/...
loading . . .
How to create one-to-many relationships - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftdata/how-to-create-one-to-many-relationships
24 days ago
0
8
1
Did I mention I have a new app that helps indie developers make more money on the App Store? 😅 I’ve got a box full of stickers to hand out to folks who come to the Indie Fair!
apps.apple.com/gb/app/kicks...
add a skeleton here at some point
25 days ago
0
11
4
Using a protocol as a type always had hidden performance costs compared to using it as a generic constraint. The any keyword makes that distinction explicit, so you can see at a glance when you're working with an existential.
www.hackingwithswift.com/swift/5.6/ex...
loading . . .
Introduce existential any – available from Swift 5.6
Introduce existential any example code from Swift 5.6
https://www.hackingwithswift.com/swift/5.6/existential-any
25 days ago
0
8
1
Thank you to everyone who emailed me with suggestions, feedback, and bug reports for the initial Kickstart release! I'm working on the first update, fixing early bugs. Feature updates will come shortly after! If you hit problems, let me know at
[email protected]
🙌
26 days ago
0
14
2
In the Developer category, only one top 5 app doesn't belong to Apple, and it's Kickstart. If you want to make more money on the App Store, you should download it 🙂 (PS: You get a *ton* of functionality for free!)
27 days ago
5
31
2
There’s a Hacking with Swift+ live stream today, starting in four hours! We’re making another complete app you can ship to the App Store in no time at all – there really is no excuse for not shipping 🙂
www.hackingwithswift.com/plus
loading . . .
Hacking with Swift+
Subscribe to Hacking with Swift+ and get advanced Swift tutorials to help take your career to the next level.
https://www.hackingwithswift.com/plus
28 days ago
0
5
1
Can I make one YouTube video showing all the features in Kickstart? No! But I can certainly try to show off my favorites 😎
youtu.be/nJmzliRXg2M
loading . . .
How to make more money on the App Store
YouTube video by Paul Hudson
https://youtu.be/nJmzliRXg2M
28 days ago
0
12
4
My new Mac app is out today, and I wrote a blog post about it: what it does, who it's for, and what you get for free. (Spoiler: it's a lot! 😅)
www.hackingwithswift.com/articles/285...
loading . . .
Introducing Kickstart: the app that helps indie developers ship
Get the all-in-one workspace for shipping successful apps.
https://www.hackingwithswift.com/articles/285/introducing-kickstart-the-app-that-helps-indie-developers-ship
28 days ago
0
23
4
My new Mac app is out today! It's called Kickstart, and it has just one job: helping indie app developers make more money on the App Store. It is *packed* with features, many of which are completely free. Get it here:
apps.apple.com/app/kickstar...
loading . . .
Kickstart - App Accelerator App - App Store
Download Kickstart - App Accelerator by Hudson Heavy Industries on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Kickstart…
https://apps.apple.com/app/kickstart-app-accelerator/id6758355178
28 days ago
0
33
14
accessibilityInputLabels() lets Voice Control users activate UI controls with custom spoken commands. Without it, they'd have to recite the entire text of a view just to tap a button - imagine doing that when a stock price changes every second.
www.hackingwithswift.com/articles/261...
loading . . .
I screwed up one key accessibility behavior, and now I'm on a mission to do better
Accessibility labels, hints, and grouping are great, but don’t forget to think about Voice Control too.
https://www.hackingwithswift.com/articles/261/i-screwed-up-one-key-accessibility-behavior-and-now-i-m-on-a-mission-to-do-better
29 days ago
0
8
1
Use @Attribute(.externalStorage) to hint to SwiftData that large data like images should live outside the main store. It handles everything transparently, just don't try using those properties in predicates.
www.hackingwithswift.com/quick-start/...
loading . . .
How to store SwiftData attributes in an external file - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftdata/how-to-store-swiftdata-attributes-in-an-external-file
about 1 month ago
0
9
1
Pro tip: Some APIs are fundamentally unsafe to call from async contexts. The @available(*, noasync) attribute lets you mark them as such, so the compiler will warn callers rather than letting subtle bugs slip through at runtime.
www.hackingwithswift.com/swift/5.7/no...
loading . . .
Unavailable from async attribute – available from Swift 5.7
Unavailable from async attribute example code from Swift 5.7
https://www.hackingwithswift.com/swift/5.7/noasync
about 1 month ago
0
10
1
Sunday Build with HWS+: Flashcard apps are great for studying, but making the cards is tedious. This one uses Apple's Foundation Models framework to generate study cards automatically from any text you paste in.
#SundayBuild
www.hackingwithswift.com/plus/live-st...
loading . . .
SnapCards – Hacking with Swift+
Flashcard apps are a fantastic way to study, but making the cards themselves is tedious. We’re going to build a flashcard app that uses Apple's on-device Foundation Models framework to generate study ...
https://www.hackingwithswift.com/plus/live-streams/snapcards
about 1 month ago
1
8
1
Chapter 3 of the Swift AI Playbook is out now, showing how to use text to speech to create beautiful, natural voices locally ✨
www.hackingwithswift.com/store/swift-...
loading . . .
The Swift AI Playbook – Build AI-powered apps on Apple platforms.
Build AI-powered apps on Apple platforms.
https://www.hackingwithswift.com/store/swift-ai-playbook
about 1 month ago
0
5
1
Floof patrol reporting for duty!
about 1 month ago
58
2772
193
📚 SwiftUI colors aren't resolved to specific RGB values until they're drawn, so you need the environment to extract actual components. Use resolve(in:) to get a Color.Resolved you can inspect or encode as JSON.
www.hackingwithswift.com/quick-start/...
loading . . .
How to read the red, green, and blue values from a Color - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftui/how-to-read-the-red-green-and-blue-values-from-a-color
about 1 month ago
1
9
2
A handful of lines of Metal shading language can produce remarkable visual effects in SwiftUI ✨ Inferno is an open-source library of ready-to-use shaders that makes GPU-accelerated graphics accessible to every developer.
www.hackingwithswift.com/articles/262...
loading . . .
Introducing Inferno: Metal shaders for SwiftUI
Blazing-fast special effects for your SwiftUI apps.
https://www.hackingwithswift.com/articles/262/introducing-inferno-metal-shaders-for-swiftui
about 1 month ago
1
12
1
For HWS+ subscribers: A few lines of Core Motion code and suddenly your SwiftUI views respond to how the device is held - screen-blended circles, spinning masks, and even 3D rotations.
www.hackingwithswift.com/plus/swiftui...
loading . . .
Controlling views using the accelerometer – Hacking with Swift+
Reading device motion and orientation is a fast and slightly magical way to incorporate the real world into your apps, and can do a huge amount to add a little spark of delight to your UI. In this art...
https://www.hackingwithswift.com/plus/swiftui-special-effects/controlling-views-using-the-accelerometer
about 1 month ago
0
5
1
Mark a SwiftData property with @Transient and it stays in memory only, never written to disk. Two rules: it needs a default value, and you can't use it in predicates. 💾
www.hackingwithswift.com/quick-start/...
loading . . .
How to make transient attributes in a SwiftData model - a free SwiftData by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftdata/how-to-make-transient-attributes-in-a-swiftdata-model
about 1 month ago
0
2
1
Repeating the same test setup across multiple suites? Swift Testing's TestScoping protocol lets you wrap environment config into a reusable trait and apply it with a single annotation.
www.hackingwithswift.com/swift/6.1/sw...
loading . . .
Swift Testing: Test Scoping Traits – available from Swift 6.1
Swift Testing: Test Scoping Traits example code from Swift 6.1
https://www.hackingwithswift.com/swift/6.1/swift-testing-test-scopes
about 1 month ago
0
5
1
Sunday Build with HWS+: Calendar notifications are easy to miss, but alarms aren't. This app combines EventKit with AlarmKit to turn your events into unmissable alerts that sync to Apple Watch.
#SundayBuild
www.hackingwithswift.com/plus/live-st...
loading . . .
NeverForget – Hacking with Swift+
In this stream we’ll build a trivial app that solves a real problem – my favorite kind of project! Even better, EventKit and AlarmKit do almost all the work for us…
https://www.hackingwithswift.com/plus/live-streams/neverforget
about 1 month ago
0
16
1
With scrollTransition(), you can control opacity, scale, blur, and hue as views enter and leave the visible area of a scroll view.
www.hackingwithswift.com/quick-start/...
loading . . .
How to make views scroll with a custom transition - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
https://www.hackingwithswift.com/quick-start/swiftui/how-to-make-views-scroll-with-a-custom-transition
about 1 month ago
0
10
1
SwiftData handles database creation, relationship management, view updates, and CloudKit sync - all without writing a single line of database code. Build a real app with it from scratch in this tutorial.
www.hackingwithswift.com/articles/263...
loading . . .
Build your first app with SwiftUI and SwiftData
Learn about queries, models, containers, and more, all while building a real app.
https://www.hackingwithswift.com/articles/263/build-your-first-app-with-swiftui-and-swiftdata
about 1 month ago
0
17
0
Load more
feeds!
log in