这是原始版本 AppSandboxFileAccess 的 Swift 版本,具有更简洁、更 Swifty 的 API 和一些额外的功能。
版本 3.0 已通过 SPM 提供。它具有更简洁的 API,并与 powerbox 集成。 这使其可以使用“我是否有权访问此文件”,而不是“我是否拥有书签来授予我对此文件的访问权限?”。
一个简单的类,封装了在 Mac 应用程序的 App Sandbox 文件之外写入和访问文件的操作。该类将向用户请求权限,并显示一个简单易懂的对话框,该对话框与 Apple 的文档一致,并使用安全书签在应用程序运行之间持久保存权限。
当您需要写入文件或获取对应用程序尚未访问的目录的访问权限时,这尤其有用。
当使用此类时,如果用户需要授予访问文件夹的权限,则会使用 NSOpenPanel 请求权限。在 NSOpenPanel 中,只能选择需要权限的路径或文件,或父路径。面板文本、标题和按钮是可自定义的。
标准流程!
在 Xcode 中,单击您的项目文件,然后单击 Capabilities(功能)选项卡。 启用 App Sandbox,并将“User Selected File”(用户选择的文件)更改为“Read/Write”(读/写)或“Read Only”(只读),根据您的需要选择。 在您的项目中,Xcode 将创建一个 .entitlements 文件。 打开此文件,您应该看到以下内容。 如果您计划持久保存权限,则需要添加第三个授权。
版本 3.0 大大简化了 API
使用 SandboxFileAccess().someFunction
persistPermission(url:) -> Data?
保存应用程序以其他方式收到的权限(拖放到 Dock、文件打开等)
access(fileURL: URL,
acceptablePermission:Permissions = .bookmark,
askIfNecessary:Bool,
fromWindow:NSWindow? = nil,
persistPermission persist: Bool = true,
with block: @escaping SandboxFileAccessBlock)
使用此代码块异步访问您的文件。
如果满足任何可接受的权限,则将使用 .success
结果调用该代码块
acceptablePermission 默认情况下是 .bookmark,这意味着即使 powerbox 已经授予对文件的访问权限,您也只有在存储了书签的情况下才会获得 .success
如果您只关心现在的访问权限,则可以使用 .anyReadOnly
或 .anyReadWrite
注意:代码块中的访问信息显示了实际使用获取访问权限的书签的 URL。 这可能是您需要使用的 URL 的父级。
canAccess(fileURL:URL, acceptablePermission:Permissions = .anyReadWrite) -> Bool
返回我们当前是否可以使用所需的权限访问 fileURL
accessInfo(forFileURL fileURL:URL) -> AccessInfo
synchronouslyAccess(fileURL: URL,
acceptablePermission:Permissions = .bookmark,
with block: SandboxFileAccessBlock) -> SandboxResult
版权所有 (c) 2013, Leigh McCulloch 和 Rob Jonson。保留所有权利。
请参阅随附的许可证文件