使用xattr设置Mac OSX隔离属性

在StackOverflow和其他地方,有很多有关如何清除Mac隔离属性的信息。就我而言,我想进行设置。这是为了测试我的应用程序是否已正确签名,以便用户在下载应用程序后会获得“不受信任的开发人员”警告。

我的应用程序特别大(我们通过大文件下载站点而不是商店进行分发),必须上传和下载进行测试并不方便。在过去的一周中,我与代码签名进行了一些斗争,因此此测试对我来说很重要。

文件具有隔离属性后,我将看到如何更改它以使其具有值:

0002 = downloaded but never opened (this is the one that causes the warning)
0022 = app aborted by user from the warning dialogue (you hit 'cancel' in the dialogue)
0062 = app opened (at least) once (you hit 'open' in the dialogue)

但是我不知道如何首先赋予它财产。

罗布·纳皮尔

用于此的代码并不难,但是您需要FSRef来做到这一点,但不推荐使用。也就是说,它仍然适用于10.9。您必须与CoreServices链接。

int main(int argc, const char * argv[]) {
  @autoreleasepool {
    if (argc != 2) {
      printf("quarantine <path>\n");
      exit(1);
    }

    NSString *path = @(argv[1]);
    OSStatus result;
    FSRef pathRef;
    result = FSPathMakeRef((UInt8*)[path UTF8String], &pathRef, 0);
    if (result != noErr) {
      NSLog(@"Error making ref (%d): %s", result, GetMacOSStatusCommentString(result));
      exit(result);
    }

    NSDictionary *quarantineProperties = @{(__bridge id)kLSQuarantineTypeKey: (__bridge id)kLSQuarantineTypeOtherDownload};

    result = LSSetItemAttribute(&pathRef,
                                kLSRolesAll,
                                kLSItemQuarantineProperties,
                                (__bridge CFTypeRef)quarantineProperties);

    if (result != noErr) {
      NSLog(@"Error setting attribute (%d): %s", result, GetMacOSStatusCommentString(result));
    }
    exit(result);
  }
  return 0;
}

另一种方法是将隔离信息从一个文件复制到另一个文件。您可以像这样序列化xattr信息:

xattr -p com.apple.quarantine file > file.xattr

然后,您可以将这些属性应用于另一个文件,如下所示:

xattr -w com.apple.quarantine "`cat file.xattr`" file

(这应该起作用,但是我没有特别进行隔离测试。我使用类似的技术来保存代码签名并重新应用它们。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用EF6,如何全局设置连接属性(例如事务隔离级别)?

来自分类Dev

为Bitbucket帐户设置SSH密钥(使用Mac OSX)

来自分类Dev

为Bitbucket帐户设置SSH密钥(使用Mac OSX)

来自分类Dev

使用一个指令从另一个隔离的范围复制范围属性

来自分类Dev

无法在Mac OSX上设置Lucene

来自分类Dev

OSX / Mac中的加载项永久设置

来自分类Dev

OSX / Mac中的加载项永久设置

来自分类Dev

如何使用Python设置SQLite隔离级别

来自分类Dev

如何使用DBUnit设置事务隔离级别

来自分类Dev

Mac OSX:使用dtruss吗?

来自分类Dev

我是否必须使用$ watch将隔离范围属性动态传递给我的自定义控制器?

来自分类Dev

从指令隔离范围的访问属性

来自分类Dev

从指令测试隔离范围的属性

来自分类Dev

隔离范围属性的AngularJS文档

来自分类Dev

隔离范围属性的AngularJS文档

来自分类Dev

从指令隔离范围的访问属性

来自分类Dev

xCode 剥离扩展属性失败 / xattr

来自分类Dev

使用JavaScript设置属性

来自分类Dev

使用反射设置属性的属性

来自分类Dev

持续设置PostgreSQL事务隔离

来自分类Dev

在Mac OSX上设置System V消息队列大小

来自分类Dev

安装程序如何在Mac OSX上设置PATH变量?

来自分类Dev

无法在Mac OsX上设置环境变量

来自分类Dev

在MAMP Pro安装(Mac OSX)上设置BlackFire.io

来自分类Dev

将文件添加到 Apache 设置 (Mac OSX)

来自分类Dev

使用BeautifulSoup隔离脚本

来自分类Dev

使用有光泽的隔离

来自分类Dev

GGTS 3.6.4(OSX 64位)错误-系统属性http.nonProxyHosts已设置为本地

来自分类Dev

使用scons在Mac OSX 10.9上构建