基于notarytool对MacOS应用进行公证

2022-11-18 14:56:54 浏览数 (1)

最近在对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的公证方式。

什么是公证

MacOS应用公证

在进行详细的说明之前,需要解释一下什么叫公证,公证这个概念在Windows以及MacOS上都存在.

公证的本质目的是:向下载及使用你应用的人证明你的应用的可信任性

也就是,公证的应用是可以信任的,不会是一些破解或木马应用等.

MacOS

以MacOS来说,有两种方式发布应用.一种是上架到AppStore,让用户在AppStore搜索及下载应用;还有一种是发布独立的DMG格式的安装文件,让用户下载DMG进行安装.

对于发布独立的DMG格式的场景下,最好对应用进行公证,否则用户安装未公证的DMG应用时,MacOS会提示已损坏,无法打开。您应该将它移到废纸篓,用户需要在安全设置中主动信任这个应用,才能正常使用这个应用.

很多人下载过MacOS的盗版或破解应用,相信对这个提示或如何解决这个问题比较熟悉了.

MacOS公证的前提

做为一个MacOS应用的开发者,能够对MacOS进行公证的前提是:

  • • 需要一个Apple开发者帐号(个人或公司都可以)
  • • 安装Xcode 13及后续的相关版本

其实,做为一个iOS或MacOS的开发人员,注册一个Apple开发者身份必不可少,否则很多事情难以完成,一个Apple开发者的费用是每年99美元 (约699元/年)

新的公证流程

  1. 1. 存储必要的凭证

因为公证是在命令行模式下进行,为了安全起见,将后续公证过程中涉及到的认证密码存储到keychain中

代码语言:javascript复制
xcrun notarytool store-credentials "MY_PASSWORD" 
               --apple-id "{appId}"  
               --team-id PNJFUFSV5K  
               --password {二次认证密钥}
  • MY_PASSWORD是凭证名称,可随意命名,后续需要使用到
  • --apple-id:你注册的Apple开发者帐号
  • --team-id: teamId的值,无论是个人或公司开发者帐号,都会有一个这样的值
  • --password:二次凭证,在AppleId中设置的二次认证密码,以避免直接使用AppleId的密码,加强安全性
  1. 2. 提交公证申请
代码语言:javascript复制
xcrun notarytool submit {appPath} 
                   --keychain-profile "MY_PASSWORD" 
  • appPath: 需要公证的安装包的完整路径
  • --keychain-profile: 先前存储的凭证名称

过程中,会要求输入当前系统用户的密码,以读取上一步设置的MY_PASSWORD的凭证

此命令执行完成后,会输出类似如下信息

代码语言:javascript复制
Successfully uploaded file. 
 id: 2efe2717-52ef-43a5-96dc-0797e4ca1041
 path: /Users/lingen/Desktop/微言码道_0.1.dmg

这意味着你的安装包已经上传完成了,并成功发送了公证申请.

  1. 3. 查询公证进度

公证需要一定的时间,可随时查询公证进度 (正常情况下,一般30分钟左右)

代码语言:javascript复制
xcrun notarytool info {id} --keychain-profile "MY_PASSWORD"
  • {id}: 上一步生成的id值
  • --keychain-profile: 公证凭证

查询成功后,可查询到如下信息

代码语言:javascript复制
Successfully received submission info
  createdDate: 2022-09-19T06:29:28.611Z
  id: d6b8ad29-8517-44f6-8392-5b6a6e40b876
  name: 微言码道_0.1.dmg
  status: Accepted
  1. 4. 将公证信息注入到安装包中
代码语言:javascript复制
xcrun stapler staple {appPath}

公证成功后,将公证信息注入到你的安装包中

  1. 5. 验证DMG是否已公证
代码语言:javascript复制
xcrun stapler staple -v /Users/lingen/Desktop/微言码道_0.1.dmg

正常情况下,会输出***The staple and validate action worked!***的字样.

大功告成

提示注入成功后,你的安装包就可以在互联网上传播,下载以及安装是不会提示危险软件了。

更重要的一点是,公证是MacOS应用能自动下载并安装新版本的前提,没有公证的更新包,是无法实现自动更新这个功能的.

所以,如果你开发了MacOS应用,又没有走AppStore渠道,公证是你一定要去做的.

需要知道的是,MacOS的公证并不涉及人工审核,是一个自动化的流程,基本上只要你有Apple开发帐号,打的包又是按照苹果规范来的,就不存在公证被否的可能性.

0 人点赞