Apple程序的notarization流程

1.公证的需求
从macOS 10.14.5开始,使用新的Developer ID证书以及所有新的或更新的内核扩展签名的软件必须经过公证才能运行。从macOS 10.15开始,所有经过2019年6月1日之后构建并以Developer ID分发的软件都必须经过公证。但是appstore的程序不需要公证。

2.公证的环境
XCode需要10或者10以上版本,最好是xcode11
xcrun altool --list-providers -u “appleID” -p “专用密码” //这个命令只有在xcode11才有,导致在xcode10中无法查询providers参数,当然登录开发者帐号等也可以看到这个字符串

3.公证的命令
3.1 上传:xcrun altool --notarize-app --primary-bundle-id “com.leawo.tmcu” --username “appleID” --password “专用密码” --asc-provider “ascprovider” -t osx --file app.dmg

–primary-bundle-id:在plist文件中可看,程序唯一标识符
–username:开发者账号
–password:专用密码(不要用开发者帐号的密码,等去申请专用密码)//如何申请的官方文档 https://support.apple.com/en-us/HT204397
–asc-provider:相应团队的提供者简称.//如果需要查询则通过以下命令
xcrun altool --list-providers -u “appleID” -p “专用密码”
-t:类型
–file:上传的文件

3.2 上传成功则返回一个RequestUUID,用以查询此程序的公证状态
altool[16765:378423] No errors uploading ‘app.dmg’.
RequestUUID = 2EFE2717-52EF-43A5-96DC-0797E4CA1041

3.3 查询公证状态
3.3.1 查询所有上传的公证状态
xcrun altool --notarization-history 0 -u “appleID” -p “专用密码”

返回类似下面的信息:
Notarization History - page 0

Date RequestUUID Status Status Code Status Message


2018-07-02 20:32:01 +0000 2EFE2717-52EF-43A5-96DC-0797E4CA1041 invalid 2 Package Invalid
2018-06-29 13:23:13 +0000 6D020E28-9890-48E5-851C-4275169D07CC invalid 2 Package Invalid

3.3.2 查询单个程序的公证状态
xcrun altool --notarization-info 6D020E28-9890-48E5-851C-4275169D07CC -u “appleID” -p “专用密码”

返回:
RequestUUID: d0bf9013-fadd-48db-8653-864fb6642f48
Date: 2018-07-02 20:32:01 +0000
Status: invalid
LogFileURL: https://osxapps.itunes.apple.com/…
Status Code: 2
Status Message: Package Invalid
详细信息在LogFileURL中,根据反馈去修改,在重新上传,直至成功.

4.app或者可执行文件的签名
4.1 签名命令
codesign --entitlements=install.entitlements --timestamp --options=runtime -f -s “signedkey” “filename” --deep
signedkey:app的签名证书字符串

注:在官网上建议少使用–deep,而建议选择单一的签名。对单一文件签名则不需要–deep的参数。–deep会对app程序包中的所有文件进行签名
4.2 签名验证
codesign -vvv --deep --strict file.app //官方提供的签名验证

5.签名dmg或pkg
5.1 签名命令
codesign --timestamp -f -s “Developer ID Application: Leawo Software Co., Ltd. (EDP4B6GEW9)” “filename”
注:使用Developer ID Application而不是Developer ID Installer.

5.2 签名验证
spctl -a -t open --context context:primary-signature -v MyImage.dmg

5.3 关于签名官方文档
https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG1
//也可以登录https://developer.apple.com/网站,搜索关键字"codesign"

6.生成pkg的方法
由于用了第三方的打包软件(Packages),导致其一直反馈"The signature of the binary is invalid."这个错误,到处检测签名问题都没有问题,单独上传app压缩包也成功了,就确定应该是pkg文件出问题了,但也并不是签名问题。
最后使用productbuild打包pkg才渡过这个问题。

命令:
productbuild --component “my.app” /Applications --sign “SetupSignKey” --product “my.app”"/Contents/Info.plist" “my.pkg”
SetupSignKey:安装包的签名,注意与app签名区别

7.常见问题
https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/resolving_common_notarization_issues

8.查询方法
登录https://developer.apple.com/网站,搜索关键字"notarization"
https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution

9.Hardened Runtime //https://developer.apple.com/documentation/security/hardened_runtime
说明:需要公证的app必须开启Hardened Runtime,但是有些功能便会被限制.
比如使用了QT的QtWebEngine,在QtWebEngineCore.framework中有一个QtWebEngineProcess.app,此程序变无法调用,游览器网页无法打开.

解决方法:
在entitlements文件中设置com.apple.security.cs.disable-executable-page-protection为true,最好通过Xcode下设置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值