You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为File Manager创建的文件夹设置密码?fileSecurity使用方法

回答

fileSecurity 实现不了你要的文件夹独立密码加密需求。

fileSecurity 的实际用途

这个类是用来管理文件系统层面的访问权限的,能配置的只有三类内容:

  • POSIX 标准的读/写/执行权限位
  • 文件/文件夹的所有者、所属用户组
  • ACL 访问控制规则
    它的权限逻辑完全和系统账号绑定:比如你可以设置文件夹只允许当前登录的系统账号访问,其他系统账号登录后打不开,但它不支持给文件夹设置单独的访问密码——只要是有权限的系统账号操作,不会弹出任何密码验证步骤,直接就能访问内容。

fileSecurity 的使用方法

如果你只是需要限制其他系统账号访问文件夹,可以直接修改你现有的创建文件夹代码,把配置好的fileSecurity对象作为属性传入创建接口即可:

func createNewDirectory(addPath: String, myFile: MyFile) {
    guard let mainURL = takeMainDirectoryURL(addPath: addPath, myFile: myFile) else {
        return
    }
    let path = mainURL.path
    
    do {
        let fileSecurity = NSFileSecurity()
        // 0o700 权限代表仅文件夹所有者拥有读、写、遍历权限,其余系统用户无任何访问权
        fileSecurity.posixPermissions = 0o700
        
        try manager.createDirectory(
            atPath: path,
            withIntermediateDirectories: true,
            attributes: [.fileSecurity: fileSecurity]
        )
    } catch let error {
        print("Error Description: \(error.localizedDescription)")
    }
}

如果需要读取现有文件/文件夹的权限配置,在调用resourceValues(forKeys:)时传入.fileSecurityKey就能拿到对应的NSFileSecurity实例。

文件夹密码保护的可行实现方案

Apple 全平台没有提供给普通文件夹加独立密码的原生API,要实现输入密码才能访问的效果,目前可行的方案有两种:

  • 加密磁盘镜像方案:创建AES加密的稀疏磁盘镜像,把需要保护的内容全部放在镜像内,挂载镜像时系统会自动要求输入密码。可以通过DiskArbitration框架或者调用系统内置的hdiutil命令行工具完成镜像的创建、挂载、卸载操作,不需要自己实现加密逻辑。
  • 内容级加密方案:自己实现对称加解密逻辑,写入文件时用用户输入的密码派生AES密钥加密文件内容,读取时要求用户输入密码解密后再加载。这种方案灵活度最高,但需要自己处理文件遍历、加解密、密钥管理的全流程逻辑。

额外提一句:你当前代码里用isHidden属性标记锁定状态的方式没有实际防护能力,用户只要在访达里开启显示隐藏文件就能直接看到所有内容,完全挡不住访问。


内容的提问来源于stack exchange,提问作者Ufuk Köşker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 23:42:19