升级苹果系统到MAC10.15后,一般用户没什么影响,但是开发者要一阵忙碌,每次苹果发新系统都是玩开发者团团转,这是历史陋习了。

这次强制启动Notarizition机制,以前的codesign和productsign不管用了,必须要发送文件给苹果服务器进行公证。不然就只能要求用户在首次安装(使用)时按右键弹出菜单“open”进行安装或使用,并且还“威胁”说某年某月某一天没有公证的app不能运行,所以只能捏着鼻子跟着流程走。问题是国内的博客和论坛都没有详细的攻略(也行有,可能我搜不到而已)。

废话说够了,现在入正题。

首先肯定是codesign,不能单纯按旧的跑了,要加几个参数,我给个例子,读者自行比较:

sudo codesign -f -o runtime --entitlements {path}/app.entitlements --timestamp --deep -s "Developer ID Application: xxx" -i "com.xxx.abc" "{path}/abc.app" 

如果在工程里面配置了entitlements环境文件(打开强运行时Hardened Runtime),则可以省略“--entitlements {path}/app.entitlements”

这样签名得到的app也是可以用的,用codesign -vv xxx.app查不出什么问题的。用spctl -a -v xxx.app也看不出什么问题。和以前的一样嘛(实际上后来得知是不一样的)

其次用pkgbuild+productbuild配合打包一个pkg文件,具体我不会细说,有点麻烦,但是不难。

再次就是用productsign签名pkg:

productsign --sign "Developer ID Installer: xxx" "from-pkg.pkg" "to-pkg.pkg"

到此为止旧版也这样玩,没太大区别。下面讲讲Notarizition机制的。

1.将已经签名的pkg发送给苹果公证。

xcrun altool --notarize-app --primary-bundle-id "com.xxx.abc" --username "my apple id" --password "app-password" --asc-provider "ProviderShortname" -t osx --file $Base_Path/Output/abc.pkg &> $Base_Path/abc.txt

--primary-bundle-id 后面跟着自己app的bundle id,-u或--username跟着是苹果ID;-p或--password后面是用户密码,这里要注意一下,貌似苹果要求启动两步认证机制(TWO-STEP VERIFICATION=ON)后才能得到app password的。先登录appleid.apple.com,在用户安全里面先启用两步认证(就是多了用手机接收一个验证码而已),然后可以看到创建app password,对,就是这个密码了,可以避免暴露真实的密码。。。第三个参数是provider,使用命令行:

xcrun altool --list-providers -u "my apple id" -p "app password"

查询到类似这样的:

#ProviderName                   ProviderShortname           WWDRTeamID
#------------------------------ --------------------------- ----------
#abc TECHNOLOGY LIMITED         abcTECHNOLOGYLIMITED        DD12345678 

这里使用到provider是因为本人不是app holder,属于公司组下的成员,所以要用“--asc-provider 组缩写”,也有其他的参数可以实现同样的功能,自行搜索。;-t或--type应该是目标程序运行平台吧;-f或--file后面跟着是pkg路径 。这些命令都是可以用

xcrun altool -h

查询到。最后跟着“&> abc.txt”是为了打印log或者uuid的。一般看到0字节,那就安静等待吧。

一般公证成功后,abc.txt的内容是:

No errors uploading 'xxx.pkg'.
RequestUUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

其他情况可能出错了,我记得昨天使用了-itc-provider "team name",log里面会显示我不在该组。所以有必要将log打印出来,然后慢慢分析。

既然通过了公证,那就将对应的票据加进来:(加入票据之前需要检查,看后面20200402更新的内容

#添加票据
xcrun stapler staple abc.pkg
#查询结果(这里可以看到,苹果系统会下载一个xxx.ticket的文件到临时文件,然后。。。)
xcrun stapler staple -v  abc.pkg

至此,pkg完成了公证,实际上pkg里面的app也一样完成了公证。重新输入

spctl -a -v abc.app
#打印的结果是:
/xxx/abc.app: accepted
source=Notarized Developer ID#如果没公证的话,应该显示这样的:
/xxx/abc.app: accepted
source=Developer ID

还有查询一下pkg

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

总结一下:

codesign app-->productsign pkg-->send to apple server & get a uuid->add ticket

另外本人喜欢偷懒,将截图这茬事忘了,将就着看吧。

2020-04-02 更新

在发送pkg之后最好做检测。

xcrun altool --notarization-info $RequestUUID -u "$user" -p "$pass"

第一次做这个的可能有困惑,那个UUID是可以通过上面的abc.txt获得,user就不必说了,pass需要的和上面的一样,不是真正的密码,而是对应app password。格式大概是“xxxx-xxxx-xxxx-xxxx”。

如果遇到:

No errors getting notarization info.Date: 2020-04-02 09:48:09 +0000Hash: e627c5ee39e1af09143c7641xxxxxxxxxxxxxxLogFileURL: https://osxapps-ssl.itunes.apple.com/xxxxRequestUUID: ca75b280-83de-4ff3-ab38-xxxxxxxxxxStatus: successStatus Code: 0
Status Message: Package Approved

这肯定是成功了,如果遇到Status:In Process,那就等等再检测。如果有URL,但是状态不是success,那就用浏览器打开LogFileURL去查,里面有详细的说明,具体到那个文件失败。。。

2022-07-05更新:

最近提示:

2022-07-06 18:59:19.130 *** Warning: 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. (-1030)

首先

xcrun altool --list-providers命令查询WWDRTeamID的值(最后一列,例子看上面)

其次保存配置文件到keychain

xcrun notarytool store-credentials "配置名称(举例:FlipPDF_Nor)" --apple-id "开发者账户(与与altool的username用法对应)" --team-id "对应WWDRTeamID的值(上面命令结果的最后一列)" --password "设置的共享秘钥(与altool的password用法对应)"例如:xcrun notarytool store-credentials "FlipPDF_Nor" --apple-id "abc@qq.com" --team-id "WCLCCCCCC" --password “aaa-bbb-ccc-ddd”

最后开始公证:

xcrun notarytool submit "zip(pkg)包文件路径" --keychain-profile "配置名(与保存的一致,例如:FlipPDF_Nor)" --wait例如:xcrun notarytool submit "~/Documents/aaa.pkg" --keychain-profile "FlipPDF_Nor" --wait

成功的结果是:

Conducting pre-submission checks for PageEditor.zip and initiating connection to the Apple notary service...
Submission ID receivedid: xx0e081b-xx45-xx7c-817f-xx4141a8c711
Successfully uploaded file20.9 MB of 21.0 MB)   id: xx0e081b-xx45-xx7c-817f-xx4141a8c711path: /Users/xxx/Documents/xxxx/Builds/Build/ZipOutput/aaa.zip
Waiting for processing to complete.
Current status: Accepted........
Processing completeid: xx0e081b-xx45-xx7c-817f-xx4141a8c711status: Accepted

