【问题标题】:Obj-c codesigning without entering admin password?无需输入管理员密码即可进行 Obj-c 代码签名?
【发布时间】:2012-08-10 08:21:48
【问题描述】:

是否可以通过可可“自动”协同设计捆绑包,而无需用户每次都输入他们的管理员用户名和密码?
如果有某种方法可以实现这一点,我们将不胜感激某些类型的工作示例。这是我目前正在使用的代码,它在执行时要求管理员积分:

- (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

【问题讨论】:

  • 这个问题实际上是关于访问 MacOS X 钥匙串的方法——它存储你的证书和私钥——所以它的文档将是一个很好的起点。
  • @Marko - 我刚刚读完你提到的钥匙串文档,它没有告诉我如何完成我想做的事情。 [developer.apple.com/library/mac/#documentation/security/…

标签: objective-c cocoa nstask codesign


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    无法访问 Keychain 的数据。

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

    【讨论】:

    • @LukeMcneice:你能详细说明一下吗?你会怎么做??不会是未经授权的吗??终端也会要求你输入密码....
    • 将证书移动到另一个钥匙串。为它创建一个密码。创建一个脚本,在运行代码签名之前解锁该钥匙串(使用密码)。可以使用管理员凭据解锁它,但是将管理员凭据作为纯文本放在脚本中是很糟糕的。
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2012-09-23
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多