一 背景

  • 从 macOS10.15版本后,从 App Store 之外分发的 App 都需要经过 签名 和 Apple 公证(notarize),否则下载安装后打开会弹出“无法打开”,“移到废纸篓”的提示。
  • 公司一款自用的跨平台构建的mac软件,一直放在公司服务器上供下载使用,macOS10.15后遇见了该问题。几经周折尝试,才签名公证成功,记录如下。
  • 由于软件跨平台构建,脚本一键构建打包。寻求方案主要关注命令行处理方式。
  • 软件取名 Dog, dmg包,部分描述信息用xxxx代替。

二 签名证书

  • 参考官网 Create, export, and delete signing certificates
  • 支持部门同事处理,获得 签名证书.p12文件,安装。
  • 可在 钥匙串访问 中查看证书。

三 签名

  • 参考官网 Distribute outside the Mac App Store (macOS)

  • Dog.app 签名

    • 命令

      // 字符串为证书名称,在 钥匙串访问 中可查看安装的证书
      codesign -f -o runtime -s "Developer ID Application: xxxx Ltd. (6LRF78xxxx)" -v Dog.app --deep
      
    • 备注
      • 当上述没有-o runtime 参数时,在公证时,碰见以下错误

        “The executable does not have the hardened runtime enabled”

      • 搜索资料,一种方式是在XCode工程的设置中处理 Enable Hardened Runtime 项;但由于使用的第三方库也有同样报错,并不能解决问题。后在 github 的一个评论中找到签名加上-o runtime 参数的办法,尝试可行。点击此处,见最后一个评论。
  • 查看签名

    • 命令

      spctl  --verbose=4 --assess --type execute Dog.app
      
    • 输出

      // 如下,此时并不是网上所说的accepted
      Dog.app: rejected
      source=Unnotarized Developer ID

  • Dog.dmg 签名

    • appdmg 生成 Dog.dmg后,需要也对 Dog.dmg 签名。
    • 命令相同,Dog.app 替换为 Dog.dmg。

四 公证

  • 官网上对如何公证有以下描述:

    For more information about how to use the Xcode UI to upload your software, see Upload a macOS app to be notarized.
    For targets other than macOS apps, use the altool command line utility to notarize, as described in Customizing the Notarization Workflow.

  • 即对 app包可用 Xcode UI 上传进行公证。详见 Upload a macOS app to be notarized。

  • 而对于其他,例如 Dog.dmg 可通过 altool 命令行 上传进行公证。详见 Customizing the Notarization Workflow, 里面提供了具体的上传命令:

    % xcrun altool --notarize-app--primary-bundle-id "com.example.ote.zip"--username "AC_USERNAME"--password "@keychain:AC_PASSWORD"--asc-provider <ProviderShortname>--file OvernightTextEditor_11.6.8.zip
    
  • 我的使用如下:

    # primary-bundle-id : APP ID ,请咨询签名证书创建者
    # username : 开发者账号 ,请咨询签名证书创建者
    # password : 应用专用密码(登录 appleid.apple.com ,点击 Generate Password,创建一个应用专用密码,这样可以避免暴露真实的密码。),请咨询签名证书创建者
    # asc-provider : 证书提供者(ProviderShortname) ,请咨询签名证书创建者
    # file : 公证的软件包路径
    xcrun altool --notarize-app --primary-bundle-id "6LRF78xxxx.cn.xxxx.Xixxxx" --username "lxxxx@xxxx.cn"--password "ayrs-xxxx-xxxx-tjhf" --asc-provider "6LRF78xxxx" -t osx --file "./Dog.dmg"
    
    • 参数 asc-provider

      • 搜索资料,说是通过命令 xcrun altool --list-providers -u “apple id” -p “app password” 获得, 但我执行总报错,后通过 在证书创建的macbook上执行如下命令获得:
        security find-identity -p codesigning
      • 结果为
        Developer ID Application: xxxxBeijing)Network Technology Co., Ltd. (6LRF78xxx)
        // 使用的括号内的 6LRF78xxx
        
    • 参数 file

      • 测试绝对路径或相对路径均可
      • 可直接对dmg公证,而不是必须是pkg或者zip
    • 输出

      // 若出现以下信息,则重新尝试
      *** Error: An error occurred saving your changes to the Apple database.
      This problem may be a transient issue on the Apple side.  If the problem persists formore than an hour, please contact your iTunes representative. (1129)
      // 若出现以下信息,则成功上传
      No errors uploading './Dog.dmg'.
      RequestUUID = cb2524dd-f691-xxxx-acc3-8807exxxx864
      
    • 若上传无错误,将返回RequestUUID, 用于查询公证结果

  • 查询公证结果

    • 命令
    xcrun altool --notarization-info cb2524dd-f691-xxxx-acc3-8807exxxx864 --username "lxxxx@xxxx.cn"  // 同上--password "ayrs-xxxx-xxxx-tjhf"  // 同上
    
    • 输出
    // 若还未处理完毕
    No errors getting notarization info.Date: 2020-10-26 07:56:27 +0000Hash: 13bf499496e371751b127190xxxx489663b890cdfd72cRequestUUID: cb2524dd-f691-xxxx-acc3-8807exxxx864Status: in progress// 若公证成功
    No errors getting notarization info.Date: 2020-10-26 07:56:55 +0000Hash: 13bf499496e371751b1xxxxc86fd6eddebf489663b890cdfd72cLogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/Enigma124/v4/c7/56/a0/c756a0cf-b58c-1658-1904-d75e5a7e3c0e/developer_log.json?accessKey=1603893616_8033843945181087xxxx2Cdu3YhDOrVYv4%2FEmd8QWqhlKn1s4u92SbQqAR5mPQhMX66pTtSXi9vFQPWzttmQ60aqxxxxNZVr4ZjTJeV9jie%2BVmIKl0B95SXDKHGOuaYiFteW1opHFS%2FxJCw0CvkOG2RYLagtULbzbxxxxQkUgcc%2Fc%3DRequestUUID: cb2524dd-f691-xxxx-acc3-8807exxxx864Status: successStatus Code: 0
    Status Message: Package Approve
    
  • 若此时再次验证app签名:

