My Top 10 Wishes for WWDC24

From a SportsKit API and .zoom modifier in SwiftUI, over improved SwiftData and source control in Xcode, to my biggest pain points in tvOS and visionOS, and much more! Blending long-standing requests with fresh ideas.

My Top 10 Wishes for WWDC24

It's become a bit of a habit for me that shortly after Apple announces the dates for the next WWDC, I gather a list of the top things I'm missing in Apples tools and frameworks. My hope is that these summary articles are helpful for Apple engineers to internally confirm or adjust priorities. And so far each year 33% of what I wished for actually came true! Might be a coincidence, but I like it still.

Some of these ideas I filed a radar long ago. But more often than not, taking the time to reflect on the things I'm missing most brings up new things that I don't come across in day-to-day work. So you might find a few obvious things in this list, but I'm sure I also have things you never thought about. I'd love to hear what you think, make sure to comment on socials and mention my handle @Jeehut.

ℹ️
There are still 3 wishes from my last years' article that were not shipped yet, and I still think we need them:
1. Easy App Modularization in Xcode without the hassle
2. Pie Charts are here, but Spider Charts are still missing!
3. Streamer Mode in Xcode to hide sensitive code in calls/recordings

#1 – A WeatherKit-like API for Apple Sports

I was surprised when Apple introduced WeatherKit in 2022. It was the first system framework (I know of) that was not free for developers to use – but it still came with 500,000 calls per month for free. This was generous enough for Indie developers to write interesting new apps based on it. Apple had basically extracted the data portion of a system app and made it available to developers. And not just that, they also made it affordable enough for bootstrapped Indies!

The new Apple Sports app.

The introduction of the Apple Sports app in the US made me think: What if Apple did the same with the data of that app? I had multiple app ideas over the years that I prototyped but couldn't release because of the lack of an affordable Live Sports Data API. Their pricing is targeted toward large corporations (like many APIs are). But given that the best way to experience a sports event nowadays is by using the Vision Pro, I think it would make a lot of sense for Apple to make it as easy as possible for Indies to explore new experiences in sports events.

I wish for a new "SportsKit" API with a generous free tier like WeatherKit!

#2 – Add .zoom modifier to ScrollView in SwiftUI

One of the first features requested for the playing screen of my crossword puzzle app CrossCraft was to zoom in and out to get a better overview of the related characters. But when I typed .zoom to add the related modifier to my ScrollView in SwiftUI, I was shocked to see that it's not available! 😱

While there are workarounds using a custom MagnifyGesture, a GeometryReader based on the .scaleEffect modifier with custom @State modifiers, it only works for limited use cases such as zooming into images. But my view is a ScrollView which behaves very different compared to a regular view. I've tried multiple approaches, but couldn't get it to work the way one would expect. And even if I did, zooming the contents of a scroll view is such a common use case that it should really be built-in to ScrollView and easy to use without all the hassle.

I wish for a .zoom(scale:offset:) modifier for ScrollView in SwiftUI!

#3 – Fix SwiftData limitations on CloudKit

Paul Hudson has put it perfectly in his great SwiftData + CloudKit article:

SwiftData with iCloud has a requirement that local SwiftData does not: all properties must be optional or have default values, and all relationships must be optional. The first of those is a small annoyance, but the second is a much bigger annoyance – it can be quite disruptive for your code.

There's really not much to add to this other than that I had to write a lot of computed properties in all of my models to map Optionals to non-Optionals. It's safe, my apps aren't crashing. So why isn't it built-in to some SwiftData macro?

I wish for non-Optional types in SwiftData models to work with CloudKit.

#4 – Persistent Windows & Volumes in VisionOS

I have so many app ideas for VisionOS that only make sense when the position of windows or volumes could be persisted across app restarts and even system restarts or updates. For example, I released an app called Posters where you can decorate your walls with auto-updating interactive film posters – but when you restart the device they're gone. Augmenting reality is only temporary.

Decorating walls with Posters in VisionOS.

I understand that Apple doesn't want to give us full ARKit access in Shared Space. It's not possible to have good performance with all apps using ARKit at the same time. I'm not wishing for that. But the system already tracks window positions.

I wish for a (user-approved) option to persists window/volume positions.

#5 – Modal Text Input on tvOS (like Playstation)

On iOS, iPadOS, and visionOS we get QWERTY keyboards because they are known, fast, and easy to type. On tvOS of all platforms, they decided to put the keys into a line. As a consequence, getting to a specific key takes much longer than it would if there was just a QWERTY-like grid system. Also, the text input needs the full width of the TV screen and is placed at the top, making it the main focus. Why all this? Just look at this much better modal keyboard UI from 2013 by Sony:

