I'm wasting so much time getting drag and drop working properly with SwiftUI for this project. I don't think the .draggable(...) APIs can do what I need, so I've dropped down to UIKit, but even then it's such a mess to get working properly with SwiftUI 😩
Using .draggable(...) is there a way to detect that a drag interaction has started and ended for a view?
I think I’ve managed to achieve the behavior I want using pure SwiftUI, which makes me weirdly happy. I might have made a compromise or two on the visuals in order to do it with pure SwiftUI, but that’s a trade-off I’m OK with for now.

This project forces me to build some of the most advanced UIs I've ever built, and I enjoy it so much.

* A text editor is also quite advanced, but not in the UI, really, it's more in the internals.

There are so many things to build as part of this project. I just spent a few hours building a custom font picker 😀
Just purchased the domain for what I think will be the name for this project at launch 🙊
If you’re the hacker type or living rent-free in my head, you might be able to dig up the tiny “Coming soon” page I put online for this project 😄
Having so much fun with this project! I spent last night and most of today optimizing the main UI for iPad and I think it’s turned out very slick. Might be the best iPad optimization I’ve ever done.
Spending a tremendous amount of time optimizing my app this week in order to avoid hitches during navigation. This is really tricky with a somewhat advanced SwiftUI app. I enjoyed it in the beginning, but I’m really struggling to pinpoint where I can do the remaining optimizations, so it’s starting to feel daunting.
Every of these hitches happen on some common and key navigation in my app and I'm fightning so hard to get rid of them, but… This SwiftUI code is getting the best of me 😢
I'm starting to think that SwiftUI's TextField is a bit expensive on macOS. It seems that once I load ~10 text fields into a view, I'm noticing small hitches.

I've been profiling my app with the SwiftUI template in Instruments a lot over the past week.

I'm at the point where none of the long view body updates relate to my code but mostly to SwiftUI internals.

Most of these updates are caused by @Observable WindowAppearanceModel, which isn't my code. I don't know how I'm supposed to address this.

Have anyone replicated Shortcuts’ transition that changes the zoom destination based on state?

If the shortcut is empty, it zooms back to the “+” button but if actions are added, it zooms into the new item.

I’ve tried naive approaches with matchedTransitionSource(…) and navigationTransition(.zoom(…)) but none seem to work.

About to build a “mosaic” layout in SwiftUI where the size of the views will depend on the properties of the model they represent. Some views will fill the entire screen, and some will be sized to show two-by-two.

If this turns out well, this will be the first thing people see when they open my new app 😀🤞

Seems like the tricky part is figuring out how I can introduce a concept of sections when using SwiftUI’s Layout protocol to place views on the screen 🤔

I know how to do this with a UICollectionViewFlowLayout but I’d like to do it in SwiftUI.

.layoutValue(key:value:) might be the solution here.
Ended up not having much time to work on this layout yesterday but I've made some good progress today. This is more or less how I pictured it.
Very pleased with this API for my mosaic layout.
Project update: Documenting widget sizes for all devices running iOS 26. It's so boring. I just want to get back to coding.
Just came up with an entirely new way to use this app. I think that’d excite the (ultra) power users if I can pull it off 😄
"Scriptable without the script" is the best pitch I have for my new side project so far.
I need to do backend work for this project, so I’m twisting my head looking for ways to avoid doing backend work for this project.
This project allows me to build UI that I've had on my mind for 5 - 6 years. It feels so good to see it come to life and play around with it on my own devices.
For the first time since starting this project, it’s in a state where I can actually use it myself. There are still sooo many features I want to add, but it feels amazing to finally have the core flow working 😃

Getting here has taken longer than usual. Normally, I rush to get the core flow working end-to-end so I can verify everything, and then polish later.

But this project was different. From early prototypes, I knew the technical side would work. The real challenge was designing an interface that felt good enough that I’d actually want to use it. It slowed things down, but I’m glad I did it.

There’s still plenty left to refine (and lots of features to add 😅), but having something usable at this stage feels like a huge milestone.
That’s a milestone reached.
Working on a simple SF Symbol picker for this side project.
Moved the category filter to the bottom of the screen so it’s within reach and tweaked the appearance slightly. It’s starting to feel the way I want it to.
Spending a few hours these Christmas days combining Swift macros, property wrappers, and result builders to build a powerful API that lets me generate large parts of the UI for my upcoming side project. Feels good to get this nerdy again 😄
This evening I nailed a really tricky design challenge in this side project that I’ve spent the past few days pondering. Feels good.
Spent a couple of hours today writing some of the weirdest SwiftUI I’ve ever written. In a small part of this side project, I need to use Mirror to traverse the children of a SwiftUI view hierarchy. Looking forward to show you why 😄
When installing a new productivity app for the first time, what onboarding experience do you prefer?
Add sample item to edit or delete
43.9%
Start fresh with an empty state
51%
Show results
5.1%
Poll ended at .
As much as I dislike large parts of Liquid Glass and would go back to the iOS 18 UI in a heartbeat, I have to admit that Liquid Glass fits quite well with the app I’ve been working on intermittently since early June.
I’m so close to being able to show you the project I’ve been working on since early June (with breaks, for example, to build Festivitas). It has been eight months underway. I’m now using it daily. I hope some of you will too.

Still a few somewhat big features left before I can release this project. Payments is one of them.

I think this will be my first subscription app. My guess is it’ll require a non-negligible amount of changes and testing with every major iOS release, and to make that sustainable, subscriptions feel like the right model.

Looking forward to diving into the subscription APIs in StoreKit… though I’ve heard they can be a bit daunting 😅

Torn between going with Sign in with Apple, or chasing a secure no-signup way to associate push tokens with a user’s devices using CloudKit
(a la https://www.swiftjectivec.com/how-to-use-icloud-without-really-using-icloud/).

Part of me really doesn’t want any kind of account in the app, even if it’s optional or delayed. But I also want something that’s secure and maintainable… which is exactly what Sign in with Apple promises to be.

Trade-offs everywhere. Curious how others have approached this.

How to Use iCloud While Only Kinda Using iCloud

iCloud is the gift that keeps on giving - both good and bad. Let’s see how to leverage one of its best aspects today.

Swiftjective-C

A “no account” solution based on CloudKit could look like this:

1. Device fetches S, a user-specific secret, from the user’s private CloudKit DB, creating it if missing.
2. Device authenticates with
HMAC_SHA256(S, token || deviceId || timestamp || nonce)
3. On first registration, the backend learns S and then groups devices by
userId = SHA256(S), verifying the HMAC and rejecting replays via timestamp and nonce.

This proves knowledge of S, and therefore access to the user’s private CloudKit DB.

I’m experimenting with CloudKit’s public database for user-specific data but it makes my brain itch that it’s called “public”.

I’m pretty sure I’m using it as intended though. Access is scoped, records are tied to the user’s iCloud account, and nothing is actually truly public.

If this holds up, it’s nice. I already sync data in the user’s private database with SwiftData, and this gives me a way to share auxiliary user-bound data with a backend service via CloudKit’s server-to-server support.

Now that brrr is submitted, I can slowly begin turning my attention back to the side project I've been workin on since June.
@simonbs scope creep alert! I was just thinking about some use cases, and how cool it would be if, when brrr received a notification it could optionally trigger a shortcut to run with the notification as input...

@john I haven’t tested it, but I think you can do this by setting `openURL` to a Shortcuts URL scheme when sending a notification with brrr.

You’d have to manually supply the arguments through the query parameters when sending the notification, so it’s not “use the notification as input” but rather “supply an explicit input”, which may be even better.

@simonbs that could work, but I was hoping for background execution (on mac at least).