【问题标题】:NSFileManager 'copyItemAtPath:' creates quarantined file copiesNSFileManager 'copyItemAtPath:' 创建隔离文件副本
【发布时间】:2015-09-17 23:44:02
【问题描述】:

我有一个沙盒 OS X 应用程序,我将文件从应用程序的 /Contents/Resources/ 文件夹复制到 NSHomeDirectory()。除了复制的文件被标记为隔离之外,一切都很好。在终端中运行 xattr -l 会得到以下输出:

$ xattr -l myfile
com.apple.quarantine: 0006;00000000;

如何在不将文件标记为隔离或最坏情况的情况下复制文件,如何以编程方式删除此属性?

【问题讨论】:

    标签: macos cocoa nsfilemanager


    【解决方案1】:

    OS X 自动为sandboxed apps 隔离某些文件(可执行文件、shell 脚本、Web 存档等)。您可以手动添加一个 entitlement 以防止这种情况发生:

    com.apple.security.files.user-selected.executable
    

    注意:此权利没有 Xcode 复选框,因此必须 手动添加到您应用的权利属性列表中

    App Sandbox Entitlement Keys

    【讨论】:

    • 所以我在添加授权后测试的第一个文件副本没有被隔离,但现在所有后续文件副本都被再次隔离!知道这里发生了什么吗?
    • @Tarek,您要复制什么类型的文件等?这可能只是更改权利以匹配文件的问题。此外,在系统偏好设置 > 安全和隐私中选择了哪个网守设置。
    • 我正在复制应用程序 (.app) 文件。 Gatekeeper 设置为“Mac App Store 和已识别的开发者”。
    • 嗯...所以您实际上是将另一个应用程序包 (.app) 从沙箱复制到用户主目录中?我不确定这是否适用于标准权利。可以将其放入存档中,然后复制并提取它,尽管您可能会在取消存档后遇到相同的问题。如果 .app 与复制它的应用程序具有相同的代码签名签名,我不确定它是否仍然获得与之关联的隔离标志。
    • 非常感谢,我会试试存档选项。有没有可用的解档 API? (搜索但找不到)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多