Mac Catalyst沙盒应用写入外置磁盘应选用哪种保存文件对话框
适用对话框选型说明
- 你此前使用的
[UIDocumentPickerViewController alloc] initForExportingURLs]属于文件导出模式,该模式强制要求传入沙盒内已存在的本地文件路径,系统后续会自动完成文件复制/移动操作,完全无法满足大文件无法提前在沙盒内生成临时文件的需求。 - 直接在外置驱动器创建、写入大文件的场景,应当使用创建新文档模式的
UIDocumentPickerViewController,对应初始化方法为initForCreatingDocumentURLsWithTypes:asCopy::- 该弹窗会允许用户自主选择外置驱动器上的目标保存位置,用户确认选择后,系统会自动为应用授予对应路径的安全作用域写入权限,无需提前在沙盒内生成任何临时文件
- 拿到回调返回的目标URL后,先调用
startAccessingSecurityScopedResource()方法激活权限,即可直接在该路径下创建文件、流式写入大体积数据,全程不会占用内置存储空间,写入完成后调用stopAccessingSecurityScopedResource()释放权限即可。
- 注意事项:
- 不要在沙盒化Mac Catalyst应用中直接调用
NSSavePanel实现该需求,该方式不符合沙盒权限规则,会无法通过App Store审核 - 无需单独申请外置磁盘的全局访问权限,通过文档选择器获取的用户指定路径权限是完全合规的
- 不要在沙盒化Mac Catalyst应用中直接调用
内容的提问来源于stack exchange,提问作者Kibernetik
相关产品推荐
相关产品推荐

