WWDC24 Week 2
Another week, another bit of progress going through WWDC content, I'm managing to keep up my 3 sessions a day momentum. I also managed to get my re-designed version of the site in good enough shape that I'm happy with how it looks.
Go small with Embedded Swift
This session is a practical demo on deploying Embedded Swift to a matter device. It also covers some of the limitations of Embedded Swift, and how to work around them, such as having to use generics instead of a any
type.
Go further with Swift Testing
This session goes into detail on the new Swift Testing setup and how to work with it. One thing that stuck out to me was being able to mark tests as known issues so they’re still compiled, run, and will report when they’re fixed. Having more tools to sort tests, such as tags and suites also seems very useful, as is the fact that tests are now run in parallel and a random order by default.
Explore the Swift on Server ecosystem
This session is a tutorial showing how to use Swift on Server to get up and running, and how versos tools from the community can be used together. It also covers best practices, such as the order which different subsystems should be initiated.
Run, Break, Inspect: Explore effective debugging in LLDB
This is the yearly reminder of all the ways to use the debugger. In particular this covered debugging from a crash log, how to use breakpoints, and a refresher on the debugger itself. The most useful new bit of into is the Swift error symbolic breakpoint.
Consume noncopyable types in Swift
This session explains what non copyable types are, and covers some of the complications of how to work with them. There’s the lifecycle of a non copyable type, how to pass it, and also how to make generics that are conditionally noncopyable so they work as expected when they contain a copyable type.
Migrate your app to Swift 6
This session is a practical tutorial on migrating a sample app to Swift 6 with strict concurrency checking.. It covers both quick wins and how to deal with some of the more complex cases. There is also a lot of good explanation of why these checks are important.
Catch up on accessibility in SwiftUI
This session goes through some of the common ways to add accessibility in SwiftUI, and some of the new features that are available. One detail that sticks out is the ability to conditionally add an accessibility label so that if the default value is enough most of the time, then you can use that and only override as needed.
Get started with Dynamic Type
This session is a catch up on how to use dynamic type, and walks through common scenarios in both SwiftUI and UIKit. IT re-iterates the use of AnyLayout
and swapping horizontal and vertical stacks based on the text size class.
Track model changes with SwiftData history
This session covers how SwiftData history works, how to integrate with it custom backed. It explains concepts like the history token, and how to set up tombstone values to be able to track deletions so that you can avoid re-instating deleted items when applying a change set.
Explore Swift Performance
This is a deep dive into working with micro level performance issues in Swift. It covers the cost of different types of memory allocations, and how the compiler applies optimizations. It also was very interesting to see how async
calls are translated into machine code.
Analyze heap memory
This session covers how to use the various memory debugging tools in Xcode and Instruments, and how to fix common issues like memory leaks and memory spikes.
Elevate your tab and sidebar experience in iPadOS
This session covers how to make use of the new tab view in both SwuftUI and UIKit. There’s both a new more type safe way of specifying tabs in SwiftUI, and the customization of.a Tab View can be saved in @AppStorage
to make it easy to persist user changes.
What’s new in AppKit
The changes that came to AppKit are mostly exposing features that are also available in SwiftUI or UKIt, but it’s nice to see parity being maintained there. The interesting AppKit specific features are support for the various window tiling modes, and the ability to use system cursors.
What’s new in StoreKit and In-App Purchase
The focus of this was on using win back offers, and the new SwiftUI views that can render store kit content. Another item of note is that StoreKit 1 is deprecated and will be removed in a future release so there’s a strong push to update to the new framework.
What’s new in watchOS 11
Some of the most interesting changes here are that watchOS will be able to show live activities on the Smart Stack with no configuration, and lots of changes to widgets. Having widgets that can perform an action without launching your app will potentially add lots of new interactions on watchOS.
Swift Charts: Vectorized and function plots
This update allows rendering functions and vector data using Swift Charts. This makes It shows off how to combine a function plot with a standard chart to show how the data matches a distribution curve.
Work with windows in SwiftUI
This showcases how to work with windows in SwiftUI, particularly how to transition between different windows, and how to react to user behavior rejigging and moving widows.
Migrate your TVML app to SwiftUI
Apple is deprecating TVML, so this session is a walkthrough of how to reproduce may of the stock TVML elements and behaviors in SwiftUI.
Get started with Writing Tools
Integrating the new writing tools in app looks to be quite simple.as most of it is automatic and handled by the system. The session does explain how to exclude portions of text from the writing tools, for example code blocks, and how it integrates with the underlying text storage and undo manager.
Squeeze the most out of Apple Pencil
This session explains how to make custom tools for the Apple Pencil, how to work with the tool picker, and how to respond to the new gestures and rotation data sent from the new Apple Pencil.
Bring expression to your app with Genmoji
This session covers how to handle using Genmoji in your app, and especially how to support including the generated image glyphs as embedded content in an attributed string and serialization into an RTF format so than the default data store, and what it would take to implement it for your own custom data store.
Modeling Progress
This week, I spent a lot of time working on a very small kit that I picked up in Japan. I prepped the whole kit, primed all of the pieces in black, put it together, and did a zenithal prime that will help accentuate the details when the final paints go on. Finally I took it back apart and started prepping each section for painting with base colors.