Objective c 在沙盒Mac应用程序中使用xattr更改文件元数据
我正在尝试删除放置在中的文件中的“com.apple.quantial”属性 ~/Library/Containers/…../Library/Application支持 使用NSTask和xattr会在控制台中显示“不允许操作”消息。作为第二个选项,我使用removexattr()尝试了标题xattr.h 我还尝试将LSFileQuarantineEnabled添加到Info.plist。从终端工厂手动调用xattrObjective 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删除属性。在沙盒应用程序中运
似乎沙盒阻止xattr使用Objective-C删除属性。在沙盒应用程序中运行助手二进制文件 对于首次测试:
codesign-s
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
的由来,但听起来你好像在试图弄乱沙箱外的文件;这违背了沙箱的目的。