试图用codesign签名OSX应用程序的“用户交互不被允许”
我们的自动化构build在Jenkins上运行。 这个版本本身是在奴隶上运行的,奴隶是通过SSH来执行的。
我得到一个错误:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
我已经尝试过我在其他post中看到的所有build议:
- 在签名之前立即使用安全解锁钥匙串来解锁钥匙串。
- 将签名密钥移出到自己的钥匙串中。
- 将签名密钥移入login钥匙串。
- 将签名密钥移入系统钥匙串。
- 手动设置列表钥匙链仅包含密钥的钥匙串。
在任何情况下,我都会得到同样的错误。
在尝试诊断问题时,我尝试在本地terminal上运行“security unlock-keychain”命令,发现它实际上并未解锁钥匙串 – 如果我查看Keychain Access,锁符号仍然存在。 无论我在命令行传递密码还是让它提示我,都是这种情况。 使用GUI解锁相同的钥匙串将提示我input密码,然后解锁。 另外,如果我运行“security lock-keychain”,运行命令后我会立即看到按键locking。 这让我觉得解锁钥匙串实际上并不工作。 我在Lion(我们用来构build奴隶)和Mavericks(我正在开发的)上经历同样的行为。
接下来,我尝试给所有的安全命令添加-v:
list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain" Listing keychains to see if it was added: (( "/Library/Keychains/System.keychain" )) unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain" build/App.app: User interaction is not allowed.
由此看来,列表钥匙链是不起作用的。 也许不工作。 :/
这里也有类似的问题 。 解决scheme很有趣 – 在launchctl中将“SessionCreate”设置为true。 但是我没有build立在master上 – 我的构build过程是从一个从站生成机器上的SSH开始的。 也许有一个命令行的方式来做什么,当你运行“SessionCreate”launchctl正在做什么?
我也一直在打架。 没有什么帮助,直到我尝试了http://devnet.jetbrains.com/thread/311971的build议。; 感谢ashish agrawal!
通过GUIlogin您的构build用户并打开“钥匙串访问”。 select您的签名私钥,右键单击,select获取信息,切换到访问控制选项卡,并select“允许所有应用程序访问此项目”。
那么,我想我今天回答自己的问题,因为经过两天半的时间,我尝试了一件似乎已经奏效的事情。 我现在只想退出,希望它继续工作。
实质上,它看起来像是-d system
实际上不工作。 所以很多关于这里的其他问题的答案可能应该更新以反映这一点。
security -v list-keychains -s "$KEYCHAIN" "$HOME/Library/Keychains/login.keychain" security list-keychains # so we can verify that it was added if it fails again security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" codesign --sign "$SIGNER_IDENTITY" --force --signature-size 9600 \ --resource-rules src/AppResourceRules.plist --timestamp --verbose \ "$APP"
没有其他答案为我工作。
最终救了我的是这个职位
总而言之,这可能是由于5分钟的默认超时引起的,这会在长时间的构build之后触发这个错误。
修理:
security set-keychain-settings -t 3600 -l ~/Library/Keychains/login.keychain
尝试调用security unlock-keychain
和codesign
作为单行命令。 这帮助了我。 就像是:
security unlock-keychain -p <password> /Users/<user>/Library/Keychains/login.keychain && codesign --force --verify --verbose --sign "<certificate id>" <app name>
把你的钥匙放在系统钥匙串里
所以这是有效的命令。 -A
是为了防止Mac询问密码。 导入到system.keychain不需要GUI。
sudo security import <cert.p12> -k "/Library/Keychains/System.keychain" -P <passphrase> -A
我的钥匙链被locking。 它抵制我的进步改变这个事实…
Keychain Access
– > Keychain First Aid
– > Repair
, 等等 !
解锁钥匙串是不够的。 您还必须将私钥设置为“允许所有应用程序访问此项目”。 要从命令行执行该操作,需要重新导入密钥。 所以一次拿东西:
解锁login钥匙链,如果它被locking。 它不应该被locking,但无论如何,这是你如何做到这一点:
security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "~/Library/Keychains/login.keychain"
如果由于某种原因,您的构build机器的login钥匙串被locking,并且您不想在脚本中公开该密码,那么您应该使用不同的钥匙串。 您可以在现场创build一个,并使用上一个命令和下一个命令。 现场创build一个:
security create-keychain -p 'temporaryPassword' MyKeychain.keychain security list-keychains -d user -s login.keychain MyKeychain.keychain
然后使用-A参数将您的证书和关联的私钥导入login钥匙串。 请注意,你不需要sudo这一切…
security import <cert.p12> -k "~/Library/Keychains/login.keychain" -P <passphrase> -A
-A参数是什么将使您的私钥设置为“允许所有应用程序访问此项目”
因此,使用所有这些,你应该能够创build一个脚本来安装所需的证书来构build一个发行版本,并在没有提示的情况下对其进行签名。 您可以将.p12文件存储在回购站中,因此任何机器都可以在不需要手动设置的情况下构build您的ipa。
将您的密钥导入系统密钥链。 你可以使用这个命令:
sudo security import YourKey.p12 -k /Library/Keychains/System.keychain -P PasswordToYourKey -T /usr/bin/codesign
对我来说,没有什么工作似乎必须重新安装Xcode。 jenkins不断给出同样的错误。 如果您将Xcode安装到垃圾箱并重新安装,您将节省大量时间。 确保至less从命令行运行codesign命令。
即使之后,如果你得到相同的错误尝试设置“解锁钥匙串? 财产内Jenkins和path给你的login.keychain下/Users/${USER}/Library/Keychains/login.keychain
我希望这之后神会和你在一起。
尝试了一些上述解决scheme之后。 我意识到我有一个因素,就是我使用ION控制台开始构build。 当我切换回从terminal应用程序构build,一切工作得很好。
在我的情况下,这是由一个默认超时时间为300s的创build钥匙串和一个超过300s的长xcode编译引起的。 解决方法,对我来说,是调用:
security set-keychain-settings -t <longer timeout in seconds> <keychain>
在创build临时钥匙串之后立即。
我碰到了所有这些build议,在Jenkins工作中使用fastlane的gym
仍然存在问题。 我已经安装了证书,钥匙串解锁,并且当我在命令行上手动运行codesign命令时,能够在从属设备上进行编码。
解决方法是,如果Jenkins使用JNLP而不是SSH连接到从服务器,则可以进行密码设置。
所以我在这里尝试了每一个答案,而且有些东西并没有加起来。 最后,我想通了,当我重新启动我的CI服务,它运行在一个不同的用户比我预期的。 切换到实际上有权访问其login链中的密钥的用户修复了一切。 这可能不是一个普遍的问题,但是要logging我的这个错误的具体原因,以防万一发生在别人身上。
对于我来说,当手动添加第二个钥匙串并将其locking时,会发生这种情况。 由于某些原因,即使证书在login钥匙串中(并被解锁),密码签名也会尝试访问locking的钥匙串并失败。 解锁第二个解决了这个问题。 只是对我没有意义。