Objective c 在沙盒Mac应用程序中使用xattr更改文件元数据

Objective c 在沙盒Mac应用程序中使用xattr更改文件元数据,objective-c,macos,metadata,sandbox,xattr,Objective C,Macos,Metadata,Sandbox,Xattr,我正在尝试删除放置在中的文件中的“com.apple.quantial”属性 ~/Library/Containers/…../Library/Application支持 使用NSTask和xattr会在控制台中显示“不允许操作”消息。作为第二个选项,我使用removexattr()尝试了标题xattr.h 我还尝试将LSFileQuarantineEnabled添加到Info.plist。从终端工厂手动调用xattr 似乎沙盒阻止xattr使用Objective-C删除属性。在沙盒应用程序中运

我正在尝试删除放置在中的文件中的“com.apple.quantial”属性

~/Library/Containers/…../Library/Application支持

使用NSTask和xattr会在控制台中显示“不允许操作”消息。作为第二个选项,我使用removexattr()尝试了标题xattr.h

我还尝试将LSFileQuarantineEnabled添加到Info.plist。从终端工厂手动调用xattr


似乎沙盒阻止xattr使用Objective-C删除属性。

在沙盒应用程序中运行助手二进制文件

对于首次测试:

  • 使用“密钥链访问”创建证书
  • “证书助理”>“创建证书…”
  • 说出它的名字
  • 覆盖默认设置
  • 使用为助手二进制文件(更新程序)签名
    codesign-s
  • 将二进制文件复制到项目中
  • 检查它是否链接到“构建阶段”>“复制捆绑资源”中
  • 转到产品>存档
  • 分发
  • 导出为应用程序
  • 使用您的签名身份
  • 如果要将其发送到Mac App Store,请使用正确的证书

    我用于启动/调用助手二进制文件的代码如下:

    NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
    NSTask *testbin = [[NSTask alloc] init];
    NSString * path = [resourcePath stringByAppendingString:@"/testbin"];
    [testbin setLaunchPath:path];
    [testbin launch];
    [testbin waitUntilExit];
    

    无需复制或移动文件;-)

    这是故意的。你到底为什么要这么做?对于您的问题,可能有一个更好的解决方案,
    NSTask
    …@BradAllred我需要在没有用户交互的情况下执行更新二进制文件。在这种情况下,应删除网关守卫标志。这里还有什么其他的解决方案?你的应用程序是否“拥有”这个二进制文件,或者你是否试图篡改不属于你的东西?如果是后者,则没有一种方法可以通过沙箱实现这一点。这就是沙盒的第一点。在构建应用程序时,我会将每个dylib/bin/sh文件复制到应用程序目录中。所有文件都没有元数据。使用代码复制文件时,必须添加“com.apple.quantial”。所有复制的文件都属于我的用户。我试图将它们复制到另一个位置,但没有成功。是的,我知道
    com.apple.quantial
    的由来,但听起来你好像在试图弄乱沙箱外的文件;这违背了沙箱的目的。