OS X 应用程序沙箱和任意文件访问 - 更新为基于文档?

2024-01-30

我的 OS X 应用程序(当前未沙箱)访问用户设置的目录中包含的文件(选择带有NSOpenPanel并且在整个执行过程中都会保留对该路径的引用)。文件列表是通过生成的NSDirectoryEnumerator然后我使用读取和写入这些文件AVAsset and taglib(在带有桥接头的 C++ 中)分别。

正如预期的那样,在 Xcode 中启用沙盒会使应用程序变得无用,文件列表由NSDirectoryEnumerator是空的,即使不是,我也无法读取和写入文件。我需要采取哪些步骤才能使我的应用程序符合沙箱要求?

我的应用程序需要基于文档吗?我的应用程序真的可以“基于文档”吗,因为我实际上没有适当的文档(例如:每个文件没有一个窗口,它似乎不符合标准的基于文档的应用程序模型)?我的应用程序基本上只是一个表视图,其中文件引用作为行。 另一个重要点:如果我的应用程序是基于文档的,我仍然可以使用 taglib 写入我的文件吗?我需要将 taglib 作为字符串指针传递到我的文件的路径才能使其工作。

非常感谢,这个话题目前很混乱。


您不必将应用程序转换为基于文档即可访问用户选择的文件和安全范围的书签。

我可以想到您当前的代码无法在沙盒环境中运行的两个原因:

  • 您没有“用户选择的文件访问”功能集(Xcode > 目标 > 功能 > 应用程序沙箱 > 文件访问)
  • 您正在使用基于路径/NSString 的目录枚举器 API,而不是基于 URL NSURL 的 API。

启用沙箱并设置用户选择文件功能的普通 Xcode 项目应枚举通过以下方式获得的任何路径NSOpenPanel:

NSOpenPanel* panel =[NSOpenPanel openPanel];
panel.canChooseDirectories = YES;
[panel beginSheetModalForWindow:self.view.window completionHandler:^(NSInteger result) {
    NSFileManager *fileManager = [[NSFileManager alloc] init];
    NSURL *directoryURL = panel.URL;
    NSDirectoryEnumerator *enumerator = [fileManager
                                         enumeratorAtURL:directoryURL
                                         includingPropertiesForKeys:nil
                                         options:0
                                         errorHandler:nil];
    for (NSURL *url in enumerator) { 
        NSLog(@"url:%@", url);
    }
}];

如果您希望存储在应用程序启动/退出周期中从沙箱访问特定文件夹的能力,则需要存储安全范围的书签。 这篇文章包含通过应用程序范围书签保留用户选择的文件/目录访问的信息:创建安全范围书签时遇到问题 https://stackoverflow.com/q/10043345/100848

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OS X 应用程序沙箱和任意文件访问 - 更新为基于文档? 的相关文章

  • 在 MacOS 上重新启动终端而不关闭

    如何在不关闭窗口的情况下重新启动当前的 MacOS 终端会话 在Linux中我使用exec bash但在这种环境下它不起作用 我对 bash profile 提示 别名等 我想在不关闭它并再次打开的情况下查看 只需输入命令 exec bas
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • 是否可以使用“pandoc”将 .tex 文件编译为 PDF?

    是否可以使用 pandoc 编译 tex 文件 我目前正在使用 MacVim 在 MultiMarkdown 中记课堂笔记 这样 当我回到家时 我就可以mmd2tex并使用 TexShop 将 tex 文件编译为 PDF 它效果很好 但这个
  • CGContextDrawImage 绘制非常模糊的大图像

    我正在尝试制作一个可以使用 CGContextDrawImage 绘制大图像 例如 2048 x 1537 图像的一部分的对象 它工作得很好 只是它非常模糊 我正在使用一个 drawingController 它覆盖了drawLayer i
  • webview渲染完成后如何截图

    我想在 webview 渲染完成时截图 以下是我的代码 void webView WebView sender didFinishLoadForFrame WebFrame frame if frame sender mainFrame r
  • 使用 xcassets 中的 imageNamed 加载 NSImage 在旧版 osx 版本中崩溃

    所以 我有一个在很多应用程序之间共享的 xcassets 我正在 Mac Mini 中使用 Xcode8 进行开发 其中安装了 MacOs Sierra 如果我在开发机上编译运行 就没有任何问题 然而 当我尝试在装有 OSX Maveric
  • Objective-C 继承中@synthesize/@property 的使用

    如果您有一个带有实例变量 foo 的类 A 该类具有 property synthesize 指令 并且类 B 继承自类 A 那么它是否还需要 property synthesize foo 我问的原因是因为当我尝试使用 B 类的 foo
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • Apache PHP/OSX Mavericks: - 无法打开流:打开的文件太多

    我最近升级到 OSX Mavericks 从那时起 我开始在我的开发计算机上收到上述错误 代码中没有明显的问题 它是自动生成的Yii http www yiiframework com 示例应用程序 Mavericks 升级过程中发生的事情
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • 释放 Core Foundation 对象引用

    我是否需要释放 Core Foundation 对象来清理内存 如果是这样 怎么办 例如 在代码中 ABAddressBookRef addressBook ABAddressBookCreate CFArrayRef peopleArra
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 如何在 NSTextView 中使用 SPACE 而不是 TAB

    我只知道如何修改 NSTextView 中的制表符宽度 NSMutableParagraphStyle paragraphStyle self defaultParagraphStyle mutableCopy paragraphStyle
  • Xcode 9:“clang:错误:生成多个输出文件时无法指定 -o”

    我刚刚将 Xcode 更新到版本 9 并且在编译时开始收到以下错误消息 该问题似乎与将 优化级别 参数设置为 无 即 O0 进行编译有关 如果我将其设置得更高 错误就会消失 但是当我增加优化时 调试工具将无法正常工作 例如变量跟踪 我查看了
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 核心数据 iCloud 同步中的关系完整性和验证

    考虑以下简单的实体模型 实体 A 与实体 B 具有一对一关系 称为b 实体 B 具有逆对一关系 称为a 这两种关系都不是可选的 A B b lt gt a 假设我们有两个设备 1 和 2 开始完全同步 每个对象都有一个 A 类对象和一个 B
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移

