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

  升级苹果系统到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

#怎么生成keychain_name,后面找找
xcrun notarytool submit $Base_Path/Output/Animiz.pkg --keychain-profile "$keychain_name" --wait

--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"  #过时了

#注意keychain_name在文章中有找到操作方法。
xcrun notarytool info $RequestUUID --keychain-profile "$keychain_name"  

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

如果遇到:

No errors getting notarization info.

          Date: 2020-04-02 09:48:09 +0000
          Hash: e627c5ee39e1af09143c7641xxxxxxxxxxxxxx
    LogFileURL: https://osxapps-ssl.itunes.apple.com/xxxx
   RequestUUID: ca75b280-83de-4ff3-ab38-xxxxxxxxxx
        Status: success
   Status 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 received
  id: xx0e081b-xx45-xx7c-817f-xx4141a8c711
Successfully uploaded file20.9 MB of 21.0 MB)   
  id: xx0e081b-xx45-xx7c-817f-xx4141a8c711
  path: /Users/xxx/Documents/xxxx/Builds/Build/ZipOutput/aaa.zip
Waiting for processing to complete.
Current status: Accepted........
Processing complete
  id: xx0e081b-xx45-xx7c-817f-xx4141a8c711
  status: Accepted

有个失败的案例是:

  id: 30xx0494-8425-4ed4-xxxx-2f0b455f250b
  path: /Users/wonderidea/Documents/xxx/Builds/LYL/xxx/Output/xxEditor.pkg
Waiting for processing to complete.
Current status: Invalid..........
Processing complete
  id: 30xx0494-8425-4ed4-xxxx-2f0b455f250b
  status: Invalid

使用notarytool查询:

xcrun notarytool info $RequestUUID --keychain-profile "FlipPDF_Nor"

#结果大概是
30xx0494-8425-4ed4-xxxx-2f0b455f250b
Successfully received submission info
  createdDate: 2023-12-26T03:17:04.405Z
  id: 30xx0494-8425-4ed4-xxxx-2f0b455f250b
  name: xxEditor.pkg
  status: Invalid

#没有看到网址了!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值