App Groups in iOS
2026年1月23日 14:41
参考:developer.apple.com/documentati…
一、什么是 App Group
- App Group 允许同一开发者团队(Team)下的多个 App访问一个或多个共享空间(Shared Container)
- 默认情况下(未使用 App Group):
- 每个 App 都运行在独立进程
- 拥有独立 沙盒
- 无法进行数据共享
- 无法进行 进程间通信
- 对于 iOS 应用:
- 即使开启了 App Group
- 也只能实现多 App / App Extension 之间的数据或空间共享
- 无法实现真正的跨进程通信( IPC )
- 对于 macOS 应用:
- App Group 可以放宽沙盒边界
- 允许通过 Mach IPC、UNIX domain socket 等机制实现 IPC
⚠️ App Group 在 iOS 与 macOS 上的能力存在显著差异
二、App Group 的历史背景
- App Group 是在 WWDC 2014 中提出的能力
- 随 iOS 8(以及 OS X 10.10 Yosemite)一起发布
- 设计初衷是配合 App Extension 的出现:
- 主 App
- Widget
- Share / Action Extension
- 等多个进程之间的安全数据共享
三、App Group 的基本规则与限制
1. 数量限制
- 一个开发者账号 最多可以注册 1000 个 App Group
- 一个 App:
- 可以不使用 App Group
- 也可以属于一个或多个 App Group
2. 使用范围
- 以下组合都可以使用 App Group:
- App ↔ App Extension
- App ↔ App
- App ↔ App Clip
3. Container ID 规则
- 创建 App Group 时需要设置一个 Container ID
- Container ID 用于标识共享空间
- 当 App Group 包含 iOS App(而非 macOS App)时:
- Container ID 必须以
group.作为前缀
- Container ID 必须以
示例:
group.com.company.shared
四、iOS 中 App Group 能做什么,不能做什么
4.1 能做的事情
- 多进程( App / Extension/App Clip)共享数据
4.2 不能做的事情
- ❌ 不支持进程间通信(IPC)
- ❌ 不支持 Mach IPC、socket、shared memory 等机制
- ❌ 不能假设共享目录的真实路径
- ❌ 不能假设共享目录一定长期存在
在 iOS 中,App Group 的本质是: 共享存储权限,而不是通信权限
五、iOS App 使用 App Group 共享空间的方式
系统提供了三种主要方式:
5.1 通过 UserDefaults 共享数据
- 必须使用
init(suiteName:)初始化
let defaults = UserDefaults(suiteName: "group.com.company.shared") ``defaults?.set("value", forKey: "key")
适用于:
- 配置项
- 功能开关
- 小体量状态数据
5.2 通过共享容器路径读写文件
- 使用
containerURL(forSecurityApplicationGroupIdentifier:)获取共享空间 URL
let containerURL = FileManager.default.containerURL( ``forSecurityApplicationGroupIdentifier: "group.com.company.shared" )
说明:
- 系统只会自动创建
Library/Caches目录 - 其他目录需要自行创建
- 适合存储:
- JSON
- SQLite
- 缓存文件
5.3 App Extension 使用 Background URL Session
- 对于 App Extension:
- 使用
URLSessionConfiguration.background - 设置
sharedContainerIdentifier
- 使用
- 下载的数据会直接存储在 App Group 的共享空间中
适用于:
- 后台下载
- Extension 与主 App 共享下载结果
六、工程实践注意事项
- 不要写死 App Group 的磁盘路径
- 不要假设共享容器一定存在
- 当设备上属于同一个app group中的所有应用都卸载后,共享容器也会被删除
- 多个 App / Extension 需要:
- 统一目录结构
- 统一数据格式
七、总结
- App Group 是 iOS 8 引入的一项共享容器能力
- 在 iOS 平台上:
- 它解决的是数据共享问题
- 而不是进程间通信 问题
- 合理使用 App Group,可以安全地协调多个 App / Extension 之间的状态与资源