随机推荐

  • C++ 命令行字符串像 Java 一样吗?

    有没有办法像 Java 一样从命令行获取 C 字符串 public static void main String args 其中 args 是 C 字符串数组 不完全是 但你可以很容易地接近 include
  • 如何保证正确捕获并重新触发表单提交事件?

    这可能不是您常见的 如何捕获表单提交事件 问题 我试图理解恰恰jQuery vanilla Javascript 和浏览器 IE FF Chrome Safari Opera 如何处理表单提交事件 以及它们之间的关系 请参阅我的另一个问题
  • unix中nice和setpriority的区别

    我正在尝试用 C 语言实现 unix 的 nice 命令的不同风格 我已经看到了 Nice 系统调用和 setpriority 调用的定义 Nice 调用仅增加 减少进程的优先级 如果我想将进程的优先级设置为特定值 我不能使用nice 调用
  • connect/expressjs 中的“签名”cookie 是什么?

    我试图弄清楚 签名cookie 到底是什么 网上没有太多 如果我尝试这个 app use express cookieParser A secret 但仍然 Cookies在浏览器上仍然是100 正常的 而且我真的不知道这里的 签名 是什么
  • 如何使用 ZF3 设置延迟加载(任何地方都没有 ServiceLocator 模式)

    我正在编写一个新的 ZF2 应用程序 我注意到 从任何地方 调用服务的 ServiceLocator 使用模式已从 ZF3 中弃用 我想为ZF3编写代码 我能够设置我的控制器在构造函数时调用所有依赖项 但这意味着加载 即Doctrine在我
  • body-parser - 扩展选项(qs 与查询字符串)

    在当前版本中正文解析器 https github com expressjs body parser the extended使用时的选项bodyParser urlencoded 现在需要 在自述文件中 它解释了 扩展选项允许选择使用 q
  • filter_var 和验证整数值

    我正在尝试验证我的变量是否是 32 位有符号整数 我以为我可以用filter var and FILTER VALIDATE INT但显然 PHP 对 int 的定义完全不同 999999999999999999通过没有问题 看着PHP d
  • 内联汇编标签已定义错误[重复]

    这个问题在这里已经有答案了 我正在尝试编写我的第一个内联 asm 程序 它是一个素数函数 我收到这些错误 prime c 30 Error symbol loop top is already defined prime c 38 Erro
  • 从 GraphQL 响应中清除不需要的字段

    我有一个 GraphQL 客户端请求的对象 这是一个相当简单的对象 type Element content ElementContent elementId String name String notes String type Str
  • 导入 db phpMyAdmin - 错误格式参数不正确

    我正在尝试将生产 mysql 数据库导入本地 xampp 测试环境 通过连接到Web管理 mozff 并简单导出sql 不需要其他任何东西 然后转到本地phpmyadmin仪表板并导入 它抛出以下错误 Error 居住环境 数据库服务器 S
  • JScrollPane 滚动到最后添加的行

    我有 JTextArea 文本和 JScrollPane pane new JScrollPane text 我放置pane setAutoScrolls true 当我将一些文本附加到窗格在末尾 最后一行 滚动的组件文本时 如何获得该结果
  • 在 C# 中将 int[] 转换为 byte[]

    我知道如何长期执行此操作 通过创建所需大小的字节数组并使用 for 循环来转换 int 数组中的每个元素 我想知道是否有更快的方法 因为如果上面的方法似乎会崩溃int比一个大sbyte 如果你想要按位复制 即从一个 int 中获取 4 个字
  • 更新嵌套对象时 UseState 不重新渲染

    我通过将数据推送到旧状态对象并将其作为值返回来更新 useEffect 这段代码实际上改变了 useState 中的 series 变量 但没有重新渲染 为什么 import TimeSeries Pipeline Stream Event
  • 如何将windows上的代码文件与WSL/linux同步?

    基本上我有一些 C C 代码需要在 Linux 机器上构建和调试 不幸的是 我的 Windows 笔记本电脑没有足够的可用硬盘空间来安装某些 Linux 发行版 也没有足够的可用 RAM 来舒适地运行 VM 到目前为止 我使用 WSL 处理
  • 存储来自 Google JavaScript API 请求的响应

    在使用 Google 尝试 Google 的 Javascript API 时 我遇到了一个障碍 var response var request gapi client request path plus v1 people THEUSE
  • 如何将图像从客户端发送到服务器节点 js 反应

    我正在尝试创建上传个人资料图像方法 帮助用户在网站上上传他们的个人资料图片 但我遇到了问题 我不知道如何将图像从客户端发送到服务器并使这些图像存储在 cloudinary 或 firebase 上 我的路线如下所示 ProfileAPI j
  • 在 Cocoa Objective-C 中创建模态对话框或窗口?

    我需要创建一个模式对话框 该对话框从 nib 文件加载 并应在主窗口中单击按钮时显示 我可以在 nib 文件中创建自定义窗口 并在单击按钮时加载自定义对话框 但这不是模式对话框 我可以切换回主窗口 MyWindowController is
  • “.tt”扩展名是什么?

    我和一群人一起工作something js tt使用 Knockout 和一堆的 JavaScript 文件something else ttHTML 文件 基础设施主要是带有 Perl 服务 API 的 C 后端 我们使用这些 tt文件来
  • 优化配分函数

    这是Python中的代码 function for pentagonal numbers def pent n return int 0 5 n 3 n 1 function for generalized pentagonal numbe
  • OS X 应用程序沙箱和任意文件访问 - 更新为基于文档?

    我的 OS X 应用程序 当前未沙箱 访问用户设置的目录中包含的文件 选择带有NSOpenPanel并且在整个执行过程中都会保留对该路径的引用 文件列表是通过生成的NSDirectoryEnumerator然后我使用读取和写入这些文件AVA