App Group 是苹果提供的一种跨应用数据共享机制,允许同一开发者账号下的多个应用或扩展(如 Widget、Broadcast Extension)通过共享容器实现数据互通。以下是其核心要点:
一、核心原理 #
App Group 通过为关联的应用分配共享容器目录,打破 iOS 沙盒机制的限制。所有加入同一 Group 的应用可访问该目录,实现以下功能:
- 轻量级数据共享:使用
NSUserDefaults
存储键值对数据,适合配置信息同步。 - 大文件共享:通过
NSFileManager
读写共享目录中的文件、数据库或媒体资源。 - 实时通信:宿主应用与扩展(如录屏直播的 Broadcast Extension)可通过共享数据实现状态同步。
二、配置流程 #
- 创建 App Group
- 在 Apple Developer 的 Identifiers → App Groups 中创建 Group ID,格式需为
group.主应用BundleID.自定义名称
(如group.com.example.app.shared
)。
- 在 Apple Developer 的 Identifiers → App Groups 中创建 Group ID,格式需为
- 关联应用/扩展
- 在 Xcode 工程中,为每个需共享数据的 Target(主应用、扩展)启用 Capabilities → App Groups,勾选已创建的 Group ID。
- 代码实现共享
NSUserDefaults:
let defaults = UserDefaults(suiteName: "group.com.example.app.shared") defaults?.set("value", forKey: "key")
NSFileManager:
let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.app.shared") let fileURL = containerURL?.appendingPathComponent("data.txt")
三、注意事项 #
- 数据生命周期
- 共享容器仅在关联应用运行时存在,宿主应用关闭后数据可能丢失,重要数据应存储于宿主应用的持久化目录。
- 兼容性限制
- 仅支持同一开发者账号下的应用,且 Group ID 需预先在开发者后台配置。
- 安全与约定
- 共享数据需约定统一的键名和数据类型,避免冲突;敏感数据建议加密处理。
- 不支持的场景
- 无法直接共享 Core Data 或 SQLite 数据库文件的结构,需通过文件路径手动管理。
四、典型应用场景 #
- 主应用与扩展协作:如 Today Widget 展示宿主应用的实时数据。
- 多应用数据同步:如工具类套件中的文档跨应用编辑。
- 直播/录屏功能:Broadcast Extension 将录屏数据传递至宿主应用进行处理。
通过 App Group,开发者能够以较低成本实现应用间高效协作,但需注意数据管理的规范性和安全性。