SwiftySandboxFileAccess

这是原始版本 AppSandboxFileAccess 的 Swift 版本,具有更简洁、更 Swifty 的 API 和一些额外的功能。

版本 3.0 已发布

版本 3.0 已通过 SPM 提供。它具有更简洁的 API,并与 powerbox 集成。 这使其可以使用“我是否有权访问此文件”,而不是“我是否拥有书签来授予我对此文件的访问权限?”。

详情

一个简单的类,封装了在 Mac 应用程序的 App Sandbox 文件之外写入和访问文件的操作。该类将向用户请求权限,并显示一个简单易懂的对话框,该对话框与 Apple 的文档一致,并使用安全书签在应用程序运行之间持久保存权限。

当您需要写入文件或获取对应用程序尚未访问的目录的访问权限时,这尤其有用。

当使用此类时,如果用户需要授予访问文件夹的权限,则会使用 NSOpenPanel 请求权限。在 NSOpenPanel 中,只能选择需要权限的路径或文件,或父路径。面板文本、标题和按钮是可自定义的。

如何使用

SwiftPackageManager

标准流程!

CocoaPods(已弃用 - 停留在 v 2!)

Entitlements(授权)

在 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。保留所有权利。

请参阅随附的许可证文件