自动化编译iphoneos app

Life is short , play more!
本文来自lihao's Blog,转载请注明。

xcodebuild 是支持命令行编译iphoneos app的。 但是却没有想象中的那么容易,因为路上被 signcode给拦住了。

User interaction is not allowed. Command /usr/bin/codesign failed with exit code 1

究竟是什么原因?

google一下,都说是keychain的问题。 因为对ios 没有一点经验,以为keychain 是什么 证书链。 英语不好害死人, 直译起来就是密钥串。 这个东西到底是什么,真是把我给弄糊涂了。

这里是keychain的wiki百科。 https://en.wikipedia.org/wiki/Keychain_(software)

原来它就只是个苹果公司开发的 os x密码管理系统。 因为对安全性太高, 过一段时间就会加锁。 即,你不输入keychain的密码解锁,你就不能执行一些应用程序。这样应用程序没有得到授权就不能执行。

这里因为没有解锁,所以codesign 就需要你输入 keychain(一般默认是 login.keychain) 的密码来unlock(解锁), 但是codesign又不支持 用户交互,让你输入密码。 我擦,这不是逗人玩么。 命令行也不支持和用户交互,这也太弱智了吧。 还是说我们ds 们还是对apple 的 os x 显的低智商了?

好吧,大概了解后。 可以发现,有2-3种方法可以解决此问题。

1.  那就是执行这些命令之前呢,先解锁keychain。 就相当授权了。

security unlock /your/keychain/path -P password

这里说明下,笔者测试了该方法,并没有成功。但不是说不能成功,因为笔者的密码是一个空格,属于特殊字符。  但不能确定 mac的shell 和 linux是否一致,尝试过-P ” ” 中间一个空格,最后也没成功。 所以放弃了这种方法,建议其他人可以采用。

ps: 这种方法必然是一个正确的思路,即需要授权的时候手动 解锁 keychain, 隔一会系统会自动将 keychain再加锁。 这样系统就更安全。

2. 替换你默认的keychain, 并允许你新创建的keychain 允许所有应用访问,不需要用户每次授权。

如何创建新的keychain,并替换默认的keychain可以看下面链接 ,说的比较详细

http://stackoverflow.com/questions/16550594/jenkins-xcode-build-works-codesign-fails

当然你也可以不通过命令行的方式,通过keychain管理中心自己点下鼠标,想必就可以完成。

当你创建了允许所有应用访问的keychain时, 这时候所有应用均可以不用授权直接运行了。

3. 将默认的keychain 授权你的某个应用。 这样该应用将不需要每次都手动授权了。

总结: 这么看, os x 确实比较安全。 但是安全的让人怀疑, apple公司是不是自己都不做自动构建啊,麻烦的让人想去死。


一条评论

  1. lihao说道:

    最简单的方法:http://stackoverflow.com/questions/20205162/user-interaction-is-not-allowed-trying-to-sign-an-osx-app-using-codesign 其中的答案

    最根本的方法, 是去gui界面,选择使用允许。 否则unlock后, 并不能解决xcodebuild中xcrun时codesign的情况(至少目前未发现如何解决)

发表评论

电子邮件地址不会被公开。 必填项已用*标注