使用OS X沙箱写入多个文件

约什

我正在编写一个OS X沙盒应用程序。它接收@ 3x和@ 2x图像文件,并将它们转换为较低分辨率的图像。我通过将文件拖入应用程序窗口或使用NSOpenPanel选择目录来获取图像URL。

拖动图像或选择文件夹后,我会运行for循环并使用此方法调整每个图像的大小

-(BOOL)writeImage:(NSImage*)image toFile:(NSString*)file withRepresentation:(NSString*)extension{

CGImageRef cgRef = [image CGImageForProposedRect:NULL
                                         context:nil
                                           hints:nil];
NSBitmapImageRep *newRep = [[NSBitmapImageRep alloc] initWithCGImage:cgRef];
[newRep setSize:[image size]];
NSData *pngData = [newRep representationUsingType:[self getRepresentationType:extension] properties:nil];
return [pngData writeToFile:[file stringByAppendingString:[NSString stringWithFormat:@".%@",extension]] atomically:YES];

这破坏了沙箱模型。我已经读过我应该使用NSSavePanel,但是这将要求我为每个保存的图像指定最终的文件路径/文件名,这会破坏用户体验。

有什么方法可以让沙盒应用程序权限写入特定目录,而不是请求写入每个文件的权限?

CRD

是的,您可以轻松地请求允许写入特定目录的权限。

您已经知道如何使用NSOpenPanel以允许用户选择目录-“或使用NSOpenPanel选择的目录”。当用户这样做时,您将获得目录的读/写权限,因此您可以读取文件名@ 3x.ext并写入一个名为[email protected]的文件,依此类推

现在,除了可以NSOpenPanel用来选择目录之外,您还可以:

  1. 指定委托方法以确定应启用哪些项目供用户选择,以及确定用户选择的项目是否可接受;

  2. 设置NSOpenPanel打开对话框时首先显示的目录

  3. NSOpenPanel对话框中设置提示消息和按钮标签

结合使用这些功能,您可以显示一个对话框,要求用户确认对特定目录的访问:

  1. 将提示设置为“请确认对目录的访问”之类的内容;

  2. 将“打开”按钮上的标签设置为“确认”之类的内容;

  3. 将初始目录设置为您要查找的目录的目录;

  4. 使用委托方法仅允许用户选择要取消的目录。

捆绑在一起,例如MyConfirmDirectoryPanel

现在,当用户为您提供文件时:

  1. 确定该文件的目录

  2. 使用access()系统调用检查您是否对该目录具有写权限-请参见“ Unix”手册的第2节(只需access在Xcode的文档中进行搜索即可)。如果您具有写访问权,请转到(4)。

  3. 如果您没有访问权限,请使用MyConfirmDirectoryPanel来让用户选择目录,从而授予您访问权限。

  4. 现在,您对该目录具有写许可权,继续创建缩放的图像文件。

您以这种方式获得的访问权限将持续到应用程序的其余执行过程。因此,例如,如果您的用户随后在同一目录中选择了另一个文件,则无需再次请求权限。如果要保留应用程序执行之间的访问权限,也可以执行此操作。您可以使用安全范围的书签来查看此文件,并查找那些文件。使用该机制,您可以创建一个保存的书签的缓存-将其保存为用户默认设置-您可以根据需要激活该书签,以重新获得对该用户先前授予您的目录的访问权限。如果您随时间推移执行此操作,则必须显式地向用户询问权限的次数将会减少,并且您的用户将获得他们期望的UI体验-在同一目录中拖动文件,调整大小并在其旁边创建镜像。

高温超导

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用多个线程写入文件

来自分类Dev

OS X App沙箱和任意文件访问-更新为基于文档的吗?

来自分类Dev

如何使用NLog写入多个“数据”文件

来自分类Dev

使用多个进程在Python中写入文件

来自分类Dev

使用echo从多个进程并行写入文件

来自分类Dev

使用swift或obj-c在Cocoa App OS X中读取和写入文件标签

来自分类Dev

OS X应用程序的沙箱路径

来自分类Dev

OS X应用程序的沙箱路径

来自分类Dev

当有多个线程写入文件时,使用BufferReader读取文件

来自分类Dev

使用python写入文件夹中的多个文件

来自分类Dev

(OS X)确定是否正在写入文件?

来自分类Dev

使用输入文件OS X进行调试

来自分类Dev

可以使用plpgsql读取/写入/删除OS文件吗?

来自分类Dev

在C ++中使用多个ofstreams写入单个输出文件

来自分类Dev

使用Python将多个功能写入单个日志文件

来自分类Dev

使用R将多个数据帧写入.csv文件

来自分类Dev

使用ByteScout Spreadsheet在Excel文件中写入多个工作表

来自分类Dev

在沙箱中使用的最小的阴谋文件

来自分类Dev

从OS X使用DualShock 4

来自分类Dev

OS X沙箱:xattr和元数据之间的区别

来自分类Dev

OS X沙箱:xattr和元数据之间的区别

来自分类Dev

使用RE和OS重命名多个视频文件

来自分类Dev

如何使用os.chmod更改多个文件的权限

来自分类Dev

从多个文件读取并使用多线程将它们写入文件文件序列

来自分类Dev

iOS限制在沙箱中写入文件

来自分类Dev

Mac OS X从多个文件中删除行

来自分类Dev

使用OS X Sublime Text编辑Docker容器文件

来自分类Dev

如何在OS X上使用mdtool构建.sln文件

来自分类Dev

使用“ mv”或“ ditto”合并OS X中的文件夹

Related 相关文章

热门标签

归档