前言
自从macos的系统升级到10.14之后,mac开始对系统上的应用程序进行了大规模的限制。
- 应用必须拥有正规签名,才可以进行运行。
- 应用如果不进行公证,那么在第一次打开的时候,则会提示不信任的开发者。不能直接打开。需要在设置里点击仍然打开字样。
这样的话,会对用户的使用,造成很大的不便。
如何公证
使用Xcode
在工具栏选择archives, 弹出窗口后,选择自己要公证的程序。
选择distribute app, 然后进行公证。
但是使用xcode来公证,需要使用xcode编译才可以,Qt的程序就不能使用这种方法
使用命令进行公证
这里我们主要介绍这种方法
上传
公证的命令是altool,需要xcrun altool来运行
1 | xcrun altool --notarize-app --file **.zip -u "appid" -p "passwd" --primary-bundle-id "bundle-id" |
参数中,–file指定需要公证的app,需要先用zip进行打包,上传的时候,不支持直接指定app文件
-u 是指定apple id, -p 是指定密码 –primary-bundle-id 是指定app的 bundle id
zip 需要把app进行打包,可以用如下命令:
1 | ditto -c -k --keepParent *.app *.zip |
如果不想使用明文密码。可以先把密码保持到mac本地的钥匙串中,然后使用 -p “@keychain:AC_PASSWORD” 来进行
其中,AC_PASSWORD为iterm name。
添加密码进钥匙串,可以使用以下命令:
1 | security add-generic-password -a "AC_USERNAME" -w "AC_PASSWORD" -s "ITEM_NAME" |
其中,AC_USERNAME是用户名,对应altool的-u参数,AC_PASSWORD是真正的密码,ITEM_NAME是名称,填在altool的keychain:后面
添加成功后如图:

成功话,会显示如下信息:
No errors uploading ‘**.zip’.
RequestUUID = 64d2e096-ae50-4fea-97a0-4fe4c1c5fb85
查询
上传应用后,需要等一段时间,来等待苹果来认证。不会超过一个小时,大概率在5分钟内完成。
在这期间,可以使用如下命令来查询状态
1 | xcrun altool --notarization-info UUID -u "***" -p "@keychain:AT_PASSWD" |
UUID是上传之后,返回的UUID,同时再附上用户密码即可。
正在处理中,返回如下:
1 | No errors getting notarization info. |
如果失败,返回如下:
1 | No errors getting notarization info. |
可以通过LogFileURL的链接,来查看具体失败内容。
成功的话,会返回如下:
1 | No errors getting notarization info. |
无论是否成功还是失败,apple都会发送一封邮件来告知你结果。
查看app是否被公证
成功之后,需要稍等一段时间,公证会自动生效
可以通过spctl -a -v **.app 来查询状态
如果出现:
1 | **.app: accepted |
说明还未公证成功,如果出现如下则证明公证成功
1 | **.app: accepted |
官方文档参考地址: