Jan KodesJan KaltounTomas CejkaIFang LeeDominika Gajdova6 min

Swiftly Highlights: Our WWDC24 Wishlist, from Dev Tools to AI

EngineeringMay 7, 2024

Engineering

/

May 7, 2024

Jan KodesiOS Engineering Manager
Jan KaltounChief Technology Officer
Tomas CejkaiOS Engineering Director
IFang LeeiOS Engineer
Dominika GajdovaiOS Engineer

Share this article

Time flies, doesn't it? More than four years ago, we got the idea to start publishing monthly iOS wrap-ups and, at that time, we didn't plan how long we'd keep it going. It just felt like a great idea, so we went with it. And now we're marking the 50th edition of Swiftly Highlights!

I couldn’t be prouder of the team for keeping this thing going! It’s a testament to their dedication and consistency, and I’d love to extend my congratulations and thanks to everyone involved during the past four years. Here’s to many more articles — I’m already looking forward to reading the 100th edition!

— Jan Kaltoun, CTO and former iOS Director of Engineering

Now let’s get into this special edition of Swiftly Highlights. We cover how these articles take shape, what we hope to see at WWDC24 and, of course, highlights from the past month. 

From the iOS Team Kitchen

What does it take to put these articles together every month? A whole lotta teamwork.

One of STRV's principles is to "share what you know, learn what you don’t." In the iOS department, we strive to stay up-to-date with the latest trends and technologies. Having weekly iOS meetings is not enough for us; we need more. So…

We’ve developed an automated pipeline to collect articles from our favorite sources. We vote for the most interesting items, and another script generates a draft containing the top-voted articles. Every month, one volunteer writes a blog post covering what we collectively found most interesting in the previous month. This way, we share knowledge and find a consensus on points of interest.

— Tomas “CJ” Cejka, iOS Director of Engineering

WWDC24 Wishlist: Dreams & Desires of Our iOS Minds

We asked our team about what they currently miss in Apple’s world and what improvements could benefit our — and probably everyone’s — lives. 

Before we dive into improvements for developers, we also want to mention some things from the user’s perspective. Everyone was kind of excited about what an Apple Car could look like if it ever became a reality. Maybe Apple made a mistake by not buying Tesla when they had the chance? Anyway, assuming Project Titan has ceased, we hope that by focusing on AI instead, we can finally see some long-overdue improvements to Siri. Because to be frank, compared to the current LLMs with soon-to-have agent capabilities, Siri is just suboptimal.

Now let’s move on to the developer’s perspective; we have a lot of wishes!

Developer Tools Enhancements

We’d love to see enhanced documentation with more visual and code examples. It’s gotten a lot better over the years but it could still get better. Case in point: AVFoundation. 

Along with the documentation, we’d be grateful for some good networking (Network instrument doesn’t offer that much) and Core Data and HealthKit debugging tools in Xcode. Additionally, we hope for improvements in VisionOS simulator capabilities, better object detection and window management.

APIs, Libraries & Framework Extensions

SwiftUI is amazing and gets much better with every version — but deployment targets often limit us, so we really wish Apple could take the same route as Jetpack Compose, make SwiftUI a package within the app and allow us to always use the latest APIs. 

Regarding Swift, we believe Reflection could be used on Types and not just Instances. Lastly, a far stretch but… what if Apple would open-source some of their frameworks? Or even better, an open-source official Swift web framework? 

AI & More

In the current AI-hype era, it seems that further developing tools like Create ML into more advanced AI development tools (e.g., “Create LLM”) would be a great step forward. Of course, we look forward to any LLM/AI integration into Xcode in general. 

With Apple’s revenue being focused on services rather than hardware, it might also be a good idea to have an Apple-specific service akin to AWS, which would provide straightforward, easy-to-use backend solutions that could automagically integrate with iOS applications — think CloudKit on steroids. 

Let’s see if any of these dreams come true.

— Jan Kodes, iOS Engineering Manager

News From the Past Month

SwiftUI

Unlike other popular UI frameworks that use trees for view state snapshot diffing, SwiftUI possesses a great advantage: the types of the elements in the tree are static. That means the algorithm that computes the difference between two view trees is much more efficient because the two trees always have the same structure. Rens Breur delves deep into SwiftUI's diffing algorithm by crafting his version of SwiftUI from the ground up, piecing together individual core building blocks and showcasing how they fit together.

