Obj-c协同签名而不输入管理员密码?

时间:2012-08-10 08:21:49

标签: objective-c cocoa nstask codesign

是否有可能通过cocoa'自动'编码捆绑包,而无需用户每次都输入管理员用户名和密码?
如果有某种方法可以实现这一点,那么可以理解某种类型的工作示例。这是我正在使用的代码,它在执行时要求管理员信用:

- (void)codeSignature:(NSData *)privateKey {

    NSString* signSomething    = @"file";
    NSString* homeDir     = [NSHomeDirectory() stringByAppendingPathComponent:@"/Users/Rufote"];

    NSString* homePath = [homeDir stringByAppendingPathComponent:signSomething];

    NSTask *task;
    task = [[NSTask alloc] init];
    [task setLaunchPath: @"/usr/bin/codesign"];

    NSArray *args;
    args = [NSArray arrayWithObjects: @"-s", @"certificate", @"-vvvv", @"-f", homePath, nil];
    [task setArguments: args];

    NSPipe *pipe;
    pipe = [NSPipe pipe];
    [task setStandardOutput: pipe];

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    [task launch];

    NSData *data;
    data = [file readDataToEndOfFile];

    NSString *string;
    string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

    [string release];
    [task release];

    return;

}

@end

2 个答案:

答案 0 :(得分:0)

无法访问Keychain的数据。

但是既然你想对你的Bundle进行编码,那么你可以使用xcodebuildxcrun命令编写Apple / Shell脚本,这将有助于自动化你的编码过程。

答案 1 :(得分:0)

在您的系统钥匙串上,您会找到与您的代码签名相关的3件事: - 你的证书 - 您的私钥(与您的证书同名) - 您的公钥(与证书相同的名称)

如果双击密钥,在访问控制上,您可以选择“允许所有应用程序访问此项”。然后您不必再输入管理员密码来进行代码签名,但要注意安全风险 !!!