一个简单的类,用于封装在Mac应用沙盒之外写入文件和访问文件的代码。该类将通过与Apple文档一致、易于理解的对话框请求用户的权限,并使用安全书签在应用程序运行之间持久权限。
当您需要写入文件或获取对应用程序已无法访问的目录的访问权限时,这非常有用。例如,如果您的应用程序中引入了AwesomeRecipe.txt文件,希望生成AwesomeRecipe.txt.gz,没有从用户那里获得权限,这是不可能的。(注意:您可以直接写入AwesomeRecipe.gz,无需此类。)
在使用此类时,如果用户需要给出访问文件夹的权限,则使用NSOpenPanel来请求权限。在NSOpenPanel中只能选择需要权限的路径或文件,或者父路径。面板文本、标题和按钮可自定义。
http://minifyapp.com – Minify使用此代码将合并、精简和压缩的文件写入与原始文件相同的目录。例如,styles.css精简为styles.min.css,然后压缩为styles.min.css.gz。
将源.h和.m文件包含到您的项目中。如果您想要同步最新的更新,请将此项目作为子模块添加到您的应用程序中,然后将.h和.m文件包含到您的项目中。
在Xcode中,单击您的项目文件,然后选择“功能”选项卡。开启应用程序沙盒,并将“用户选择的文件”更改为“读/写”或“只读”,视需要而定。在您的项目中,Xcode将创建一个.entitlements文件。打开它,您应该会看到以下内容。如果计划持久化权限,则需要添加第三个许可。
在您的应用程序中,每当您需要读取或写入文件时,请像以下示例那样包装访问文件的代码。以下示例将获取权限以访问应用程序已知的文件的父目录。
#import "AppSandboxFileAccess.h"
...
// initialise the file access class
AppSandboxFileAccess *fileAccess = [AppSandboxFileAccess fileAccess];
// the application was provided this file when the user dragged this file on to the app
NSString *file = @"/Users/Wookie/AwesomeRecipe.txt";
// persist permission to access the file the user introduced to the app, so we can always
// access it and then the AppSandboxFileAccess class won't prompt for it if you wrap access to it
[fileAccess persistPermissionPath:file];
// get the parent directory for the file
NSString *parentDirectory = [file stringByDeletingLastPathComponent];
// get access to the parent directory
BOOL accessAllowed = [fileAccess accessFilePath:parentDirectory withBlock:^{
// write or read files in that directory
// e.g. write AwesomeRecipe.txt.gz to the same directory as the txt file
} persistPermission:YES];
if (!accessAllowed) {
NSLog(@"Sad Wookie");
}
版权所有(c)2013,Leigh McCulloch。保留所有权利。
BSD-2-Clause许可证:https://open-source.org.cn/licenses/BSD-2-Clause
在以下条件下,允许在原始和二进制形式下重新分配和使用,无论是否修改:
源代码的重新分发必须保留上述版权声明、本条款列表和以下免责声明。
二进制形式的重新分发必须在随分发提供的文档和其他材料中重新生产上述版权声明、本条款列表和以下免责声明。
本软件由版权所有者和贡献者提供,"原样"并提供,任何明示或暗示的保证,包括但不限于适销性和特定用途适用性保证均予以否认。在任何事件中,版权所有者或贡献者不对因使用本软件而直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代货物或服务的获取;使用、数据或利润的损失;或业务中断)承担责任,无论该损害是由何种原因引起,无论基于何种责任理论,无论是在合同、严格责任或侵权(包括疏忽或不作为)中产生,即使被告知此类损害的可能性也是如此。