{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-230", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/230", "wordCount": 1871, "segments": [{"start": 7.0, "text": "Hi, I'm Chris, an engineer on the Education Technologies team."}, {"start": 11.0, "text": "And I'm excited to take you through the enhancements available"}, {"start": 14.0, "text": "in the Automatic Assessment Configuration framework in macOS 27."}, {"start": 19.0, "text": "This framework helps to create a secure, locked down environment"}, {"start": 23.0, "text": "for testing organizations delivering education assessments"}, {"start": 26.0, "text": "or certifications on Apple devices."}, {"start": 30.0, "text": "To use this framework,"}, {"start": 31.0, "text": "your app needs the restricted Automatic Assessment Configuration entitlement."}, {"start": 36.0, "text": "If you haven't already requested it,"}, {"start": 38.0, "text": "you can do so through the Apple Developer portal."}, {"start": 42.0, "text": "In this session, I'll cover five areas."}, {"start": 45.0, "text": "First, system preconditions:"}, {"start": 47.0, "text": "checks your app can require before allowing an assessment to continue."}, {"start": 52.0, "text": "Then, accessibility restrictions that ensure these features"}, {"start": 56.0, "text": "are only available for the students who are approved to use them."}, {"start": 61.0, "text": "After that, system experience customization"}, {"start": 64.0, "text": "for tailoring how users interact with the Mac during an assessment."}, {"start": 70.0, "text": "From there, application launch restrictions your app can set to ensure"}, {"start": 74.0, "text": "that only the processes you deem trustworthy"}, {"start": 77.0, "text": "are running during an assessment."}, {"start": 80.0, "text": "And lastly, best practices that will help you make the most"}, {"start": 84.0, "text": "of what assessment mode has to offer."}, {"start": 87.0, "text": "I'll be using this sample assessment app"}, {"start": 89.0, "text": "to demonstrate the behavior of the API capabilities covered in this video."}, {"start": 94.0, "text": "First up, I'll review the precondition checks"}, {"start": 97.0, "text": "that can be done before an assessment starts."}, {"start": 100.0, "text": "Performing system precondition checks"}, {"start": 102.0, "text": "before allowing a student to begin an exam"}, {"start": 105.0, "text": "is critical for ensuring the Mac is in a hardened state,"}, {"start": 109.0, "text": "and helps ensure the security requirements of the assessment from the very start."}, {"start": 114.0, "text": "Your app can require that System Integrity Protection is enabled,"}, {"start": 119.0, "text": "that the Mac is MDM enrolled,"}, {"start": 121.0, "text": "that only a single account is signed in,"}, {"start": 124.0, "text": "and that the account is a specific type, such as a standard account;"}, {"start": 129.0, "text": "four checks that together help ensure the device is in a hardened,"}, {"start": 133.0, "text": "tamper-resistant state."}, {"start": 135.0, "text": "Additionally, your app can require that Lockdown Mode"}, {"start": 138.0, "text": "and iCloud Private Relay are disabled;"}, {"start": 141.0, "text": "two checks that help ensure that Apple privacy and security features"}, {"start": 146.0, "text": "don't interfere with your assessment infrastructure requirements."}, {"start": 150.0, "text": "I'll now add the precondition checks to my sample app,"}, {"start": 154.0, "text": "by setting properties on my AEAssessmentConfiguration object,"}, {"start": 157.0, "text": "which is the object that defines an assessment session's parameters."}, {"start": 162.0, "text": "This code snippet requires the signed-in user account to be a standard account."}, {"start": 167.0, "text": "With these precondition checks configured,"}, {"start": 170.0, "text": "if a student's device does not meet one or more of these requirements"}, {"start": 174.0, "text": "then an alert is displayed informing the student of the issues"}, {"start": 177.0, "text": "that must be addressed before they may continue."}, {"start": 180.0, "text": "Next up: managing the availability of accessibility features."}, {"start": 185.0, "text": "MacOS includes a comprehensive suite of built-in accessibility features."}, {"start": 190.0, "text": "These features are essential for providing equitable access to exams,"}, {"start": 195.0, "text": "enabling individuals with visual, auditory, motor, or cognitive needs"}, {"start": 200.0, "text": "to fully participate without requiring third-party assistive software."}, {"start": 206.0, "text": "By default, the Menu Bar and the Dock are hidden,"}, {"start": 210.0, "text": "but any currently enabled accessibility features"}, {"start": 213.0, "text": "will continue to work during the assessment session."}, {"start": 217.0, "text": "As demonstrated here,"}, {"start": 218.0, "text": "Switch Control continues to run after the assessment session begins."}, {"start": 223.0, "text": "However, it's important to note that certain accessibility features"}, {"start": 227.0, "text": "can be customized with user-generated content."}, {"start": 231.0, "text": "Therefore, disabling access to those features"}, {"start": 234.0, "text": "for students who do not require them as part of an approved accommodation"}, {"start": 238.0, "text": "is an important security measure."}, {"start": 241.0, "text": "In this configuration, every accessibility feature is allowed except one."}, {"start": 246.0, "text": "I'm restricting the use of Switch Control."}, {"start": 249.0, "text": "Note that setting the value to true for a configuration property"}, {"start": 253.0, "text": "does not enable the corresponding accessibility feature."}, {"start": 256.0, "text": "It simply allows it to be used during an assessment"}, {"start": 259.0, "text": "when enabled by the user."}, {"start": 265.0, "text": "When the assessment session starts,"}, {"start": 267.0, "text": "Switch Control is automatically quit"}, {"start": 269.0, "text": "and cannot be relaunched during the assessment session."}, {"start": 273.0, "text": "One of the most powerful areas of the framework"}, {"start": 275.0, "text": "is system experience customization,"}, {"start": 278.0, "text": "tailoring how students interact with macOS during an assessment."}, {"start": 283.0, "text": "The macOS system experience is designed to provide a seamless,"}, {"start": 287.0, "text": "intuitive environment"}, {"start": 289.0, "text": "through familiar elements like the Menu Bar,"}, {"start": 292.0, "text": "Menu Bar items such as Wi-Fi and Volume,"}, {"start": 296.0, "text": "the Dock, various input technologies like Dictation and AutoFill,"}, {"start": 301.0, "text": "and filesystem interaction using the Finder and the Open and Save file dialogs."}, {"start": 307.0, "text": "Your app can make the Menu Bar available to allow students to access"}, {"start": 311.0, "text": "essential application functions during an assessment."}, {"start": 315.0, "text": "Additionally, your app can customize which Menu Bar items are available,"}, {"start": 319.0, "text": "like volume or Wi-Fi,"}, {"start": 321.0, "text": "while removing items that could serve as a vector"}, {"start": 324.0, "text": "for information or content leakage."}, {"start": 327.0, "text": "I've already demonstrated how the assessment session"}, {"start": 330.0, "text": "looks without a Menu Bar."}, {"start": 332.0, "text": "In this example, I'm setting additional properties"}, {"start": 335.0, "text": "on my AEAssessmentConfiguration object"}, {"start": 338.0, "text": "to enable the Menu Bar and to define a set of allowlisted menu extras."}, {"start": 344.0, "text": "Note that these menu extras are not forced on"}, {"start": 346.0, "text": "but rather continue to be available during an assessment session"}, {"start": 350.0, "text": "if they were already present in the Menu Bar."}, {"start": 354.0, "text": "I've also customized the Apple menu"}, {"start": 356.0, "text": "by setting a property on my configuration object"}, {"start": 359.0, "text": "to show only the sleep menu item."}, {"start": 362.0, "text": "Optionally, I could set an empty array to hide all items except for"}, {"start": 367.0, "text": "\"About This Mac\"."}, {"start": 370.0, "text": "As the assessment session begins, the app's menu items are displayed"}, {"start": 374.0, "text": "and the set of Menu Bar items is filtered down"}, {"start": 377.0, "text": "to the allowlisted set I just specified."}, {"start": 380.0, "text": "Additionally, selecting the Apple menu"}, {"start": 383.0, "text": "reveals that its contents have been filtered."}, {"start": 386.0, "text": "Now I'll review some input methods you may wish to disable"}, {"start": 390.0, "text": "that can inadvertently provide students with hints or correct answers."}, {"start": 395.0, "text": "Dictation can produce correct spelling automatically."}, {"start": 399.0, "text": "The emoji picker exposes a searchable symbol library."}, {"start": 403.0, "text": "And structural input reveals character composition clues,"}, {"start": 407.0, "text": "any of which could bypass assessments designed to test unaided recall."}, {"start": 412.0, "text": "AutoFill can provide pre-loaded answers, notes, or reference material"}, {"start": 417.0, "text": "into response fields from sources such as Contacts."}, {"start": 421.0, "text": "To restrict these input methods,"}, {"start": 423.0, "text": "I set each of these properties to false in my AEAssessmentConfiguration object."}, {"start": 428.0, "text": "This hides them in menus and prevents their use within UI controls"}, {"start": 432.0, "text": "that normally support them."}, {"start": 434.0, "text": "With the input restrictions in place, the AutoFill, Dictation,"}, {"start": 438.0, "text": "and Emoji & Symbols menu items are no longer available in the Edit menu."}, {"start": 444.0, "text": "The Dock is another valuable system experience you may wish to enable"}, {"start": 448.0, "text": "during an assessment session"}, {"start": 450.0, "text": "because it provides students with a clear, focused workspace"}, {"start": 454.0, "text": "where they can easily find and switch between applications."}, {"start": 458.0, "text": "In this code snippet, I'm enabling a filtered Dock experience"}, {"start": 462.0, "text": "by setting allowsDock to true."}, {"start": 465.0, "text": "During the assessment, the Dock displays only the allowed apps,"}, {"start": 469.0, "text": "giving students a focused workspace to find and switch between them."}, {"start": 474.0, "text": "Upon entering the assessment session,"}, {"start": 476.0, "text": "note that in addition to the always present anchor elements of the Finder and the Trash,"}, {"start": 481.0, "text": "only the allowed apps for the session are present."}, {"start": 485.0, "text": "However, even though the Finder is present,"}, {"start": 488.0, "text": "it is not accessible unless it is explicitly added as a participant."}, {"start": 493.0, "text": "If your assessment app requires interaction with designated files,"}, {"start": 497.0, "text": "then you may wish to allow access to the Finder"}, {"start": 499.0, "text": "and make use of the standard Open and Save dialogs."}, {"start": 503.0, "text": "They provide a consistent, intuitive way to browse, organize,"}, {"start": 507.0, "text": "and access files across macOS."}, {"start": 510.0, "text": "Next, I'm adding the Finder as a participant in the assessment session."}, {"start": 515.0, "text": "With the allowedDirectoriesAndFiles property on the AEAssessmentConfiguration object,"}, {"start": 520.0, "text": "I can allowlist the Documents directory"}, {"start": 523.0, "text": "into which a student can save their scratch paper work"}, {"start": 525.0, "text": "in the Sample Assessment app."}, {"start": 528.0, "text": "This same setting also filters the directories"}, {"start": 530.0, "text": "and files available in the standard Open and Save panels."}, {"start": 535.0, "text": "When the student chooses to save their scratch paper work,"}, {"start": 538.0, "text": "they are presented with a standard Save panel,"}, {"start": 541.0, "text": "but only the allowlisted directory"}, {"start": 543.0, "text": "is available for them to save their work into."}, {"start": 547.0, "text": "Bringing up a Finder window shows the same filtered access"}, {"start": 551.0, "text": "and the allowlisted directory contains the scratch paper file"}, {"start": 554.0, "text": "the student just saved."}, {"start": 556.0, "text": "There's one more layer of control to cover:"}, {"start": 559.0, "text": "restricting which processes are allowed to run during an assessment."}, {"start": 563.0, "text": "Processes that are not essential to the execution of your assessment app"}, {"start": 567.0, "text": "can pose a threat to the integrity of the assessment session."}, {"start": 571.0, "text": "They can be used to capture screen content, log keystrokes,"}, {"start": 575.0, "text": "transmit data to external parties,"}, {"start": 577.0, "text": "or otherwise interact with the system"}, {"start": 579.0, "text": "in ways that undermine the secure testing environment."}, {"start": 583.0, "text": "Consequently, you may wish to restrict the allowed processes"}, {"start": 587.0, "text": "to just your assessment app and participant apps you allowlist."}, {"start": 592.0, "text": "Additionally, shortcuts and automator actions can also be shut down"}, {"start": 596.0, "text": "and their execution blocked."}, {"start": 598.0, "text": "Setting allowOnlyParticipantsToRun to true"}, {"start": 602.0, "text": "tells the system to shut down non-essential processes"}, {"start": 605.0, "text": "when the assessment begins."}, {"start": 607.0, "text": "With this enabled, only the main assessment app,"}, {"start": 610.0, "text": "its explicitly allowlisted participants,"}, {"start": 613.0, "text": "and essential system processes are permitted to run."}, {"start": 617.0, "text": "I'm also setting allowsUserScriptExecution to false"}, {"start": 621.0, "text": "to prevent Shortcut and Automator scripts from executing."}, {"start": 626.0, "text": "Before starting the assessment, both Safari and Notes are running"}, {"start": 630.0, "text": "as well as a long running Shortcut."}, {"start": 632.0, "text": "However, after starting the assessment, only the sample assessment app"}, {"start": 637.0, "text": "and its allowlisted participant, Finder, are still running."}, {"start": 642.0, "text": "Any user-initiated background processes, including the Shortcut,"}, {"start": 646.0, "text": "have also been stopped and cannot be accessed during a secure exam."}, {"start": 651.0, "text": "Whether adopting Assessment Mode for the first time"}, {"start": 654.0, "text": "or hardening an existing integration,"}, {"start": 656.0, "text": "the following best practices are ones that every developer should consider."}, {"start": 661.0, "text": "These practices will help with how you adopt the framework,"}, {"start": 665.0, "text": "how you shape the test-taker's experience,"}, {"start": 667.0, "text": "and how you keep your app functioning well across macOS releases."}, {"start": 672.0, "text": "With its deep system integration, let the Assessment framework do the work"}, {"start": 676.0, "text": "to secure the system environment for you."}, {"start": 679.0, "text": "Resist the urge to roll your own equivalents"}, {"start": 682.0, "text": "by adopting the framework's APIs directly"}, {"start": 685.0, "text": "and deleting the redundant code you've been maintaining."}, {"start": 689.0, "text": "Only restrict the minimum that your assessment actually requires."}, {"start": 693.0, "text": "Restrictions you add can detract from the test-taker's experience,"}, {"start": 696.0, "text": "so start permissive and tighten deliberately."}, {"start": 701.0, "text": "Accessibility should be treated as a requirement in an assessment context."}, {"start": 705.0, "text": "Every student deserves a fair testing experience,"}, {"start": 708.0, "text": "so design your app from day one to accommodate assistive technologies"}, {"start": 712.0, "text": "rather than treating them as exceptions to be carved out later."}, {"start": 718.0, "text": "If you're new to AAC, take note that session transitions"}, {"start": 721.0, "text": "don't occur the moment you call the begin and end session API."}, {"start": 726.0, "text": "Register for the framework's transition callbacks"}, {"start": 728.0, "text": "and drive your app's state off of those events"}, {"start": 731.0, "text": "so you always know when a session truly started, ended,"}, {"start": 735.0, "text": "or was terminated unexpectedly."}, {"start": 738.0, "text": "It's critical to re-validate your app on every macOS beta the day it drops."}, {"start": 744.0, "text": "Run your full assessment test matrix against it,"}, {"start": 746.0, "text": "and file Feedback reports immediately."}, {"start": 749.0, "text": "Waiting until the release to discover a regression"}, {"start": 752.0, "text": "means your customers discover it too."}, {"start": 755.0, "text": "Now that you've seen what's possible,"}, {"start": 757.0, "text": "consider these next steps to take your assessment app to the next level."}, {"start": 762.0, "text": "Use system pre-checks to validate device integrity"}, {"start": 765.0, "text": "before starting an assessment."}, {"start": 767.0, "text": "Enable accessibility features"}, {"start": 769.0, "text": "to provide an equitable assessment experience for all users."}, {"start": 774.0, "text": "Provide a familiar and intuitive experience by customizing access to Menu Bar items,"}, {"start": 780.0, "text": "the Dock, and the file system."}, {"start": 783.0, "text": "Secure your assessment's runtime environment"}, {"start": 786.0, "text": "by blocking non-essential processes."}, {"start": 790.0, "text": "And lastly, test your assessment solution with real exam workflows on macOS."}, {"start": 796.0, "text": "Whether you're building a classroom quiz app"}, {"start": 798.0, "text": "or a nationwide standardized testing platform,"}, {"start": 801.0, "text": "the AutomaticAssessmentConfiguration framework on macOS"}, {"start": 805.0, "text": "gives you the tools to verify system security prerequisites,"}, {"start": 809.0, "text": "tailor accessibility accommodations,"}, {"start": 811.0, "text": "customize the user experience,"}, {"start": 814.0, "text": "and lock down the runtime environment,"}, {"start": 816.0, "text": "all through a single, unified API, tailorable to your needs."}, {"start": 822.0, "text": "I can't wait to see how you use these new capabilities to deliver safer,"}, {"start": 826.0, "text": "more inclusive, and more polished assessment experiences"}, {"start": 829.0, "text": "for students everywhere."}, {"start": 831.0, "text": "Thank you for joining me."}]}