Atelier Clockwork

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 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. Primed, BlackPrimed, ZenithalDisassembled