What's new in assessment
Developer Tools 进阶 22m

评估功能的新变化

What's new in assessment

2020年6月23日

在 Apple 官方观看视频

一句话判断

如果你的 App 需要在教育场景中提供测验或考试功能,这场 Session 展示了如何利用 Assessment Session framework 构建受管理的考试环境——但对大多数开发者来说这并不是刚需。

这场 Session 讲了什么

苹果在 iOS 14 中引入了 Assessment Session framework,这是一个面向教育领域的专门框架。它的核心功能是在考试模式下限制设备的功能,确保学生在考试期间无法切换到其他 App、查看通知或使用被禁止的功能。

Session 介绍了 AEAssessmentSession 的生命周期管理:启动考试会话后,设备会进入受限模式,只有被允许的 App 可以运行。开发者可以配置允许的特性(如是否允许拼写检查、自动补全、键盘快捷键等)。考试结束后,通过结束会话恢复设备的正常状态。整个过程都受到系统的严格管控,确保考试的公平性和安全性。

此外还介绍了配置选项,包括允许使用的键盘、是否开启辅助功能等细粒度控制,以及如何在 App 中优雅地处理会话中断(如设备重启)等边界情况。

值得深挖的点

受限环境的系统级保证。 Assessment Session 不是简单的引导访问模式(Guided Access),它是系统级的会话管理。会话期间系统会拦截通知中心、控制中心、Siri 等系统级交互,这种限制级别是普通 App 无法自行实现的。

会话状态的持久化与恢复。 考试过程中可能出现设备意外重启。Session 强调了会话状态的持久化设计——App 需要在会话开始时保存状态,在重新启动时检查是否有未完成的考试会话并恢复。

代码片段

import Assessment

// 创建考试会话配置
let configuration = AEAssessmentConfiguration()
configuration.allowsKeyboardShortcuts = false  // 禁止键盘快捷键
configuration.allowsActivityContinuation = false  // 禁止接力功能

// 启动考试会话
let session = AEAssessmentSession(configuration: configuration)
session.begin { result in
    switch result {
    case .success:
        print("考试会话已启动,设备进入受限模式")
    case .failed(let error):
        print("启动失败: \(error.localizedDescription)")
    @unknown default:
        break
    }
}
// 在 App 启动时检查未完成的会话
func sceneDidBecomeActive(_ scene: UIScene) {
    if AEAssessmentSession.isRunning {
        // 存在上次未完成的考试会话,恢复考试状态
        restoreExamState()
    }
}

// 正常结束考试
func endExam() {
    session?.end()
    // 会话结束后设备自动恢复正常状态
}

最佳实践

  • 在 App 启动时检查未完成的会话。 通过 AEAssessmentSession.isRunning 检查是否有未完成的考试,引导用户回到考试界面。
  • 最小化允许的功能集。 只开启考试确实需要的功能,其余全部关闭。
  • 提前处理权限请求。 考试模式下无法弹出系统权限对话框,所有必要权限必须在考试开始前获取。
  • 做好离线支持。 很多考试场景网络不可用,确保考试内容已经预加载完成。

还有什么值得关注

  • AEAssessmentConfiguration 支持细粒度的辅助功能配置,满足无障碍考试需求
  • 会话期间日志系统仍然可用,但内容受保护,只能在会话结束后通过特定 API 读取
  • 该框架需要特殊的教育类 App Entitlement,普通开发者账号无法直接使用
  • 配合 Apple School Manager 可实现更大规模的考试部署管理
WWDC 2020