USDKit is a new first-party Swift framework introduced in iOS/macOS 27 that brings native USD scene creation, composition, modification, and export capabilities to Apple platform apps, with deep RealityKit and Spatial Preview integration.
β’ Developers can now load, traverse, modify, and export USD stages entirely in Swift without third-party libraries or bridging C++ code
β’ Built-in exportPackage API with mesh compression (up to 90% size reduction) and AVIF texture compression makes asset delivery dramatically cheaper and faster
β’ Direct integration with Spatial Preview framework enables live Mac-to-Vision Pro collaborative scene review workflows from your own app
Opens an existing USD stage, adds a referenced asset as a new transform prim, moves it into position, applies accessibility metadata, then exports a compressed package β demonstrating USDKit's core load-modify-export loop.
import USDKit
import Foundation
@main
struct USDSceneComposer {
static func main() async throws {
// 1. Open an existing USD stage from disk
let sceneURL = URL(filePath: "/tmp/workbench.usda")
let stage = try USDStage.open(sceneURL)
// 2. Traverse existing prims to check for our asset
var foundOscilloscope = false
for prim in stage.traverse() {
if prim.path.string.contains("oscilloscope") {
foundOscilloscope = true
break
}
}
// 3. If not found, define a new transform prim and reference the asset
if !foundOscilloscope {
let primPath = USDPath("/Workbench/Oscilloscope")
let xformPrim = stage.definePrim(at: primPath, type: "Xform")
let assetURL = URL(filePath: "/tmp/assets/oscilloscope.usda")
xformPrim.addReference(USDReference(assetPath: assetURL.path))
// 4. Move the prim onto the workbench
let translateOp = xformPrim.addTransformOperation(
type: .translate,
precision: .double
)
try translateOp.set(value: SIMD3<Double>(0.0, 0.85, 0.0))
// 5. Apply accessibility schema and set label + description
xformPrim.applySchema(named: "AccessibilityAPI")
let labelAttr = xformPrim.createAttribute(
named: "accessibility:label",
type: .string
)
let descAttr = xformPrim.createAttribute(
named: "accessibility:description",
type: .string
)
try labelAttr.set(value: "Oscilloscope")
try descAttr.set(value: "A vintage analog oscilloscope sitting on the workbench, used for measuring electrical signals.")
}
// 6. Export a compressed package (mesh + texture compression)
let outputURL = URL(filePath: "/tmp/workbench_compressed.usdz")
var options = USDExportOptions()
options.compressMeshes = true
options.compressTextures = true
try await stage.exportPackage(to: outputURL, options: options)
print("Export complete: \(outputURL.path)")
}
}iOS 27 adds sectioned queries, codable model attributes, ResultsObserver for non-SwiftUI change observation, and HistoryObserver for reacting to persistent history changes in SwiftData.
The NowPlaying framework introduces a first-class Swift API for surfacing app media in system-wide now-playing surfaces β Lock Screen, Control Center, Dynamic Island, StandBy, CarPlay, Apple Watch, and Apple TV β via a declarative MediaSessionRepresentable protocol. It also supports remote media sessions (for controlling external speakers/TVs) and Media Sharing Extensions for routing media to third-party devices.
LiveCommunicationKit is the modern replacement for CXProvider that delivers rich, native conversation UIs integrated with the Lock Screen, Dynamic Island, Phone app Recents, and Siri. It provides a unified lifecycle model for audio and video conversations with a single delegate-driven action pipeline.
In-depth guide
RealityKit & USDKit in iOS 27 βUSDKit does not surface all schema-specific APIs directly (e.g. accessibility attributes must be created manually using correct spec-defined attribute name strings). exportPackage is async and can throw; mesh compression requires opt-in via export options. SwiftUSD via SPM remains the path for cross-platform or advanced C++ pipelines that go beyond USDKit's scope.
Vision Pro required for spatial preview features; Apple Intelligence not required. Raytracing renderer is macOS-only.
Xcode 27 introduces an agentic localization workflow that lets you ask a coding agent to translate your entire app directly inside Xcode, leveraging String Catalog context β including where and how strings are used β to produce accurate, consistent translations across all languages.