场景
- 当做
macOS
的程序做持续集成时, 服务器上自动构建的项目在构建完之后需要签名, 这时候在签名时出现User interaction is not allowed
错误, 导致签名失败, 从而程序运行不了, 是什么原因造成的?
说明
-
在开发
macOS
程序后, 如果要让用户不做任何设置就能运行你的程序的话, 那么需要对.app
进行签名才能运行.macOS
和Windows
的签名不同就在macOS
需要对\MacOS
目录下的所有文件签名, 最后还需要对.app
签名; 而Windows
最少只需要对可执行文件签名就行了. -
macOS
上的Keychain Access
默认是不允许非交互状态下签名的,就是签名时弹出授权允许对话框, 让用户点击授权签名,这样的好处就是安全性高, 防止签名被第三方程序盗用, 因此在后台默默执行的自动构建程序签名是不会成功的. 因为我们的服务器只构建程序, 所以是不存在不可信的第三方程序的. 这时需要在KeyChain Access
设置下才能在非交互状态下签名通过. -
注意, 如果
KeyChain Access
签名在System
里, 直接从界面复制它到login
一份. 因为有些后台程序是需要在用户登录后才能执行, 比如打包到程序dmg
.
允许非交互状态下签名步骤
打开 Keychain Access
->login
->选中要签名的证书,展开,选中带钥匙的私有密钥,右键`Get Info->
Access Control-》选中第一个:
allow all applications to access this item` 确认即可.
其他注意点:
- 查看一个
.app
是否签名, 使用codesign -dvvv xxx.app
来查看. - 查看一个
.app
是否带沙盒(sandbox)
, 使用命令
codesign -dvvv --entitlements :- <executable-path>
参考
User interaction is not allowed trying to sign an OSX app using codesign
更多推荐
[macOS]_[初级]_[关于程序签名时出现User interaction is not allowed的问题]
发布评论