admin管理员组

文章数量:1589767

场景

  1. 当做macOS的程序做持续集成时, 服务器上自动构建的项目在构建完之后需要签名, 这时候在签名时出现User interaction is not allowed 错误, 导致签名失败, 从而程序运行不了, 是什么原因造成的?

说明

  1. 在开发macOS程序后, 如果要让用户不做任何设置就能运行你的程序的话, 那么需要对.app进行签名才能运行. macOSWindows的签名不同就在macOS需要对\MacOS目录下的所有文件签名, 最后还需要对.app签名; 而Windows最少只需要对可执行文件签名就行了.

  2. macOS上的Keychain Access默认是不允许非交互状态下签名的,就是签名时弹出授权允许对话框, 让用户点击授权签名,这样的好处就是安全性高, 防止签名被第三方程序盗用, 因此在后台默默执行的自动构建程序签名是不会成功的. 因为我们的服务器只构建程序, 所以是不存在不可信的第三方程序的. 这时需要在KeyChain Access设置下才能在非交互状态下签名通过.

  3. 注意, 如果KeyChain Access签名在System 里, 直接从界面复制它到login一份. 因为有些后台程序是需要在用户登录后才能执行, 比如打包到程序dmg.

允许非交互状态下签名步骤

打开 Keychain Access->login->选中要签名的证书,展开,选中带钥匙的私有密钥,右键`Get Info->Access Control-》选中第一个:allow all applications to access this item` 确认即可.

其他注意点:

  1. 查看一个.app是否签名, 使用codesign -dvvv xxx.app来查看.
  2. 查看一个.app是否带沙盒(sandbox), 使用命令
codesign -dvvv --entitlements :- <executable-path>

参考

User interaction is not allowed trying to sign an OSX app using codesign

本文标签: 程序macOSUserallowedInteraction