最近在对MacOS应用的安装包进行公证时,看到一个提示:
altool has been deprecated and, starting in fall 2023, will no longer be supported by the Apple notary service. You should start using notarytool to notarize your software
根据提示,显示现在使用的altool公证方式将在2023年过期,无法再使用。考虑到过往我都是使用altool来进行公证,我查阅了Apple的官方文档,实践了并验证了基于notarytool
的公证方式。
什么是公证
在进行详细的说明之前,需要解释一下什么叫公证,公证这个概念在Windows以及MacOS上都存在.
公证的本质目的是:向下载及使用你应用的人证明你的应用的可信任性
也就是,公证的应用是可以信任的,不会是一些破解或木马应用等.
MacOS
以MacOS来说,有两种方式发布应用.一种是上架到AppStore,让用户在AppStore搜索及下载应用;还有一种是发布独立的DMG格式的安装文件,让用户下载DMG进行安装.
对于发布独立的DMG格式的场景下,最好对应用进行公证,否则用户安装未公证的DMG应用时,MacOS会提示已损坏,无法打开。 您应该将它移到废纸篓,用户需要在安全设置中主动信任这个应用,才能正常使用这个应用.
很多人下载过MacOS的盗版或破解应用,相信对这个提示或如何解决这个问题比较熟悉了.
MacOS公证的前提
做为一个MacOS应用的开发者,能够对MacOS进行公证的前提是:
- 需要一个Apple开发者帐号(个人或公司都可以)
- 安装Xcode 13及后续的相关版本
其实,做为一个iOS或MacOS的开发人员,注册一个Apple开发者身份必不可少,否则很多事情难以完成,一个Apple开发者的费用是每年99美元 (约699元/年)
新的公证流程
- 存储必要的凭证
因为公证是在命令行模式下进行,为了安全起见,将后续公证过程中涉及到的认证密码存储到keychain中
xcrun notarytool store-credentials "MY_PASSWORD" \
--apple-id "{appId}" \
--team-id PNJFUFSV5K \
--password {二次认证密钥}
MY_PASSWORD
是凭证名称,可随意命名,后续需要使用到--apple-id
:你注册的Apple开发者帐号--team-id
: teamId的值,无论是个人或公司开发者帐号,都会有一个这样的值--password
: 二次凭证,在AppleId中设置的二次认证密码,以避免直接使用AppleId的密码,加强安全性
- 提交公证申请
xcrun notarytool submit {appPath} \
--keychain-profile "MY_PASSWORD" \
appPath
: 需要公证的安装包的完整路径--keychain-profile
: 先前存储的凭证名称
过程中,会要求输入当前系统用户的密码,以读取上一步设置的MY_PASSWORD
的凭证
此命令执行完成后,会输出类似如下信息
Successfully uploaded file.
id: 2efe2717-52ef-43a5-96dc-0797e4ca1041
path: /Users/lingen/Desktop/微言码道_0.1.dmg
这意味着你的安装包已经上传完成了,并成功发送了公证申请.
- 查询公证进度
公证需要一定的时间,可随时查询公证进度 (正常情况下,一般30分钟左右)
xcrun notarytool info {id} --keychain-profile "MY_PASSWORD"
{id}
: 上一步生成的id值--keychain-profile
: 公证凭证
查询成功后,可查询到如下信息
Successfully received submission info
createdDate: 2022-09-19T06:29:28.611Z
id: d6b8ad29-8517-44f6-8392-5b6a6e40b876
name: 微言码道_0.1.dmg
status: Accepted
- 将公证信息注入到安装包中
xcrun stapler staple {appPath}
公证成功后,将公证信息注入到你的安装包中
- 验证DMG是否已公证
xcrun stapler staple -v /Users/lingen/Desktop/微言码道_0.1.dmg
正常情况下,会输出***The staple and validate action worked!***的字样.
大功告成
提示注入成功后,你的安装包就可以在互联网上传播,下载以及安装是不会提示危险软件了。
更重要的一点是,公证是MacOS应用能自动下载并安装新版本的前提,没有公证的更新包,是无法实现自动更新这个功能的.
所以,如果你开发了MacOS应用,又没有走AppStore渠道,公证是你一定要去做的.
需要知道的是,MacOS的公证并不涉及人工审核,是一个自动化的流程,基本上只要你有Apple开发帐号,打的包又是按照苹果规范来的,就不存在公证被否的可能性.