macos - Mac 应用商店应用程序可以访问本地文件系统吗?

标签 macos osx-lion

我想知道 Mac 应用商店有哪些限制。有人可以指出我正确的方向吗?例如,假设我想编写一个对 Mac 文件系统上的文件进行增量自动备份的应用程序,这可以通过 Mac 应用程序商店中的应用程序实现,还是我唯一的选择是独立的 Mac 应用程序?

在 iPhone 上,应用程序是自包含在自己的“沙盒”中的吗?这同样的原则是否适用于 mac app store 应用程序?

最佳答案

伙计们,这里描述了OP真正指的是什么:

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html

一切都是为了

  • 容器
  • 权利
  • PowerBox(守护进程)

  • 一旦应用程序被“沙盒化”,它的~“home”目录 View 就是一个容器的 View (它恰好是在第一次启动时在 $HOME/Library/Containers/appBundleID/Data 中创建的)。它在其中找到配置、缓存和数据文件的“私有(private)副本”。当然,它不能读取任何其他内容,除非...

    ...您以协同设计的属性文件的形式为应用程序提供适当的权利(实际上,协同设计是沙盒概念的组成部分)。

    其中一项权利是“ com.apple.security.files.user-selected.read-write ”,其中 允许应用程序准确地读取和写入用户通过标准保存和打开对话框分别明确选择的那些文件 .

    PowerBox (pboxd) 守护程序随后在其自己的进程空间中呈现适当的文件对话框,并将选定的文件路径添加到允许的文件列表中。这对应用程序是透明的,即不需要更改代码——只要应用程序使用标准的 NSOpenPanel 或 NSSavePanel 对话框。

    “为了促进应用程序沙箱化,Mac OS X v10.7 提供了一个受信任的系统守护程序,其任务是代表在应用程序沙箱中运行的应用程序呈现打开和保存面板。该守护程序称为 Powerbox(它的进程名称是 pboxd)。这些就用户体验而言,Powerbox 提供的远程面板与进程内面板完全没有区别。

    每当在沙箱中运行的应用程序调用 NSOpenPanel 或 NSSavePanel 对话框,而不是直接显示面板时,AppKit 会自动要求 Powerbox 显示对话框。从开发人员的角度来看,这些面板的使用方式不需要更改代码;这个过程是完全透明的。” [结束引用来自 Apple 文档]

    鉴于这一切, OP 需要(用于备份解决方案)是“无中介读/写” :

    “如果应用程序选择以绕过 Cocoa API 的方式派生用户的主目录(例如,通过直接调用 getpwent),则应用程序沙箱会禁止它写入它接收到的路径(除非应用程序具有无中介的写入权限,出于明显的安全原因,强烈建议不要这样做。” [来自 Apple 文档的引用结束]

    但是,我可以提供“免费访问文件系统”的最接近的权利是:

    "
  • 绝对文件只读 — 读取指定绝对路径的文件或目录的能力。 ( com.apple.security.temporary-exception.files.absolute-path.read-only )
  • 绝对文件读/写 — 在指定的绝对路径读取或写入文件或目录的能力。 ( com.apple.security.temporary-exception.files.absolute-path.read-write )

  • "[来自 Apple 文档的结尾引用]

    而且我不确定应用程序是否可以简单地提供根目录“/”

    无论如何,请注意,这些权利被标记为“临时”:Apple 可能会在合适的情况下删除/弃用这些权利 !

    关于macos - Mac 应用商店应用程序可以访问本地文件系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193603/

    相关文章:

    ruby - gem install pg 不适用于 OSX Lion

    在多个操作系统上运行脚本的 Java 注意事项

    java - 如何在 El Capitan (OS X 10.11) 上设置需要旧版 java 的应用程序?

    java - 在 OS X Lion 上安装 Java EE 6

    Ruby 使用 rbenv 在 OSX Lion 上失败

    ruby - 如何在 Mac OS X Lion 上使用 rvm 安装 Maglev?

    Xcode 4.4-发生内部API错误

    c++ - Xcode 和 C++ [初学者] - 为什么 Hello World 程序打印所有这些额外的东西?

    swift - 使用 Swift 的双显示器全屏

    python - pip install uwsgi 失败/usr/local/include/string/string.h :7:10: fatal error: 'sstream' file not found?