3

为了清楚起见,对原始问题进行了编辑:

我有一个主要项目来执行git clone https://my.repo.project.git. 该项目有 2 个目标(主要目标和密码助手目标)。存储库受密码保护,将要求输入用户名,后跟密码。主应用程序通过NSTask对象调用 git 命令。

NSDictionary *environmentDict = [[NSProcessInfo processInfo] environment];

[task setLaunchPath:gitExecutableLaunchPath];
[task setArguments:[NSArray arrayWithObjects:@"clone", @"https://my.repo.project.git"];
[task setCurrentDirectoryPath:path];
[task setEnvironment:environmentDict];

我遵循了这个项目的概念,当主目标没有存储在 repo 的钥匙串中的 git 凭据时,我的密码帮助程序目标可以自动运行。这个辅助密码帮助器目标所做的只是以下代码(为简单起见):

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Password helper has been launched");

        char *username = "my_username";
        char *password = "my_password";
        printf("%s\n", username);
        printf("%s\n", password);
    }
    return 0;

我可以在日志中看到密码助手应用程序已启动,但我总是收到“身份验证失败消息”。知道我在做什么错吗?我的目标是开发一个凭证助手应用程序,就像 git 的 git-credential-osxkeychain 应用程序一样。任何帮助深表感谢

4

1 回答 1

0

找到了解决方案。检查控制台后,我注意到 Askpass 目标被调用了两次。似乎这是第一次调用用户名,第二次调用密码。我使用以下代码来确定 Askpass 目标被调用的原因并以适当的值进行响应。

NSArray *args = [[NSProcessInfo processInfo] arguments];
于 2013-06-17T19:55:25.907 回答