Device Hub is a new standalone app shipping with Xcode 27 that provides a unified interface for managing, controlling, and configuring both physical devices and simulators. It replaces and extends the scattered device management tools previously spread across Xcode and standalone utilities.
⢠Single pane of glass for your entire device and simulator inventory ā organize, filter, group, and context-click for quick actions without launching Xcode
⢠Deep configuration control (appearance, text size, location, audio, profiles, app data containers) takes effect instantly, eliminating the need to dig through device Settings
⢠Consistent canvas-based interaction (click, drag, scroll, trackpad gestures) works identically for real devices and simulators, making cross-device bug reproduction dramatically faster
Demonstrates the Device Hub workflow for reproducing a device-specific UI bug on a simulator by matching appearance settings, location, and app data container ā the core scenario shown in the WWDC session.
import SwiftUI
// Device Hub itself is a developer tool app, not a callable framework.
// The typical integration point for developers is SimulatorKit / devicectl
// and writing apps that respond correctly to the settings Device Hub controls.
//
// The snippet below shows a SwiftUI view that correctly responds to the
// three settings Hassan & Matt used to reproduce the bug:
// 1. Dynamic Type size (text size)
// 2. Landscape orientation
// 3. A location-based string (simulated via Device Hub's location panel)
struct RecoveryAdviceView: View {
let locationName: String
let recoveryAdvice: String
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
var body: some View {
VStack(alignment: .leading, spacing: 12) {
Text("Recovery Advice")
.font(.headline)
// Use fixedSize(horizontal:vertical:) carefully in landscape:
// In compact width (landscape iPhone) text can truncate.
// Prefer a scrollable container or line limit with truncation mode.
ScrollView {
Text(recoveryAdvice)
.font(.body)
// Allow multiline expansion instead of truncating
.fixedSize(horizontal: false, vertical: true)
.frame(maxWidth: .infinity, alignment: .leading)
}
Label(locationName, systemImage: "location.fill")
.font(.caption)
.foregroundStyle(.secondary)
}
.padding()
// Device Hub's rotation control maps directly to
// the simulator's orientation, which drives horizontalSizeClass.
.background(horizontalSizeClass == .compact ? Color.blue.opacity(0.05) : Color.clear)
}
}
// Preview that mirrors Device Hub's instant configuration changes:
// Change dynamicTypeSize or horizontalSizeClass in the preview
// to simulate what Device Hub does without leaving Xcode.
#Preview("Landscape + Accessibility XXL") {
RecoveryAdviceView(
locationName: "Johannesburg, ZA",
recoveryAdvice: "Given your high-altitude session in Johannesburg, we recommend 48 hours of low-intensity activity and increased hydration before your next peak effort."
)
.environment(\.dynamicTypeSize, .accessibility2)
.environment(\.horizontalSizeClass, .compact)
.previewLayout(.fixed(width: 667, height: 375)) // landscape iPhone
}Device Hub is a developer tooling app, not an SDK framework ā there are no public Swift APIs to call at runtime. The compact window launches automatically when you build and run to a simulator in Xcode 27; closing it does not stop the running process. App data container download/replace requires the app to be stopped first. Sysdiagnose collection can take several minutes.
Full feature set requires macOS compatible with Xcode 27. Wireless pairing of Apple Watch requires Bluetooth proximity during initial pairing. Some diagnostics (sysdiagnose) require a connected physical device.
More iOS 27 APIs land every week.
Get notified when new capabilities are published ā no noise, just signal.