我需要将一个.keychain文件添加到我的钥匙串搜索列表中,以获取一些自动构建工具.目前我正在使用security list-keychains命令:
list-keychains [-h] [-d user|system|common|dynamic] [-s [keychain...]]
Display or manipulate the keychain search list.
Run Code Online (Sandbox Code Playgroud)
此命令允许您设置整个钥匙串搜索列表,但它不提供简单添加另一个钥匙串的方法.因此,添加钥匙串成为一个两步过程.
list-keychains -s ${existing_chains} ${new_keychain}虽然这有效,但它似乎过于复杂并且引入了竞争条件.
它似乎open my.keychain也会将它添加到搜索列表中,但我倾向于避免使用open脚本或无头环境中的命令.
是否有更简单或更好的方法将钥匙串添加到搜索列表中?
小智 8
上面@mles 解决方案的单行版本:
security list-keychains -d user -s $(security list-keychains -d user | sed -e s/\"//g) <new keychain>
在输出中直接管道的问题security list-keychains -d user是它用引号包围了结果。解决方案用于sed将它们剥离。
它是2017年,在macOS 10.12.4上security create-keychain仍未向搜索列表添加新的钥匙串。这是我的脚本,用于逐步添加和销毁临时钥匙串:
#!/bin/bash -e
uuid="$(uuidgen)"
echo "New Keychain name: $uuid"
keychains=$(security list-keychains -d user)
keychainNames=();
for keychain in $keychains
do
basename=$(basename "$keychain")
keychainName=${basename::${#basename}-4}
keychainNames+=("$keychainName")
done
echo "User keychains on this machine: ${keychainNames[@]}";
read -p "Enter to create keychain"
security -v create-keychain -p test123 $uuid
read -p "Enter to add keychain to searchlist"
security -v list-keychains -s "${keychainNames[@]}" $uuid
read -p "Enter to unlock keychain"
security -v unlock-keychain -p test123 $uuid
read -p "Enter to import certificate"
security -v import build-assets/certficate.p12 -k $uuid -P certificate_password
read -p "Enter to delete keychain"
security -v delete-keychain $uuid
Run Code Online (Sandbox Code Playgroud)
您使用哪些自动化工具?我在 tomcat 下使用 Jenkins 构建 iPhone 时遇到了类似的问题。我尝试在 shell 脚本中添加钥匙串,但事实证明它充其量只是非常不稳定。
最后,我通过将构建过程切换为通过 LaunchAgents 而不是 LaunchDemons 运行来解决了这个问题。这样,构建工具就可以在用户上下文中运行,并且事情变得更加可靠。
这对你来说有可能吗?如果是这样,我可以提供更多细节。
| 归档时间: |
|
| 查看次数: |
4577 次 |
| 最近记录: |