iOS对应Android/data的应用专属文件存储目录是什么?如何使用?
iOS对应Android应用专属目录的实现方案
1. 对等路径说明
iOS的应用沙盒机制完全匹配你要的Android应用专属目录特性:所有沙盒内的文件都会在应用卸载时被系统自动删除,不存在外部应用随意访问的情况。和Android/data/com.package.name/对等的常用沙盒目录有三个,可根据你的存储需求选择:
Documents/:适合存储用户主动生成、需要长期留存的文件,默认会纳入iCloud备份(用户开启iCloud备份的前提下)Library/Application Support/:适合存储应用运行所需的非用户生成类文件,例如下载的资源包、配置文件等,默认也会被iCloud备份,不需要备份的话可以手动添加不备份标记tmp/:临时文件存储目录,系统会在应用未运行时不定期清理该目录,适合存放短期使用的临时资源
2. 具体操作代码(Swift)
获取目录路径
获取Documents目录:let docPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
获取Application Support目录(注意该目录默认不存在,首次使用需要手动创建):
guard let supportPath = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).first else { return } if !FileManager.default.fileExists(atPath: supportPath) { try? FileManager.default.createDirectory(atPath: supportPath, withIntermediateDirectories: true) }
写入文件示例
以把下载的Data写入Documents下的file1为例:
guard let docPath = docPath else { return } let targetPath = (docPath as NSString).appendingPathComponent("file1") try? downloadData.write(to: URL(fileURLWithPath: targetPath))
3. 用户访问权限说明
默认状态下普通用户完全无法直接访问应用沙盒内的任意文件,只有两种例外情况:
- 你主动在Info.plist中开启了
UIFileSharingEnabled(iTunes文件共享)开关,开启后用户可以在PC端的iTunes/访达中查看、增删改Documents目录下的所有文件 - 设备已经越狱,越狱后可以绕过沙盒限制访问所有应用的目录
4. 加密建议
如果存储的是普通的公开资源(比如图片缓存、静态配置),不需要额外加密;如果存储的是敏感数据(比如用户隐私信息、付费专属内容),可以直接使用iOS系统自带的硬件级文件加密,不需要自己实现复杂加密逻辑,只需给对应文件设置保护属性即可:
try? targetURL.setResourceValue(URLFileProtection.completeUntilFirstUserAuthentication, forKey: .fileProtectionKey)
内容的提问来源于stack exchange,提问作者user13674724
相关产品推荐
相关产品推荐

