WWDC 2024 has come and gone, which appears to occur faster and faster every year, and in its wake are lots of movies to take a look at. There have been so many movies this yr, Apple began releasing them Monday night time after the Platform State of the Union, so that you knew it was going to be a packed week. It could be unimaginable to cowl all the brand new materials in a single article. Nevertheless, between the Keynote, the Platform State of the Union, and a few choose movies, listed here are some stuff you undoubtedly want to take a look at. These are in no specific order, however all are must-watches when you’re an Apple developer.
Swift
Swift 6 is the massive change this yr, though you possibly can fortunately undertake the brand new secure data-race security conformance at your personal tempo, module by module, because of compiler’s Swift 6 language mode choices. Along with utilizing Swift on embedded units, improved C++ interoperability, and non-copyable sorts, two actually cool gadgets stood out.
Totally Static Linux SDK for Swift
Now you can cross-compile your apps for Swift on Linux and embrace the Swift libraries as a completely static element of your app. This implies the vacation spot doesn’t must have Swift put in. This may be nice for deploying issues like net service apps over to a Linux system.
Typed Throws
Now you can used typed throws to get higher suggestions on precisely what error is caught. For instance:
enum MyError: Error {
misTyped, whatWasIThinking
}
func foo(string: String) throws(MyError) -> String {
//.....
throw MyError.misTyped(string)
}
do {
let response = strive foo(string: "Hey world!")
} catch {
//the error right here is of kind "MyError" as a substitute of simply "Error"
}
For extra on Swift this yr, make sure to take a look at What’s new in Swift, and for extra on migrating your mission to Swift 6, take a look at Migrate your app to Swift 6
SwiftUI
SwiftUI received a good variety of updates this yr, as standard. Listed below are a few of the issues that stood out.
View Is now on the @MainActor
You not must mark your views with @MainActor
as a result of the View
protocol now has that ornament. That’s one much less line of code to put in writing!
The Magic Floating Tab Bar (or Is it a Sidebar?)
One thing that’s already getting a combined response is the brand new tab view model:
struct TabBarExample: View {
var physique: some View {
TabView {
Textual content("Tab 1")
.tabItem {
VStack {
Picture(systemName: "1.circle")
Textual content("Tab 1")
}
}
Textual content("Tab 2")
.tabItem {
VStack {
Picture(systemName: "2.circle")
Textual content("Tab 2")
}
}
Textual content("Tab 3")
.tabItem {
VStack {
Picture(systemName: "3.circle")
Textual content("Tab 3")
}
}
}
.tabViewStyle(.sidebarAdaptable)
}
}
This can lead to certainly one of two photographs, relying on whether or not you need a floating tab bar on the high (suppose visionOS) or a standard sidebar (suppose NavigationSplitView):
I haven’t had an opportunity to play loads with this one, however as with all paradigm-breaking issues, there’s often a little bit of disagreement in the neighborhood about it. We’ll see how this one shakes out!
New Modifiers for Presentation and Zooming
For views represented in a sheet, a brand new modifier allows you to specify web page, type, or customized sizing:
.presentationSizing(.type)
And to get a pleasant zoom in animation when bringing views to the foreground, a brand new pair of modifiers will help you:
.navigationTransition(.zoom(
sourceID: merchandise.id, in: namespace))
///....
.matchedTransitionSource(id: merchandise.id, in: namespace)
}
For extra on SwiftUI this yr, make sure to take a look at What’s new in SwiftUI.
SwiftData
SwiftData didn’t have an enormous replace this yr like some had been hoping, nevertheless it did get some very vital updates to assist with efficiency and queries. This yr, Apple added the flexibility to specify distinctive constraints with the #Distinctive
macro and generally listed fields with Index
. With just some traces of code, you possibly can add these options to an present @Mannequin
:
import SwiftData
import Basis
@Mannequin
class KodecoArticle {
#Distinctive([.name, .dateWritten, .author])
#Index([.name], [.dateWritten], [.author], [.name, .dateWritten, .author])
var title: String = ""
var creator: String = ""
var content material: String = ""
var dateWritten: Date?
var dateUpdated: Date?
init(title: String, creator: String, content material: String, dateWritten: Date? = nil, dateUpdated: Date? = nil) {
self.title = title
self.creator = creator
self.content material = content material
self.dateWritten = dateWritten
self.dateUpdated = dateUpdated
}
}
The #Distinctive
line states that entries are distinctive on that mixture of properties, and the #Index
line lists which properties, or mixture of properties, are added as further metadata to the mannequin so it may well carry out quicker queries.
Apple additionally unveiled different new options for SwiftData, equivalent to utilizing your personal customized information retailer! For extra, take a look at What’s New in SwiftData.
Frameworks That Are In all places
There have been two robust examples of frameworks that had been gaining parity and energy over many if not all the platforms Apple supplies. There’s loads to cowl right here, so right here they’re together with hyperlinks to the WWDC movies.
App Intents
Over the previous few years, App Intents has change into a serious participant in the case of surfacing your app’s options; whether or not it’s to shortcuts, Siri, or widgets.
This yr, App Intents will get one other improve as a result of it’s the mechanism to hook your app into Apple Intelligence. For extra, make sure to take a look at What’s new in App Intents, Bring your app’s core features to users with App Intents, and Bring your app to Siri.
RealityKit
Through the years, RealityKit hasn’t been very uniform throughout the platforms, making it arduous to deploy the identical app to totally different Apple {hardware}. That modifications this yr, as RealityKit has lots of new cross-platform APIs throughout all the varied platforms — visionOS, macOS, iOS, and iPadOS. For extra, take a look at Discover RealityKit APIs for iOS, macOS, and visionOS.
Swift Testing
Along with transferring the open supply Swift parts to the swiftlang group at GitHub, Apple has formally included Swift Testing in that household of libraries. Swift Testing is a brand new manner of testing in Swift (however complementary to XCTest), introducing extra “Swifty” syntax to your check code. Right here’s a fast instance:
import Testing
struct WWDCTests {
@Take a look at func testExample() async throws {
let worth = 2
#anticipate(worth + worth == 3)
let value2: Int? = nil
_ = strive #require(value2)
}
}
After importing the Testing
framework, you beautify your checks with the @Take a look at
attribute. This implies you not want to call your check strategies so they begin with “check”. I’ve added just a few issues to check. The primary makes use of the #anticipate
macro, which replaces the household of XCTAssert calls and checks to see whether or not the situation inside is true. The subsequent code block checks that value2
isn’t nil earlier than continuing through the use of the #require
macro. See what Xcode says when the check button is clicked:
In the suitable gutter, you see indications that the expectations failed. For the primary one, when you hover over the error, a “Present” button seems that you could click on to get extra particulars, as proven within the screenshot. This allows you to dive into why precisely the examined code failed.
This seems to be loads cleaner than XCTest (though you should utilize each in your checks!), and I can’t wait to start out utilizing it. For extra about Swift Testing, take a look at Meet Swift Testing.