Highlight
Apple 无障碍团队的 Drew Haas 系统介绍了 iOS/iPadOS 上限制设备到单个 App 的所有模式,以及如何确保这些模式下无障碍功能仍然可用。
核心内容
Apple 无障碍团队的 Drew Haas 系统介绍了 iOS/iPadOS 上限制设备到单个 App 的所有模式,以及如何确保这些模式下无障碍功能仍然可用。
内容分三部分:Guided Access(用户主动发起的辅助功能锁定,适合认知障碍用户和儿童使用场景);三种程序化 Single App Mode(Single App Mode、Autonomous Single App Mode、Persistent System Banner Mode,适合自助终端、考试、医疗场景);以及 Single App Mode 下的无障碍 API 使用方式。
Guided Access 是 iOS 内置的辅助功能,用户可以通过三击电源键或侧边按钮进入。应用可以为 Guided Access 添加自定义限制,比如锁定特定 UI 元素、禁用硬件按钮、限制触摸输入等。
Automatic Assessment Configuration 框架让教育类应用在考试场景中自动配置系统设置,比如关闭拼写检查、禁用自动完成、锁定字典等。
详细内容
Guided Access 的认知无障碍设计
(00:00)Guided Access 是 iOS 内置的辅助功能,专门为认知障碍用户设计。用户可以三击设备侧边按钮或电源键进入 Guided Access,应用进入锁定状态后,用户无法意外退出到主屏幕或切换到其他应用。
对于认知障碍用户、自闭症儿童、或者需要专注学习的场景,Guided Access 提供了一个安全的应用使用环境。应用开发者可以通过 UIAccessibility 接口为 Guided Access 添加更细粒度的控制。
关键点:
- Guided Access 是系统级辅助功能,不需要 MDM 参与。
- 用户可以通过三击侧边按钮快速进入和退出。
- 适合个人设备的使用场景,如教育、认知障碍辅助。
- 应用可以指定哪些区域在 Guided Access 模式下不可交互。
为 Guided Access 添加自定义限制
(03:20)应用可以通过 UIAccessibility 的 Guided Access 相关 API 添加自定义限制。最常见的做法是标记那些容易让用户迷路的 UI 元素。
// 标记账户设置按钮在 Guided Access 时禁用
let settingsButton = UIButton()
settingsButton.isAccessibilityElement = true
settingsButton.accessibilityTraits = [.button, .notEnabled]
关键点:
accessibilityTraits包含.notEnabled时,VoiceOver 会提示该元素不可用。- Guided Access 会尊重这些 trait 设置,锁定对应 UI 元素。
- 适合锁定账户设置、支付信息、退出登录等危险操作。
Guided Access 的事件监听
(05:40)应用可以监听 Guided Access 状态变化,比如在进入 Guided Access 时简化界面、退出时恢复完整功能。
NotificationCenter.default.addObserver(
self,
selector: #selector(guidedAccessStatusChanged),
name: UIAccessibility.guidedAccessStatusDidChangeNotification,
object: nil
)
@objc func guidedAccessStatusChanged() {
if UIAccessibility.isGuidedAccessEnabled {
// 进入 Guided Access 模式,简化界面
simplifyInterface()
} else {
// 退出 Guided Access 模式,恢复完整功能
restoreFullInterface()
}
}
关键点:
UIAccessibility.isGuidedAccessEnabled查询当前是否在 Guided Access 模式。guidedAccessStatusDidChangeNotification监听状态变化。- 应用可以在进入时隐藏高级功能,退出时恢复。
程序化请求 Guided Access 会话
(07:15)应用可以主动请求进入 Guided Access 模式,这适合考试、自助服务亭等场景。用户会看到一个系统确认对话框。
UIAccessibility.requestGuidedAccessSession(true) { success in
if success {
print("Guided Access 已启用")
} else {
print("用户拒绝或设备不支持")
}
}
关键点:
requestGuidedAccessSession(true)请求进入 Guided Access。requestGuidedAccessSession(false)请求退出。- completion handler 告知请求是否成功。
- 用户仍然可以手动退出(通过三击侧边按钮和输入密码)。
Single App Mode vs Guided Access
(09:30)Single App Mode 是 MDM 管理的锁定模式,由设备管理服务器控制。Guided Access 是用户主动发起的辅助功能,不需要 MDM 参与。
Guided Access:
- 用户主动发起
- 个人设备场景
- 通过辅助功能菜单或三击启用
- 应用内自定义限制
Single App Mode:
- MDM 远程控制
- 企业/教育设备场景
- 通过配置描述文件启用
- 系统级锁定,无法轻易退出
关键点:
- Guided Access 适合个人设备、儿童模式、认知障碍辅助。
- Single App Mode 适合企业设备、自助终端、教育考试。
- Guided Access 用户随时可以退出,Single App Mode 需要 MDM 解锁。
- 两种模式都应确保无障碍功能可用。
Autonomous Single App Mode
(12:00)Autonomous Single App Mode 让应用可以在特定条件下自动请求 Single App Mode,比如考试应用检测到考试开始。这需要设备处于监督模式下(Supervised),并且 MDM 已授予相应权限。
设备前提条件:
- 监督模式设备
- MDM 已配置 AutonomousSingleAppMode 权限
- 应用已在允许列表中
触发流程:
应用检测到考试开始
↓
请求 Autonomous Single App Mode
↓
系统自动锁定设备到当前应用
↓
考试结束后应用请求退出
关键点:
AutonomousSingleAppMode是 MDM 配置权限,不是应用 API。- 应用通过
UIAccessibility.requestGuidedAccessSession请求。 - 系统在满足前提条件时自动授予 Single App Mode。
- 适合自动化考试、医疗设备等无人值守场景。
Persistent System Banner Mode
(14:45)Persistent System Banner Mode 是较温和的锁定模式。系统会显示一个持续的横幅,提示用户设备处于管理状态,但仍然允许用户退出。
Persistent System Banner Mode:
- 显示系统横幅提示
- 允许用户手动退出
- 适合信息展示场景
- 不阻止正常设备使用
关键点:
- 比 Single App Mode 更温和,不会完全锁定设备。
- 适合展示信息、临时活动、演示场景。
- 用户可以随时退出,不会影响设备正常使用。
- 需要设备处于监督模式。
Automatic Assessment Configuration
(17:20)Automatic Assessment Configuration (AAC) 框架让教育类应用在考试时自动配置系统设置,关闭可能帮助作弊的功能。
import AutomaticAssessmentConfiguration
let configuration = AEAssessmentConfiguration()
configuration.spellCheck = .disabled
configuration.dictionaryLookup = .disabled
configuration.autoComplete = .disabled
let session = AEAssessmentSession(configuration: configuration)
session.begin { error in
if let error = error {
print("配置失败: \(error)")
} else {
print("考试模式已启动")
}
}
关键点:
AEAssessmentConfiguration配置考试时的系统设置。- 可以禁用拼写检查、字典查找、自动完成、预测文本。
AEAssessmentSession管理考试会话的生命周期。- 考试结束后系统自动恢复原始设置。
AAC 的系统配置选项
(19:10)AAC 框架提供了多个系统配置选项,覆盖常见的考试作弊途径。
configuration.spellCheck = .disabled // 禁用拼写检查
configuration.dictionaryLookup = .disabled // 禁用字典查找
configuration.autoComplete = .disabled // 禁用自动完成
configuration.predictiveText = .disabled // 禁用预测文本
configuration.grammarCheck = .disabled // 禁用语法检查
configuration.correction = .disabled // 禁用自动纠正
configuration.keyboards = .restricted // 限制键盘类型
关键点:
- 每个
configuration属性对应一个系统设置。 - 考试结束后系统自动恢复用户原设置。
- 配置只在当前应用内生效,不影响其他应用。
- 适合在线考试、认证测试、教育评估场景。
Single App Mode 下的无障碍功能
(21:30)无论使用 Guided Access 还是 Single App Mode,都应确保无障碍功能仍然可用。VoiceOver、切换控制、缩放等功能不应因为锁定模式而失效。
锁定模式下应保留的无障碍功能:
- VoiceOver (屏幕阅读器)
- Switch Control (切换控制)
- Zoom (放大器)
- Large Text (大号文字)
- Reduce Motion (减少动态效果)
- AssistiveTouch (辅助触控)
关键点:
- 锁定模式不应禁用用户需要的辅助功能。
- 应用应该在锁定模式下测试无障碍功能。
- 用户可能依赖 VoiceOver 导航应用界面。
- 切换控制用户需要能够操作所有关键功能。
在锁定模式下测试无障碍功能
(23:45)Apple 建议在实际设备上测试锁定模式下的无障碍体验。启用 VoiceOver、切换控制、缩放等功能,然后进入 Guided Access 或 Single App Mode,验证应用是否仍然可用。
测试清单:
- 启用 VoiceOver,验证所有可交互元素都有标签
- 启用切换控制,验证焦点顺序合理
- 启用缩放,验证界面布局不会被破坏
- 启用大号文字,验证文本不会溢出或被截断
- 启用减少动态效果,验证关键动画仍然提供反馈
关键点:
- 在实际设备上测试,模拟器可能不完全一致。
- 每种辅助功能都应该单独测试。
- 验证应用的核心功能在锁定模式下仍然可访问。
- 测试退出锁定模式后的恢复流程。
核心启发
1. 为 Guided Access 设计界面简化策略
- 做什么:当用户进入 Guided Access 时,自动隐藏复杂功能和设置入口,只保留核心功能。
- 为什么值得做:认知障碍用户和儿童在简化界面中更容易完成任务,不会迷路或误操作。
- 怎么开始:监听
guidedAccessStatusDidChangeNotification,进入时隐藏高级按钮,退出时恢复。
2. 在考试应用中集成 Automatic Assessment Configuration
- 做什么:教育类应用在考试开始时自动禁用拼写检查、字典查找、自动完成等系统功能。
- 为什么值得做:防止学生利用系统功能作弊,同时保证考试环境的公平性和一致性。
- 怎么开始:创建
AEAssessmentConfiguration,禁用相关选项,用AEAssessmentSession启动考试会话。
3. 为自助终端设备实现 Autonomous Single App Mode
- 做什么:自助服务应用在检测到空闲或特定条件时,自动请求进入 Autonomous Single App Mode。
- 为什么值得做:无人值守设备需要自动锁定到当前应用,防止用户误操作退出到主屏幕或访问其他应用。
- 怎么开始:确保设备处于监督模式,MDM 已授予
AutonomousSingleAppMode权限,应用中调用requestGuidedAccessSession。
4. 标记容易迷路的 UI 元素为 Guided Access 禁用项
- 做什么:在账户设置、支付信息、退出登录等危险操作上添加
.notEnabledtrait。 - 为什么值得做:防止认知障碍用户或儿童在 Guided Access 模式下误操作,导致数据丢失或安全问题。
- 怎么开始:找到所有危险操作按钮,在
accessibilityTraits中添加.notEnabled,在 Guided Access 模式下测试。
5. 在锁定模式下保持无障碍功能可用
- 做什么:确保应用在 Guided Access 或 Single App Mode 下仍然支持 VoiceOver、切换控制、缩放等辅助功能。
- 为什么值得做:锁定模式的用户往往更需要无障碍功能,禁用这些功能会造成访问障碍。
- 怎么开始:在设备上启用各种辅助功能,进入锁定模式,验证应用的所有关键功能仍然可访问。
关联 Session
- What’s new in managing Apple devices — WWDC22 设备管理总览,覆盖 MDM、监督模式、Apple Configurator 的更新。
- Adopt declarative device management — 介绍声明式设备管理,包括 Autonomous Single App Mode 的配置方式。
- What’s new in web accessibility — Web 应用的无障碍实践,包括自定义控件、SSML 和 dialog 元素。
- Add accessibility to your Unity games — 为 Unity 游戏添加 VoiceOver、切换控制、动态文本等无障碍功能。
评论
GitHub Issues · utterances