Mac app 打包时 Notarizition(公证)相关需求记录

参考文章

对您的 Mac 软件进行公证以在 macOS Catalina 中运行

macOS 开发 - Notarization 公证你的 Developer ID 应用
关于苹果公证(Apple Notarizition)机制的一些总结
macOS app 实现自动化 notarize 脚本
Developer ID Application证书制作

准备工作:

开发者账号中,必须生成两份重要证书:

  • develop ID Application 证书 —— 用来对 .app 进行分发签名。类似于 iOS 的 inhouse enterprise(企业内部分发应用)
  • develop ID Installer 根证书 —— 用来对打包生成的 .dmg, .pkg 进行签名
  • 一个主账号授权的副账号,用来做 .pkg / .dmg 的公正用。
    这个副账号对应的专有密钥(需要在 https://appleid.apple.com 中生成)
  • 副账号所属的 Team ID

事件原因:

没有使用正规签名流程,或正规公证的应用,会存在如下现象:

  • 经验证,对于 App,需要使用 Developer ID Application 进行签名,否则在第一次打开会提示 “身份不明的开发者”
  • 而对于 pkg 安装包,则要使用 Developer ID Installer 进行签名,否则在安装的时候,会提示 “身份不明的开发者”
image.png

苹果将在 10.14.5 上新引入的 App Notarization(公证)机制,届时,苹果将要求开发人员上传应用程序之前,将它们提交给苹果,以扫描恶意内容,并查找可能存在的代码签名问题,没有经过苹果检测的应用程序以后可能将不被允许运行

  • 如果没有做公正,即使使用的证书是合规证书,.pkg 安装时,Gatekeeper 机制会弹出提示 “无法打开 xxx ,因为 Apple 无法检查其是否包含恶意软件”
image.png

2020 年1月后,已安装的应用如果没有公证,也无法使用

如果是正常的应用,那么会出现

image.png

注:如果在本机上已经安装或打开过某不合规的应用,之后在一定时间内是不会再弹出提示的。
测试方法,可以尝试将不合规的应用通过 airdrop 传给另一台 Mac 进行验证。


10.14 之前的 codesign 和 productSign 不管用了


签名和公证过程

我们的流程包含两部分:app 和 pkg/dmg

1. App 签名、公证

可以通过命令行 codesign 的相关指令来完成签名。签名时务必指定 develop ID application 作为签名证书。

app 的签名和公证的步骤,建议交给 xcode 去做。公证成功后,苹果会回复一封邮件,表示我们公证通过。

image.png

这时候再去 orgonaized 里头把刚才的打包结果 export 出来

image.png

2. PKG/DMG 签名、公证

pkg/dmg 需要使用公证后的 .app 作为 source.app,然后进行打包。这里我们使用 Packages 进行打包(该第三方打包工具这里不赘述,mac 10.15 以上系统务必使用 v1.2.7 否则打包失败)

使用命令行上传公证应用

2.1 先给 pkg 文件签名

$ productsign --sign "Developer ID Installer: shu shu (428N123455)" origin.pkg signed.pkg

2.2 公证 pkg 文件

Developer ID Installer: shu shu (428N123455) 要根据实际钥匙串中的名字作相应替换。

xcrun altool --notarize-app --primary-bundle-id "app bundle id" --username "your appleid" --password "one-time-password" --file "test.pkg" -itc_provider "your team id"  &> tmp

这条命令中参数较多,这里一一说明

  • --primary-bundle-id:app 的 bundle ID
  • --username:开发者账号的 apple ID
  • --password:一次性密码,需要登录到 https://appleid.apple.com 中生成专属密钥。username 对应的也是主账号或授权的副账号
  • --file:pkg 地址
  • -itc_provider:副账号所属的 team ID,如果前面的 username 是主账号,那么这里不需要填这个参数

&> tmp 是将上传的内容及结果写入这个文件中。查看文件可以看到

No errors uploading './signed.pkg'.
RequestUUID = xxxxx-xxx-xxxxx-xxxxx-xxxxx

这里的 RequestUUID 通常和前面我们公证 app 时收到邮件里的内容是一致的。

2.3 进行盖章

公证成功后,会返回一个 ticket 用于 staple(盖章),执行下面的命令进行盖章。

xcrun stapler staple signed.pkg

2.4 验证 .app, .pkg/.dmg 是否有效

# App
spctl -a -v --type exec ./test.app

# pkg
spctl -a -v --type install ./test\_sign.pkg

查询结果:

spctl -a -v --type install abc.pkg 
#公证后的
/xxx/abc.pkg: accepted
source=Notarized Developer ID
 
#没公证的
/xxx/abc.pkg: rejected
source=Unnotarized Developer ID

未解之谜

  • 实际发现有些情况会显示 reject, source=Notarized Developer ID, 并且可以正常安装,不会报错。
  • 我将一个公证的和未公证的 app 一起打包入一个 pkg. pkg 正常签名,公证,但是盖章会失败(RequestUUID 不相同)。理论上这个 pkg 应该是会被列为无效,但实际测试发现不会弹出“未知应用”或“恶意软件”的提示。

长命令示例:

xcrun altool --notarize-app --primary-bundle-id "com.XXX.XXXX.XXXX" --username "xxxxxx@qq.com" --password "xxxx-xxxx-xxxxx-xxxx" --file ./signed.pkg -itc_provider "XXXXXXXXX" &>tmp

这条命令中参数较多,这里一一说明

  • --primary-bundle-id: 包名,bundle ID
  • --username:apple ID
  • --passwordhttps://appleid.apple.com 去这里生成吧
  • --file:pkg 地址
  • -itc_provider:team ID 开发团队的 ID
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,082评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,231评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,047评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,977评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,893评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,976评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,605评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,888评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,906评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,732评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,513评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,980评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,027评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,232评论 2 339

推荐阅读更多精彩内容