如何阻止MacOS Document-based App自动加载遗留缓存文档
缓存文档的具体存储位置
这类自动加载的上次启动留存文档,本质是macOS为文档类App留存的状态恢复快照与自动保存文档,根据App是否开启沙盒,存储路径分两类:
- 开启沙盒的App(Xcode默认调试配置):所有缓存存放在App独立沙盒目录下
- 自动保存的文档快照路径:
~/Library/Containers/[你的App Bundle ID]/Data/Library/Autosave Information/ - 系统记录的“上次打开文档列表”状态缓存路径:
~/Library/Containers/[你的App Bundle ID]/Data/Library/Saved Application State/[你的App Bundle ID].savedState/
- 自动保存的文档快照路径:
- 未开启沙盒的打包App:缓存直接存放在用户目录的全局Library下
- 自动保存的文档快照路径:
~/Library/Autosave Information/ - 系统状态恢复缓存路径:
~/Library/Saved Application State/[你的App Bundle ID].savedState/
- 自动保存的文档快照路径:
注意:从Xcode启动的调试App默认使用沙盒隔离路径,不要直接到全局Library目录查找,容易因路径错配找不到对应的损坏文件。
删除操作的特殊注意事项
执行删除操作时需要留意以下要求,避免操作失效或误伤数据:
- 必须先完全终止App进程和对应的Xcode调试会话,否则系统会在删除完成后,把内存中留存的App状态重新写入缓存文件,导致删除操作无效。
- 精准定位待删除文件:Autosave Information目录下的自动保存文件,均以“[App名称] 自动保存的 [文档名].autosaveddocument”格式命名,只删除和你的App匹配、对应崩溃文档的文件,不要直接清空整个目录,避免误删其他App未保存的工作内容。
- 删除前建议备份疑似损坏的缓存文件:将这类文件复制一份到桌面留存,后续调试
initWithCoder、readFromData方法的解码崩溃逻辑时,该文件是最直接的复现样本,无需反复制造崩溃场景。 - 若App开启了iCloud云文档同步,需额外检查iCloud容器目录下的副本:对应路径为
~/Library/Mobile Documents/[团队ID]~[App反向域名]/Data/,如果该路径下存在同步的同份损坏文档,删除本地缓存后系统会自动从云端拉回副本,再次触发启动崩溃。 - 可临时通过启动参数降低操作风险:在Xcode的Scheme配置中添加启动参数
-NSDocumentPersistDocumentsAtLaunch NO,就能暂时跳过启动时自动加载上次文档的逻辑,先让App正常启动,再通过App内部的最近文档列表定位损坏文档手动删除,比盲目删除文件更稳妥。
内容的提问来源于stack exchange,提问作者Carl Carlson
相关产品推荐
相关产品推荐

