objective-c - 我如何制作 GIT 凭证助手?

标签 objective-c git bash shell nstask

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

我有一个执行 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];

我遵循了 this project 中的概念使我的密码助手目标在主目标没有存储在存储库钥匙串(keychain)中的 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 应用程序一样。非常感谢任何帮助

最佳答案

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

NSArray *args = [[NSProcessInfo processInfo] arguments];

关于objective-c - 我如何制作 GIT 凭证助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599973/

相关文章:

android - 如何在 git 提交历史记录中删除敏感数据(API_KEY)?

git - 使用 Git 提交时如何忽略对文件的更改?

ios - 对已经具有默认值的属性使用 nullable/nonnull

iphone - 将 NSString 从一个 ViewController 传递到另一个 VC NSMutableArray

iphone - UIRefreshControl 背景色

iphone使用以下功能

windows - 使用 EditorConfig 会影响我应该如何为行尾配置 Git 吗?

regex - 将 sed 与正则表达式一起使用

linux - bash 中 if 语句的表达式语法错误

regex - 用于零长度字符串或带有空格的 Bash 函数