2026 App ServicesBusiness & Education
WWDC26 · 14 min · App Services / Business & Education
What’s new in assessment on macOS
Explore the Automatic Assessment Configuration framework on macOS to deliver secure tests for education apps. Learn how to leverage new APIs to create a secure, configurable testing environment that incorporates more system-level features on Mac. Find out how built-in system prechecks and accessibility controls make it easier than ever to deliver a reliable exam experience.
Watch at developer.apple.com ↗Chapters
Code shown on screen · 7 snippets
Set up precondition checks
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowLockdownMode = false
configuration.allowPrivateRelay = false
configuration.requiresSIP = true
configuration.requiresManagedDevice = true
configuration.requiresSingleUser = true
configuration.requiresUserAccountType = .standard
return configuration
} Restrict accessibility features
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowsAccessibilityVoiceOver = true
configuration.allowsAccessibilitySwitchControl = false
configuration.allowsAccessibilityAlternativeInputMethods = true
configuration.allowsAccessibilityBackgroundSounds = true
configuration.allowsAccessibilityHoverText = true
configuration.allowsAccessibilityLiveSpeech = true
configuration.allowsAccessibilitySpokenContent = true
configuration.allowsAccessibilityVoiceControl = true
configuration.allowsAccessibilityZoom = true
return configuration
} Customize the Menu Bar items
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowsMenuBar = true
configuration.allowedMenuBarItems = [
.battery,
.clock,
.volume
]
configuration.allowedAppleMenuItems = [
.sleep
]
return configuration
} Define input restrictions
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowsDictation = false
configuration.allowsAutoFill = false
configuration.allowsStructuralInput = false
configuration.allowsEmojiKeyboard = false
return configuration
} Enable dock appearance
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowsDock = true
return configuration
} Set allowed directories and files
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowedDirectoriesAndFiles = [
URL(fileURLWithPath: "~/Documents/")
]
return configuration
} Set application launch restrictions
import AutomaticAssessmentConfiguration
func makeAssessmentConfiguration() -> AEAssessmentConfiguration {
let configuration = AEAssessmentConfiguration()
configuration.allowOnlyParticipantsToRun = true
configuration.allowsUserScriptExecution = false
return configuration
} Resources
Related sessions
-
20 min