Many still fall back to UIKit to build efficient lists that support thousands of items whilst keeping the user experience snappy. Demystifying SwiftUI List breaks down the scenario of scrolling to a specific element within a large list using ScrollViewReader with identity. It also highlights potential issues and consequences that may arise from incorrect usage (e.g., using the identity modifier on List’s subviews) and ultimately turns to UIKit using Introspect. Other lazy components such as LazyVStack don’t suffer from this subview identity problem.

A great approach to utilize more efficient collections with Foreach’s data source is to implement RandomAccessCollection protocol. This also opens a different way of implementing infinite scrolling, separating the end of list detection to a data structure instead of view. Beware of memory sources not being released for specific types (e.g., Image) unless they completely exit the lazy container view.

And finally, a new @Orientation property wrapper was created. This wrapper functions similarly to how @Environment(\.dynamicTypeSize) is used for read-only purposes. For those interested in the specific implementation details of this property wrapper, you can explore them in Rudrank Riyam’s article.

Swift Package 

Apple released the AsyncAlgorithms package, enhancing Swift's capabilities with tools and algorithms for asynchronous sequences. This package not only implements well-known tools like zip but also introduces new features that deal with timing. It aims to provide first-class integration with async/await, serve as a repository for time-based algorithms and maintain cross-platform, open-source accessibility. 

Built on the AsyncSequence foundation introduced in Swift 5.5, the package supports natural async/await usage in for/in loops, provides Sequence-equivalent APIs like map and filter, and simplifies asynchronous code through structured concurrency — making it as straightforward to manage as synchronous code. Observing the evolution of Swift and its new capabilities is quite fascinating. Be sure to visit the project's GitHub page to explore the module's source code.

Concurrency 

How do you keep your side projects consistent? It can be challenging, yet it's crucial for achieving successful results. The article on avanderlee.com highlights the importance of consistent effort over sporadic bursts of intense work. Regular, disciplined practice not only helps in maintaining a steady pace of development but also prevents burnout and ensures continuous progress and skill development. 

Overall, the article provides practical advice on how to embed consistent work habits into your daily routine, enhancing the effectiveness of your side projects. It underscores that focusing on your existing projects, rather than frequently starting new ones, can lead to greater success. For instance, Antoine van der Lee views regular contributions to his projects (like RocketSim) as a key factor in their success — suggesting a focus on existing commitments over new endeavors.

And one more thing here: With Swift's strict concurrency, it feels natural to mark all stores and views as @MainActor for safe handling of UI updates on the main thread. The reality is that it is very easy to accidentally run a long running task on the main thread if the method running the supposedly background task is not explicitly non-isolated or called within a dispatched Task context. The linked tips should help. 

Apple Vision Pro

What's your experience with Apple Vision Pro, and how do you like it so far? In Scott Stein's article, he reflects on his month-long experience with the Apple Vision Pro and shares what he wants next. A quick summary:

Apple Vision Pro became a normalized part of his daily life rather than the futuristic device he initially envisioned. Mainly used as a high-quality wearable display for movies and as a work-related tool, it hasn’t significantly changed his workflow or entertainment habits. While he appreciates its advanced features and uses it almost daily, he finds it lacking in transformative capabilities and app offerings compared to the Meta Quest 3. 

Scott mentions the physical comfort of the headset and its impracticality for travel, expressing hope for better integration with other Apple devices in the future. Overall, he recognizes the potential of the Vision Pro but notes it has yet to fully realize its transformative possibilities.

Apple Electric Car

Apple has officially ended its electric car project, shutting down the Special Projects Group that was tasked with developing the vehicle. As reported by Bloomberg, this move concludes Apple’s attempt to build a car that could compete with Tesla. 

The project started in 2014, involved hiring automotive engineers and ultimately struggled to align with Apple’s primary focus on electronics and online services. Some employees from the car team will transition to Apple's new generative AI team. 

Despite the project’s end, Apple continues to influence the automotive industry with its CarPlay software — and it remains committed to other technology ventures, like health technologies for the Apple Watch and its new Apple Vision Pro. Apple's R&D spending last year was around $30 billion, reflecting its ongoing investment in innovation across various sectors.

And so we end our 50th Swiftly Highlights. Thanks for sticking with us. See you again soon!

Share this article