Matthaus Woolard
@hishnash
Data Scientist, #Python and #SwiftLang, macOS/iPadOS app developer
Starting with Swift 6.2 and iOS 26, we can use enumerated() in SwiftUI List and ForEach views without wrapping it in an array. I wrote a post with some examples and notes on when we should avoid using the offset as an index or id: nilcoalescing.com/blog/UsingEnum…
There are a few changes to search in iOS and iPadOS 26, including a new Liquid Glass design. I’ve been looking into what changed, what we get automatically, and what we can adjust with the new SwiftUI APIs, and put together a detailed summary: nilcoalescing.com/blog/SwiftUISe…
Step through the essential setup for AlarmKit timers in iOS 26, from requesting authorization and scheduling a countdown to presenting the Live Activity and an in-app list of active timers: nilcoalescing.com/blog/Countdown…
#Mac tool alert! 💻 EncodeDecode from @nilcoalescing is a lightweight menu bar app that simplifies URL encoding and decoding on macOS. Designed for developers and power users, it offers convenient access and customization options to fit your workflow. apps.apple.com/us/app/encoded…
iOS 26 comes with a few updates to sheets, like the Liquid Glass background in partial height and morphing transitions from the toolbar buttons that present them. My new blog post explores how we can take advantage of these changes in our SwiftUI apps: nilcoalescing.com/blog/Presentin…
Starting with Swift 6.2 and iOS 26, EnumeratedSequence conforms to RandomAccessCollection, allowing enumerated() to be used directly in ForEach and List views in SwiftUI: nilcoalescing.com/blog/UsingEnum…
I've just published a new video! It covers two ways to use matchedGeometryEffect() in SwiftUI: transitioning between views when one is removed and another added, and moving a selection marker by matching the geometry of a non-source view to a source. ▶️ youtu.be/i87zOQubYoI
Build a stretchy image header in SwiftUI using the visualEffect() modifier, scaling the image on pull-down without tracking scroll offset or modifying its frame: nilcoalescing.com/blog/StretchyH…
In iOS 26 we have a new framework called AlarmKit for scheduling alarms and timers that cut through silent mode and Focus. I've been experimenting with countdown timers and wrote a detailed post walking through the setup: nilcoalescing.com/blog/Countdown…
Strolly by @NilCoalescing , @natpanferova , @hishnash , issue #20. Discover more, subscribe! createwithswift.com/subscribe/
The new backgroundExtensionEffect() modifier in iOS 26 lets us extend and blur visual content beyond a view’s bounds in SwiftUI apps, creating continuous backgrounds behind elements like sidebars, inspectors, and overlay controls: nilcoalescing.com/blog/Backgroun…
My WWDC25 sale will be active for another few days. You can still get any of my Swift and SwiftUI books with a 30% discount if you haven’t had a chance yet: books.nilcoalescing.com All purchases come with free lifetime updates, and I’ll be refreshing them later this year.
I’ve been exploring the new Liquid Glass UI for our walking app Strolly, which has lots of custom controls layered on top of the map. I recorded the session and just uploaded it to YouTube. ▶️ youtu.be/sEi9T5eZO1c

Stretchy headers are a common pattern in iOS apps where the image expands as the user pulls down. We can create this effect in SwiftUI using the visualEffect() modifier without changing the image frame. I've just published a post about it: nilcoalescing.com/blog/StretchyH…
This is incredible, in case you missed it nilcoalescing.com/blog/MeshGradi… by @NilCoalescing
I started trying out the new SwiftUI APIs from #WWDC25 and was experimenting with backgroundExtensionEffect(). It extends and blurs content beyond the safe area, useful for continuing visuals behind sidebars or other overlays. Wrote a post about it: nilcoalescing.com/blog/Backgroun…
SwiftUI TextEditor now supports AttributedString 👀 #WWDC25
Some #WWDC25 sessions are already available! developer.apple.com/wwdc25/session…
Happy #WWDC25 🎉 It's 5am in New Zealand and we are ready to go ☕️🚀