iOS 27 / macOS 27 significantly expands declarative device management with new status items (device system health, Lockdown Mode, enrollment type), consolidated privacy consent prompts, managed migration for new Macs, enhanced log collection commands, and declarative app configuration support on macOS. These changes make declarative management the definitive standard for enterprise and education device fleets.
• Device system health is now surfaced as a declarative status item, allowing MDM servers to detect hardware component failures (camera, Face ID, Touch ID, baseband) without user interaction.
• New TriggerEnhancedLogCollection MDM command added across iOS, iPadOS, tvOS, and macOS 27, replacing the manual AppleCare link-based workflow.
• Declarative app configuration (ManagedApp framework with hardware-bound keys and Managed Device Attestation) extended to macOS 27, previously available only on iOS, iPadOS, and visionOS.
• Consolidated privacy consent prompt introduced in iOS, iPadOS, and macOS 27, replacing per-permission individual OS prompts for managed apps and Safari websites.
• New declarative status items (hardware health, push token, Lockdown Mode) let MDM servers proactively monitor fleet health without constant polling, reducing server load and improving response time to device issues.
• The consolidated privacy consent prompt reduces friction for end users by bundling all permission requests into a single, IT-administrator-controlled prompt at app launch, increasing the likelihood users grant correct permissions.
• Declarative app configuration now comes to macOS 27 (previously iOS/iPadOS/visionOS only), enabling hardware-bound keys and Managed Device Attestation for secure enterprise app deployment across the full Apple platform lineup.
Demonstrates how an MDM client app subscribes to declarative status items — including the new device system health and Lockdown Mode status items introduced in iOS 27 — and displays the reported values using the ManagedApp framework.
import SwiftUI
import ManagedApp
// MARK: - Status Item Model
struct DeviceStatusItem: Identifiable {
let id = UUID()
let key: String
let value: String
let isHealthy: Bool
}
// MARK: - ViewModel
@MainActor
final class DeviceStatusViewModel: ObservableObject {
@Published var statusItems: [DeviceStatusItem] = []
@Published var isLoading = false
@Published var errorMessage: String?
// Subscribe to declarative status items introduced/expanded in iOS 27
func fetchStatus() async {
isLoading = true
defer { isLoading = false }
do {
// Retrieve the managed app configuration delivered via declarative management
let config = try await ManagedAppConfiguration.current()
// Read declarative status values from the configuration dictionary
// In a real MDM client, these keys are defined by the declarative status schema
let rawStatus = config.configuration
var items: [DeviceStatusItem] = []
// Device system health (new in iOS 27 declarative status)
if let healthDict = rawStatus["com.apple.status.deviceSystemHealth"] as? [String: Any] {
let components = healthDict["components"] as? [[String: Any]] ?? []
for component in components {
let name = component["name"] as? String ?? "Unknown"
let status = component["status"] as? String ?? "unknown"
items.append(DeviceStatusItem(
key: "Health: " + name,
value: status,
isHealthy: status == "nominal"
))
}
}
// Lockdown Mode status (new in iOS 27 declarative status)
if let lockdownEnabled = rawStatus["com.apple.status.lockdownMode"] as? Bool {
items.append(DeviceStatusItem(
key: "Lockdown Mode",
value: lockdownEnabled ? "Enabled" : "Disabled",
isHealthy: !lockdownEnabled
))
}
// Enrollment type status
if let enrollmentType = rawStatus["com.apple.status.enrollmentType"] as? String {
items.append(DeviceStatusItem(
key: "Enrollment Type",
value: enrollmentType,
isHealthy: true
))
}
statusItems = items.isEmpty
? [DeviceStatusItem(key: "Status", value: "No declarative status items reported", isHealthy: true)]
: items
} catch {
errorMessage = error.localizedDescription
}
}
}
// MARK: - View
struct DeviceStatusView: View {
@StateObject private var viewModel = DeviceStatusViewModel()
var body: some View {
NavigationStack {
Group {
if viewModel.isLoading {
ProgressView("Loading device status…")
} else if let error = viewModel.errorMessage {
ContentUnavailableView(
"Status Unavailable",
systemImage: "exclamationmark.triangle",
description: Text(error)
)
} else {
List(viewModel.statusItems) { item in
HStack {
Image(systemName: item.isHealthy ? "checkmark.circle.fill" : "exclamationmark.circle.fill")
.foregroundStyle(item.isHealthy ? .green : .red)
VStack(alignment: .leading, spacing: 2) {
Text(item.key)
.font(.subheadline)
.fontWeight(.medium)
Text(item.value)
.font(.caption)
.foregroundStyle(.secondary)
}
}
.padding(.vertical, 4)
}
}
}
.navigationTitle("Device Status")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Refresh") {
Task { await viewModel.fetchStatus() }
}
}
}
.task { await viewModel.fetchStatus() }
}
}
}
#Preview {
DeviceStatusView()
}iOS 27 adds sectioned queries, codable model attributes, ResultsObserver for non-SwiftUI change observation, and HistoryObserver for reacting to persistent history changes in SwiftData.
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.
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
iOS 26 → iOS 27 Migration Guide →Declarative management status items require the MDM server to subscribe to each item explicitly — devices only push changes for subscribed items. The TriggerEnhancedLogCollection command requires organization-owned (supervised) devices; it is not available for user-enrolled devices. The consolidated privacy consent prompt is only shown when the IT administrator has deployed a declarative configuration specifying the app bundle ID and desired privacy components — it does not appear automatically for all managed apps.
Device system health status items (Face ID, Touch ID, baseband, camera) are hardware-dependent and only report components present on the specific device model. Managed migration is macOS-only. Apple Intelligence declarative controls require Apple Intelligence-capable hardware.
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.