View in English

  • 打开菜单 关闭菜单
  • Apple Developer
搜索
关闭搜索
  • Apple Developer
  • 新闻
  • 探索
  • 设计
  • 开发
  • 分发
  • 支持
  • 账户
在“”范围内搜索。

快捷链接

5 快捷链接

视频

打开菜单 关闭菜单
  • 专题
  • 相关主题
  • 所有视频
  • 关于

返回 WWDC25

  • 简介
  • 概要
  • 转写文稿
  • 了解 ManagedApp 框架

    了解 ManagedApp 框架如何帮助你的 App 适应受管理环境。我们将介绍如何接收配置数据、如何安全地管理 App 密钥,以及如何根据组织提供的设置来定制 App 的行为。我们还将通过一些真实示例来说明如何为企业和教育环境打造更灵活、更易于管理的 App。

    章节

    • 0:07 - 开场介绍
    • 2:51 - ManagedApp 框架简介
    • 5:14 - 工作流程
    • 7:26 - 示例情景
    • 12:17 - 具体实现
    • 21:27 - 最佳实践

    资源

    • Apple Business Manager User Guide
    • Apple School and Business Manager API
    • Apple School Manager User Guide
    • ManagedApp
    • Support - Apple Platform Deployment
      • 高清视频
      • 标清视频

    相关视频

    WWDC25

    • Apple 设备管理和身份管理方面的新动向
  • 搜索此视频…

    大家好 我叫 Bob Whiteman 是一名 iOS 高级设备管理工程师 很高兴与你分享一个新框架 这个框架能让 托管部署的 App 更易于使用并且更加安全 世界各地的组织在他们的办公室、 零售店和学校使用 Apple 设备 人们利用它们来 学习、教学、工作和创造 在这些设备上运行的 各种 App 使得这一切成为可能 组织的管理员使用设备管理服务 来确保员工拥有成功所需的各类 App 员工通常会迅速掌握 这些组织 App 的使用方法 但他们通常需要先设置 App 这一次性的设置往往令人望而生畏 他们可能需要输入 服务器、用户名、密码 以及双重身份验证码 然后他们必须进入 App 的设置界面 并根据组织的要求逐项进行设置 这个过程包含多个步骤 如果在操作中出现任何问题或错误 通常会导致不良后果 他们可能会因为沮丧 而放弃使用相关 App 如果联系技术支持 不仅会浪费时间 还会增加组织的支持成本 组织甚至可能因此决定 放弃对相关 App 的支持 作为 App 开发者 你可以尝试改善这种体验 但问题是这部分工作 不是 App 核心功能的一部分 需要额外花费许多精力 考虑一下要实现无缝设置体验 需要构建的一切 你需要与组织的身份识别提供程序 实现联合身份验证 你需要构建并运营一个配置网站 以便管理员能够指定配置 并推送至用户设备上运行的 App 中 你需要与组织的证书颁发机构 和身份验证基础设施集成 以便 App 可与组织的服务器通信 你需要发布 App 的自定变体 以提供某些组织所需的 品牌化功能和自定功能 要是你完全不需要 做这些工作该多好? 让我们彻底消除这种复杂的设置流程 现在你可以为特定组织、特定设备 和特定用户预先配置相关 App 完全不需要设置过程 App 从首次启动时就能使用 用户对 App 的第一印象会大大改观 因此使用率会更高 管理员会更愿意部署它 因为员工喜欢它 而且它最大限度降低了支持成本 如何才能实现这种体验呢? 我很高兴向大家介绍 ManagedApp 框架 ManagedApp 框架能够自动配置 受管理的 App 及其扩展 App 可以用它 来对设备进行认证并简化用户鉴定 使用这个框架有助于 App 满足 数据安全和访问控制的高安全要求

    为此 ManagedApp 框架允许管理员 提供自定 App 配置 并预置密码、证书和身份 它可以搭配其他设备管理技术使用 例如 扩展单点登录、 管理式设备认证和注册单点登录 ManagedApp 框架 可交付四种类型的数据 特定于 App 的配置是 特定 App 支持的任意数据 这包括对这个 App 有意义的设置、 选项和小型素材 其他三种类型是密钥: 密码、证书和身份 身份可以是 PKCS #12 文件、 SCEP 身份或 ACME 身份 ACME 身份支持硬件绑定密钥和认证 所有这些数据类型都会安全存储 并且仅提供给管理员指定的 受管理的 App 或扩展 ManagedApp 框架适用于 iOS 18.4、 iPadOS 18.4 和 visionOS 2.4 它要求 MDM 服务器使用 声明式设备管理来管理 App 它从 App 安装完毕之时 或接管已安装 App 的管理时 开始生效 它适用于所有 MDM 注册类型 它支持大多数 App 扩展类型 但不适用于 在高度受限的环境中运行的扩展 例如 键盘扩展就无法使用 ManagedApp 框架 除非它被授予完全访问权限 在本讲座中 我将介绍相关的 开发和部署工作流程 探索这个框架适用的一些场景 深入探讨一些代码 然后推荐一些最佳实践 首先 它是如何运作的呢? 我们从受管理的设备入手 管理员通过 MDM 服务器 使用 MDM 协议 向设备发送管理命令和查询

    管理员管理 App 这通常是安装 App 在管理 App 的过程中 管理员需要指定 设备应提供给 App 及其扩展的配置和密钥

    当 App 启动时 它会向 ManagedApp 框架询问 相关的配置和密钥 然后框架会将一份副本交给 App App 会立即应用配置 并根据需要使用密钥 在那之后 管理员可以随时 更新配置或密钥 如果更新时 App 正在运行 框架会通知 App 然后 App 会立即应用更新 但在这一切发生之前 作为 App 开发者 你必须编写应用程序 你需要为配置编写解码器 并编写代码以应用配置并使用密钥 然后你需要编写并发布规范 告诉管理员如何配置你的应用程序 这个规范详细说明了 App 在配置中 支持的键和值、 它们控制着什么、 App 需要哪些密钥 以及如何使用它们 这就是我对这个框架 感到如此兴奋的原因 配置不是由 Apple、 协议或 MDM 服务器指定的 那样指定的配置 在所有 App 中通用 并且不是很有用 而是由你 即 App 开发者 指定如何配置你的 App 这开辟了广阔的新机会 你比任何人都更了解你的 App 你可以提供最强大、最实用 且最具创新的方法 来配置你的 App 从而为组织提供强势助力 ManagedApp 框架不是一个解决方案 而是一个可供你在其中 轻松构建解决方案的平台 了解到这一点后 来看看我们认为 ManagedApp 框架 特别能派上用场的一些场景 我们可以在很多场景中使用这个框架 以安全方式向第三方浏览器提供凭证 根据相关人员的角色自定内部 App 配置 Safari 扩展 确保设备管理服务 与它管理的 App 之间安全通信 我将更详细地介绍其中三种场景 先从许可讲起 App 开发者通常需要一种方法 让他们的 App 服务器 能够将请求归因于正确的用户 一种常见的解决方案是许可证令牌 当组织许可使用服务器后 开发者会向组织颁发一个 唯一的许可证令牌 管理员使用 MDM 将这个许可证令牌 分发到组织中 使用这个 App 的所有实例 然后 当 App 向服务器发出请求时 会在请求中包含许可证令牌 现在服务器就能将请求 归因于正确的组织 这带来了安全问题 组织必须在 存储和传递令牌时保护这个令牌 如果组织外部的人员获取了 许可证令牌 他们可以使用相关服务器 而组织将为他们买单 开发者和管理员可以使用 受管理的 App 配置功能 将这个令牌分发到受管理的设备 但是 ManagedApp 框架旨在保护配置 免受提取或篡改 更重要的是 ManagedApp 框架提供了 比许可证令牌更好的方案 即许可证密钥 ManagedApp 框架可以 预置用于许可目的的 加密身份 这比令牌安全得多 管理员使用由组织或 App 开发者 颁发的证书在设备上预置加密身份 私钥在设备端生成 并且始终保存在设备中 这种方式比在整个架构中 传输令牌更安全 旧版受管理的 App 配置功能 不支持许可证密钥 ManagedApp 框架更安全 不仅支持身份 还支持 App 扩展 若你的 App 使用受管理的 App 配置 则应当迁移到 ManagedApp 框架 接下来 让我们研究一下 VPN 扩展 ManagedApp 框架 对于 VPN 扩展特别有用 VPN 服务器需要强验证 确保设备属于组织 并被授权连接到网络 这个架构与前面的场景非常相似 但身份会提供给 VPN 扩展而非 App ManagedApp 框架 可以提供 Apple 支持的 最强大的身份验证材料 使用管理式设备认证 管理员需要为这个特定设备 预置经过认证的硬件绑定密钥 ManagedApp 框架可将密钥 直接提供给 VPN 扩展 并且仅限这个扩展使用 它用这个身份 向 VPN 服务器进行身份验证 这消除了 VPN 管理员担心的 许多潜在威胁 最后一个场景是身份识别提供程序 身份识别提供程序 使用扩展单点登录来简化用户 使用联合账户 登录各种 App 和网站的过程 它还可以搭配联合 Apple 账户使用 以实现基于账户的注册类型 每个身份识别提供程序都会 设计各自的身份验证协议 这些协议通常使用手动输入的凭证 现在借助 ManagedApp 框架 身份识别提供程序还可以 包含许多其他类型的身份验证材料 这可能是对设备进行身份认证的 硬件绑定身份 以确保登录是在授权设备上进行的 对于新账户 这可能是 用于首次身份验证的初始临时密码 它可以是将登录 绑定到组织的令牌或身份 实际上 这可以是身份识别提供程序 需要的任何类型的密钥 ManagedApp 框架支持所有这些密钥 如果身份识别提供程序 支持注册单点登录 配置和密钥在注册期间也可用 希望大家了解 ManagedApp 框架 可通过多种方式 为受管理的 App 提供支持 现在是时候 看看如何在你的 App 中实现了 ManagedApp 框架的 API 专注于尽可能简单、安全地 将配置和密钥交付给 App 这个框架有四个独立的类 每个类对应一个数据类型 前三个提供了 App 需要的 确切内置数据类型: 包含密码的字符串、SecCertificate 或 SecIdentity 第四个有点不同 ManagedAppConfigurationProvider 提供特定于 App 的配置 没有对应的内置数据类型 这是 App 需要的任何数据类型 作为 App 开发者 你可以定义这些数据的结构 我将给出一个使用配置的示例 然后提供另一个使用身份的示例 最后 我将介绍如何发布 App 规范

    首先来看看这个“Landmarks”App 我们将让它变得可配置 以便在课堂中轻松使用 第一步是确定管理员可以配置的内容 这是“Landmarks”App 中的 合辑视图 我们要让管理员能够 配置新的合辑 这样 教师就可以收集 学生在随后的地理课中使用的地标

    在代码中 我们首先编写一个结构体 它代表管理员为这个 App 的实例 配置的所有内容 它具有受管理合辑的只读属性 属性类型是可选的 这是因为这个 App 可能未受管理 或者管理员可能没有应用配置 或者管理员应用了配置 但它不包括受管理的合辑 配置的大多数属性都是可选的 或提供默认值

    当 ManagedApp 框架从 MDM 服务器 收到配置 它需要解码网络传输格式 因此我们让这个结构体 遵从 Decodable 协议 我们为合辑指定一个 CodingKey 让 LandmarkCollection 类 遵从 Decodable 后 我们可以到此为止 让编译器为我们的配置类 合成一个构造器 但大多数 App 需要自定验证规则 因此我们将在这里 编写一个显式构造器 这就完成了配置类的代码编写 你的 App 如何接收这个配置呢? 这个 API 使用 Swift 并发 因此我们先创建一个 Task 在这个 Task 中 我们使用 ManagedApp 框架中的 ManagedAppConfigurationProvider 类 configurations 方法 使用一个异步序列 交付配置 传递给 configurations 方法的参数 是配置结构体的类型 要开始接收配置 应使用 for await 循环 异步序列生成可选的配置类型 在这段代码中 config 的类型 是可选的 LandmarksManagedConfig 让我们通过查看设备上发生的事件 来了解这些部分是如何协同工作的 首先 管理员创建一个 编码的配置 并将它发送到设备 设备会保存这个配置 当 App 开始使用 for await 循环 迭代异步序列时 设备将编码配置的副本 传递给解码器方法 这样就可以实例化 包含 App 所需属性的 配置结构体 最后 框架将这个实例 提供给异步序列 在那之后 如果管理员发送更新配置 这个过程就会自动重复 如果 App 未受管理 或者如果管理员 没有指定配置 或者如果解码失败 那么这个序列将返回空值 简而言之 你的 App 无需担心这些情况 每当这个序列产生一个值或空值时 那就是你 App 当前的受管理的配置 因此 在 for await 循环的主体中 我们所需要做的就是 将配置中的值拷贝到模型数据上的 managedCollection 属性中 由于配置可能随时更新 因此 for await 循环没有终止条件 不用担心 永远循环不是浪费资源 for await 循环的主体 仅在产生值时执行 我们应该从哪里开始这项任务? 它可能位于应用程序中的 任何位置 通常 它位于 App 启动路径 早期的方法中 对于“Landmarks”App 我们会将它合并到模型数据的 LoadCollections 方法中 合辑在 App 启动后不久就会载入 将 managedCollection 添加到视图中就大功告成了 这就是实际效果 合辑视图现在有一个 Managed Collection 板块 显示了管理员配置的标题和地标 此外还有一个额外优势 我们已经编写的代码就是 支持更新所需的全部内容 当管理员更改配置时 视图会自动更新以显示新地标 我们来看一个使用身份的例子 假设我们想允许管理员 添加更多地标 我们让 App 从素材服务器 下载地标 并让管理员指定托管素材的 URL 这样 管理员就能灵活地 将素材托管在需要的任何位置 我们可以轻松地将素材 URL 添加到我们之前开发的配置 然后 我们将允许管理员 预置一个身份 App 在连接到素材服务器时 将使用这个身份 通过双向 TLS 进行自身身份验证 框架中的全部三个密钥提供程序 都使用这种模式 每个密钥都有一个字符串标识符 有一种通过标识符查找密钥的方法 你可以选择 App 支持的标识符 大多数情况下 你可以对标识符进行硬编码 如果你希望 App 在可用密钥发生变化时收到通知 你可以使用 AsyncSequence 它会生成一个数组 其中包含 当前预置的这个类型密钥的 所有标识符 如果 App 支持标识符的动态列表 AsyncSequence 也很有用 当“Landmarks”App 下载素材时 它不需要那么复杂的处理 因此我们只需使用硬编码标识符 App 使用 URL 会话发出请求 当你实施双向 TLS 时 涉及的大部分代码都是样板代码 我们只关心获取身份 也就是中间这几行 我们使用了 ManagedAppIdentitiesProvider 以及一个硬编码标识符 来查找 SecIdentity 如果管理员没有提供身份 我们就取消查找 这样就可以了 只需这几行代码 我们的 App 就获得了所需的身份 我们不需要处理键的属性、 证书签名请求、 或预置身份过程中 所涉及的任何其他内容 我们只是使用了 管理员为我们提供的身份 我们的最后一项任务是发布规范 规范会说明管理员 可以如何配置“Landmarks”App 我们会记录配置的格式 一个简单方法是提供一个示例 这里是配置的编码格式的示例 配置的网络传输格式是一个属性列表 规范需要记录详细信息 例如地标 ID 的有效值列表 如果解码器具有自定验证 我们还会记录 它可能生成的错误代码 以便管理员诊断他们创建的配置 存在的问题 我们会记录 App 支持的 任何密钥标识符 对于“Landmarks”App 这是我们 先前使用的硬编码标识符 我们会记录密钥用于下载素材 这里也非常适合记录地标素材的 预期格式 我们通常以管理员可以访问的文档 或网站的形式发布这些信息 大功告成 在开发 App 时 需要牢记一些最佳实践 配置不适用于大量数据移动 这是指千字节而非兆字节的数据量 应当让 App 从服务器下载数据 并在配置中指定 URL 就像我们之前对“Landmarks”App 所做的那样 不要将密钥保存过长时间 只需在每次需要时查找即可 这不仅是安全编程的最佳实践 还可以确保你的 App 在管理员更新时 始终使用最新的密钥 在设计你的配置时 不要只通过一个开关 来控制 App 是否受管理 这会改变 App 中的多种行为 你应当提供单独的配置选项 每个选项控制 App 行为的一个部分 这样 管理员可以获得 最大的灵活性 考虑向前和向后兼容性 当你发布 App 的新版本时 你可以在配置中添加、更改 或删除选项 对于管理员来说 为你的 App 的不同版本 提供不同的配置会很困难 为避免这种情况 请确保 解码器能够处理较旧的配置 并忽略它无法识别的新键 这样 管理员可以为整个设备群 提供一种配置 如果你的 App 目前使用旧版 受管理的 App 配置功能 现在是时候迁移至新方案了 在过渡期间 你的 App 可以 同时支持这两项功能 但 ManagedApp 框架配置优先 这样 管理员就可以 在不中断的情况下 过渡到 ManagedApp 框架 当你提交 App 以供审核时 审核人员会试用 App 的功能 如果其中一些功能仅在 App 处于受管理状态 且应用了配置或密钥时才可以访问 可能会导致审核人员 无法审核你的 App 有几种方法可以解决这个问题 考虑为你的 App 添加演示模式 以展示 App 功能 就像已进行配置一样 演示模式在向用户 演示 App 时也同样有用 另一种选择是录制一段 App 视频 来展示这些功能 你可以通过“注释”将视频提交到 App Store Connect 以供 App 审核 并准备好提供说明和凭证 这样 审核人员就能 使用设备管理服务 注册他们的设备 从而适当地配置 App 最重要的是发挥创造力 思考如何通过 ManagedApp 框架 让用户惊叹于你的 App 的易用性 向用户了解他们的需求 采用这个框架并逐步替换 原有的受管理的 App 配置 请将有关这个框架的任何反馈 发送给我们 要了解有关设备管理的更多信息 请观看“Apple 设备管理的 新功能”讲座 感谢观看 祝你在 WWDC 度过美妙的时光

    • 0:07 - 开场介绍
    • ManagedApp 框架可简化跨组织为受管理部署设置 App 的流程。这个框架能消除用户在设置 App 时所面临的复杂且多步骤流程,从而减少挫败感,提升 App 使用率,并降低支持成本。 借助 ManagedApp 框架,你可以为每个组织、设备和用户预先配置 App,从而实现 App 在启动时立即可用。这种方法可提升用户体验、提高 App 采用率,同时减轻管理员的支持负担,从而实现更经济高效的 App 部署。

    • 2:51 - ManagedApp 框架简介
    • ManagedApp 框架让管理员能够安全地配置受管理的 App 及其扩展。该框架支持设备和用户身份验证,满足高标准的安全需求,并能预置密码、证书、身份信息以及 App 专用的配置数据。 系统会安全地存储这些数据,并确保只有获得授权的受管理的 App 或扩展才能访问这些数据。该框架与其他设备管理技术集成,并支持大多数 App 扩展类型,从而可增强管理式设备的数据安全性和访问控制。

    • 5:14 - 工作流程
    • 管理员可以使用此框架通过 MDM 服务器远程管理设备和 App。该框架支持将配置设置和机密信息从管理员处安全地传输到 App。 你编写的解码器和规范可为其他开发者提供详细的 App 配置指南,这一贡献至关重要。管理员会利用这些信息,根据其组织的具体需求定制 App 行为,从而提升安全性与功能性。该框架作为一个平台,让你能够针对各类组织需求开发创新解决方案。

    • 7:26 - 示例情景
    • ManagedApp 框架可增强受管理的 App 的安全性和功能,涵盖多样化应用场景。该框架支持安全分发许可证密钥 (可替代安全性较低的许可证令牌),并提供用于许可目的的加密身份。 例如,这个框架对于 VPN 扩展特别有用,它通过经认证的硬件绑定密钥提供强身份验证。此外,针对身份提供方,ManagedApp 框架还支持扩展单点登录,兼容各种身份认证凭证,包括:硬件绑定身份、临时密码及令牌等。 总体而言,ManagedApp 框架可提高 App 的安全性,简化管理流程,并支持 App 扩展,因而是组织部署受管理的 App 时的理想解决方案。

    • 12:17 - 具体实现
    • 在 iOS 中,这个框架可简化将配置和机密信息安全地传递给 App 的过程。该框架由四个独立的类组成,每个类都专门用于处理特定的数据类型:字符串、SecCertificates、SecIdentities 和特定于 App 的配置。 对于特定于 App 的配置,你可以使用 Swift 结构体来定义数据的结构。这种灵活性让管理员能够根据具体需求自定 App 的行为。Landmarks App 就是一个例子,管理员可以对其进行配置,以显示特定的地标集合,适合在课堂上使用。 为实现这一功能,你可以创建一个结构体,用于表示可配置的设置,例如受管理的集合。该结构体遵从“Decodable”协议,因此,框架可以解码从移动设备管理 (MDM) 服务器接收的配置数据。然后,App 会使用 Swift 并发异步检索配置,确保进程不会阻塞主线程。 当管理员更新配置时,App 会自动接收并应用更改,从而实现动态化自适应调整。 此外,这个框架还支持处理身份信息等敏感信息。你可以使用 ManagedAppIdentitiesProvider 来安全地查找和检索预置的身份信息。此功能可简化双向 TLS 身份验证的实现,因此 App 可以安全地连接到素材服务器。 最后,要让管理员能够有效地配置 App,你需要发布一份规范文档,详细说明配置格式、有效值、错误代码以及任何受支持的机密信息标识符。这份规范文档可作为管理员的指南,帮助他们正确地创建和应用配置。

    • 21:27 - 最佳实践
    • 在开发 App 时,应遵循配置管理的最佳做法。从服务器下载数据,而不是将其存储在仅处理千字节数据的配置中。为确保安全并始终使用最新版本,应在需要时查找机密信息。 配置选项需要做到独立且精细化,以便为管理员提供最大程度的灵活性。需要考虑向前和向后兼容性;解码器需要能够处理旧配置并忽略新密钥。 在设计 App 时,应确保审核人员能够测试所有功能,甚至包括那些需要管理或配置的功能。你可以通过演示模式、视频或提供审核专用的凭证来实现这一点。请充分发挥创造力、重视用户反馈,并采用 ManagedApp 框架,打造方便易用的 App。

Developer Footer

  • 视频
  • WWDC25
  • 了解 ManagedApp 框架
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习与 AI
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载 (英文)
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    获取 Apple Developer App。
    版权所有 © 2025 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则