sudo spctl --verbose=4 --assess --type execute Dog.app
输出如下:
Dog.app: accepted // 公证后变为accepted
source=Notarized Developer ID

五 参考

  • 整体流程参考 官网 为 app 签名以通过“门禁”验证
  • 细节参考 文章 Mac App 签名公证流程

mac dmg包签名及公证相关推荐

  1. QT Mac app签名及公证

    这里示范的是Qt程序的部署.签名及公证. 1.首先用macdeployqt xxx.app部署,不要加-dmg参数,如果出现第三方库依赖问题,百度查找解决办法,第三方库编译为静态库能少很多事,依赖的其 ...

  2. MacOS下qt签名与公证

    签名以及公证参考 简书参考 一.证书查看 security find-identity -p codesigning 二.签名 codesign -f -o runtime --timestamp - ...

  3. macOS 下 Electron 程序的签名及公证

    https://oldj.net/blog/2019/12/29/electron-builder-sign-and-notarize-for-macos 自 macOS 10.14.5 开始,应用程 ...

  4. android使用命令行空包签名

    app上传平台比较多像应用宝.豌豆荚.360.百度.小米.华为等.大部分公司一般也就选前四个,有的甚至只上传前两个(以前360审核要求比较多).现在要上传20个平台,有些平台之前上传过但是运营人员离职 ...

  5. Visual Studio 2017为Android APK包签名

    Visual Studio 2017为Android APK包签名 为Android APK包签名,可以保证后期的App顺利升级.在Visual Studio 2015中,IDE会自动生成两个APK包 ...

  6. JNLP(jar包签名)

    2019独角兽企业重金招聘Python工程师标准>>> JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java ...

  7. java jnlp 签名_JNLP(jar包签名)

    JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应 ...

  8. Mac如何创建自签名证书?Mac创建自签名证书图文教程

    Mac上怎么创建自签名证书?您可以使用"钥匙串访问"中的"证书助理"创建自签名证书.自签名证书不提供由证书颁发机构所签名的证书中的各种保证,但如果证书的签名人可 ...

  9. mysql密码为空包密码错误_apk空包签名方法及工具

    转载自http://blog.csdn.net/leaning_wk/article/details/46010949 [开发者平台签名验证说明]: 为了维护开发者的合法权益,平台在上传应用或者认领时 ...

  10. Android微信开发者平台更换包签名后,微信登录提示签名不对

    本地包测试的时候debug签名设置在微信开发平台上,测试微信授权登录没有问题,准备上线,开放平台上签名更换为线上包,本地也打了线上包测试,但是一直提示"签名不对,请检查平台签名是否一致&qu ...

最新文章

  1. VMware网络选项分析
  2. vs2019中如何创建qt项目_VS2019创建新项目居然没有.NET Core3.0的模板?
  3. 如何:在Spring中使用@Conditional和Condition注册组件
  4. 直面PHP微服务架构挑战
  5. 雷霄骅--H264视频编解码分析--目录转载
  6. 剑指offer:二叉搜索树的第k个结点(中序遍历)
  7. torch.randn
  8. 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
  9. iOS UIControl控件
  10. 小米手机解锁 usb3.0状态下
  11. 。。。。steam文字展柜
  12. 杂记之罗翔语录:要爱具体的人,而不要爱抽象的人
  13. JAVA求2019的2019次幂的最后五位
  14. Chapter 5 分类算法——决策树与随机森林
  15. SFC游戏<战区88>,买100W战斗机的测试
  16. 2021年R1快开门式压力容器操作最新解析及R1快开门式压力容器操作证考试
  17. Vue 中 v-if 和 v-show 的区别和用法
  18. LilyPond教程(5)——钢琴独奏片段 III
  19. 云服务器流量是什么东西_在线科普,买一台云服务器到底能干嘛?
  20. 防关联浏览器原理及对策

热门文章

  1. 自然辩证法2018版_2018年自然辩证法概论已整理-资源下载蚂蚁文库
  2. Doc2vec,给定文本,输出相似度最高的医学诊断文本和对应ICD编码
  3. 百度AI C#客户端车辆检测找不到VehicleDetect解决
  4. unity材质丢失素材变成粉红色的解决方法
  5. win7计算机怎么录屏,win7电脑怎么录屏?这个实用工具给你答案!
  6. MySQL数据库基本操作-DDL
  7. JAVA面试总结(初版)
  8. linux WIFI命令iwlist、iwconfig、iwpriv
  9. PS和AE、PR的区别是什么?
  10. 2020 Fall Berkeley CS61A Hog