关于苹果公证(Apple Notarizition)机制的一些总结相关推荐

  1. 苹果ASA广告竞价机制详解!

    最近一段时间,由于苹果后台数据的不稳定性,短期内失去数据支撑的广告主们,在ASA广告的投放过程中不可避免地遇到了一些问题: 为什么正常的广告系列展示大幅下降,甚至没有展示? 为什么只有一个App竞价的 ...

  2. App发布系列--苹果开发证书运行机制(一) Code Signing

    最近看了objc.io上第17期中的文章 <Inside Code Signing> 对应的中文翻译版 <代码签名探析> ,受益颇深,对iOS代码签名机制有了进一步的认识.想了 ...

  3. 微信公众号关闭iOS端虚拟支付业务;苹果「Apple 登录」存安全漏洞;谷歌推迟发布Android 11 Beta| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  4. 给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

    给定四种水果,分别是苹果(apple).梨(pear).桔子(orange).葡萄(grape),单价分别对应为3.00元/公斤.2.50元/公斤.4.10元/公斤.10.20元/公斤. 首先在屏幕上 ...

  5. 【历史上的今天】7 月 21 日:施乐退出计算机市场;《世界版权公约》制定;苹果推出 Apple Airport

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 7 月 21 日,在 1990 年的今天,北京正负电子对撞机工程正式通过国家验收.这项投资 2.4 ...

  6. 苹果官方Apple Pay开发文档(中文版):开始使用Apple Pay

    原文地址:http://www.cocoachina.com/ios/20140910/9573.html 本文由CocoaChina翻译自苹果官方Apple Pay开发文档.目前版本为1.0 概览: ...

  7. 苹果官方Apple Pay开发文档(中文版)

    概览: Apple Pay为用户从你的App里购买实际的物品和服务提供简单而安全的方法.通过Touch ID,用户可使用储存在iPhone 6和iPhone 6 Plus上的信用卡和借记卡支付证书来授 ...

  8. 苹果(apple)支付退款通知、api

    苹果(apple)支付退款通知.api 背景: 用户在使用苹果支付购买商品后,可以直接像苹果申请退款,如果申请成功将导致商户直接构成损失.甚至某网络平台有这种专门薅羊毛的店铺,低价出售虚拟商品,再申请 ...

  9. 苹果手表|apple watch series 6健康功能提升

    苹果手表|apple watch series 6健康功能提升 最新的苹果手表系列6对健康功能进行了改善与提升,具体有哪些功能亮点,一起随小编看看吧! 健康功能 提供与Series 5相同的健康功能, ...

最新文章

  1. 五彩进化树与热图更配-ggtree美颜进化树(宏基因组扩增子)
  2. window.open
  3. php pdo 打印sql语句,php – 使用PDO准备SQL语句
  4. Java内存数据库-H2介绍及实例(SpringBoot)
  5. android常用代码
  6. 计算机网络上网时间,电脑怎么限制上网时间
  7. redis——Java整合
  8. 去广州见了我大学老师标哥
  9. python桌面应用html_是否将Python后端与HTML / CSS / JS用户界面集成到桌面应用程序? - javascript...
  10. js页面传值php页面,php实现跳转传值有什么方法,js页面跳转传值
  11. [转载] Java的访问修饰符、非访问修饰符分类详细总结以及修饰符用途总结
  12. 本地远程查看服务器tomcat 上虚拟机信息
  13. Angular 分页
  14. Win10更新后桌面右键反应慢的问题
  15. linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate
  16. JetBrains Rider如何更改前进 后退 快捷键,并加到工具栏(图文详情)
  17. vue学习篇——前后端分离开发
  18. 一键修改Windows密码批处理
  19. 【数据结构与算法】栈与队列【C语言版】
  20. 第 7 篇、Linux C基础 | 变量和常量

热门文章

  1. DDSM数据库使用说明
  2. Node + WebSocket + Vue 聊天室创建群聊/加入群聊功能 – 第五章
  3. matlab的积分函数
  4. VMware 虚拟机安装 Mac OS X Mountain Lion 苹果系统(vm9.0和Mac OS10.7)
  5. Unity3d:UGUI源码,Rebuild优化
  6. SOFR, So Far ... So Good?
  7. python大学生生活信息交互平台的设计与实现毕业设计-附源码031315
  8. 谷歌浏览器如何快速安装插件
  9. 最后防线:三款开源HIDS功能对比评估
  10. 中文用户名改为英文只要3步复制黏贴