Virtual Keyboard on PS4.

The lack of something like this makes experiences impossible where the keyboard is just an accessory to an otherwise more interesting view. Because it's missing, I ditched my initial plans to bring CrossCraft to tvOS as well. I would have loved to generate & solve crossword puzzles on the TV. It could make for a fun family experience. But with the current keyboard, it's a UX nightmare!

I wish for a narrower, QWERTY-like accessory keyboard input on tvOS.

#6 – Make String Catalog editor more useful

Yes, String Catalogs are new. So it is to be expected that they're not fully evolved yet. But even some of the most basic things are broken right now. Right-clicking an entry and choosing something like "Mark as Reviewed" is possible. But multi-selecting to mark multiple at once? Isn't. Adding a new language with a plus button at the bottom is possible. But removing one with the minus button? Isn't.

Apart from the broken basics, I have one more feature request that makes so much sense: The UI marks parameters in blue already, so there is detection. But when one is missing in another language, there's no warning. There should be!

I wish for the String Catalog editor UI in Xcode to become more useful.
💁‍♂️
UPDATE: I implemented these improvements myself! 😍 I basically rebuilt Xcode's String Catalog Editor and added it as a completely free feature to my app TranslateKit. Check it out! 🌐 👍

#7 – New "Create LLM" app like "Create ML"

Have you ever tried Create ML? It's a developer tool Apple introduced far back in 2019 which I feel gets overlooked by many developers. It's an AI tool that solves the problem of classification quite well. Just look at all the available options:

Create ML Project Templates

But we all know that generative AI based on LLMs is the new trend. And there's even proof that Apple is actively working on something they will ship in the near future. Assuming that they will be able to publish something this year to consumers, what I want as a developer is a tool akin to Create ML but for LLMs. Imagine you could customize Apple's Core LLM model with your specific domain data and maybe even with personal user data all stored on-device. This would allow for amazing new app experiences and as developers, we would get it for free!

I wish for an easy way to create domain-specific & personalized LLMs.

#8 – Improved Source Control UX in Xcode

Year over year the integration of Git into Xcode is getting better and better. Last year, it reached a point that I decided to switch to Xcode as my default Git UI. Previously I was using Git-Fork, but full integration into Xcode is unbeatable!

I am missing a few things though. Firstly, although Xcode has a code diffing view, there's no way to see the diffs of past commits, only for "Uncommited changes". Secondly, the diffing view itself has really weird color choices that make it hard to understand what code was removed and what was added. It's common that tools use red and green for clear meanings which I would prefer a lot over the current. Thirdly, to commit and push in one step, you have to press the arrow-down icon to the right of the "Commit" button and choose "Commit and Push…". I would prefer a checkbox that keeps its state so I don't have to do multiple clicks each time. And lastly, sometimes I type a commit message and while reviewing the changes I find something that's off. Then I switch to the file, make some adjustments and when I return to the diffing view, my commit message is gone! It should still be there.

I wish for improved source control UX & proper Git functionality in Xcode.

#9 – Make SwiftUI Previews work Reliably

This has been an annoyance from the very first days of SwiftUI. Designing in SwiftUI could be so useful and fast. If only the previews worked. But 90% of the time the previews are not working for me. And I've tried the common solutions already. Sometimes they helped, sometimes they didn't. But it's annoying to have to do workarounds just to get SwiftUI previews working.

I wish that SwiftUI previews work every time an app builds for Simulator.

#10 – Screenshots for SwiftUI Previews

Creating App Store screenshots is hard. You can do them manually on 2-3 devices in one language. But as soon as you want to localize them, the effort becomes unbearable. If I had to guess, I would say that 99% of the screenshots you can see on the App Store are outdated. But it doesn't have to be this way.

We need some help on Apple's end to fix it. And I'm not talking about UI Tests. They are slow. They are extra effort. They are unreliable. I don't write UI Tests nowadays anymore, because we have SwiftUI previews. Well, I wrote above that they are not reliable, that's true. But what if they improved that? The #Preview macro makes it really easy to create multiple previews in a single view. And it's relatively easy to pass in some state upon initialization to your views.

I wish for an API to create localized screenshots using SwiftUI previews.

Conclusion

These are my top 10 wishes for WWDC24. Do you agree? What did I miss?

🌐
Enjoyed this article? Check out TranslateKit!
A drag & drop translator for String Catalog files – it's really easy.
Get it now to machine-translate your app to up to 150 languages!
👨‍💻
Want to Connect?
Follow me on 🐦 Twitter (X), on 🧵 Threads, and 🦣 Mastodon.