app重签名
1.查看包信息
codesign -d -vvv demo.app
查询结果如下
Executable=/Users/xxxxxxx/Desktopxxxxxxxxxxxxxxxx/airhost
Identifier=us.zoom.airhost
Format=app bundle with Mach-O universal (x86_64 arm64)
CodeDirectory v=20500 size=65627 flags=0x10000(runtime) hashes=2042+5 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=f4aaeaacbdb374cd6bad1d295fac898865a4373c
CandidateCDHashFull sha1=f4aaeaacbdb374cd6bad1d295fac898865a4373c
CandidateCDHash sha256=657a8011195e64a3d619bf3f39dc013da6006c5d
CandidateCDHashFull sha256=657a8011195e64a3d619bf3f39dc013da6006c5deb4df20043de8355a4a628c1
Hash choices=sha1,sha256
CMSDigest=5c8ae9046f896efae0bb766bd5a051a754d7b73d8e5060aff1b95ec74eb317dc
CMSDigestType=2
CDHash=657a8011195e64a3d619bf3f39dc013da6006c5d
Signature size=9081
Authority=Developer ID Application: xxxx Communications, Inc. (xxxxxxxx)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Mar 31, 2021 at 10:17:08 AM
Info.plist entries=24
TeamIdentifier=BJ4HAAB9B3
Runtime Version=10.14.0
Sealed Resources version=2 rules=13 files=19
Internal requirements count=1 size=176
重点看其中几点
Authority=Developer ID Application: xxx Communications, Inc. (xxxxxxx)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Mar 31, 2021 at 10:17:08 AM
Info.plist entries=24
TeamIdentifier=xxxxx
2.查看包中的 entitlement
codesign -d —-entitlements - demo.app
3.签名
codesign --force --entitlements caphost.entitlements --options runtime --sign "Developer ID Application: xxxxx Co., Ltd. (xxxxxx)" ZoomSDK/caphost.app
--force
本身已经签名,这里强制重签名;
--options runtime
因为要公证,所以也需要把app设置成强制运行时,这里注意,设置强制运行时会使之前的获取权限设置清空,所以需要用entitlements来设置;
--entitlements
因为app可能会用到某些权限,这里需要根据第二步获取到的entitlement创建文件;
--sign
签名,后面写签名证书的名字;
如果app内部包含framework,需要对framework的dylib文件也进行签名;
app公证-使用Xcode公证
1、使用 Developer ID 签名你的应用
关于证书,可参考:https://blog.csdn.net/lovechris00/article/details/84848734
2、Enable hardened runtime
The hardened runtime :强化版运行时
设置需要以下条件:macOS 10.13.6 及以上, Xcode 10 及以上;
测试则必须在 10.14 及以上版本。
工程 – target – Capabilities – Hardened Runtime
勾选需要的Access 后,access 将会声称在 entitlements 中。
3、entitlement 添加 com.apple.security.get-task-allow
entitlement.plist 中添加 com.apple.security.get-task-allow 这个键,设置为 YES
注意:这里选择了强化版运行时,获取权限会发生变化,需要在下面把权限勾上,不然获取权限的时候会崩溃;
4、Archive
Distribute App —> Developper ID —> Upload —> Review —> Loading;
公证成功
上面的页面不要关闭,公证成功后会给xcode发通知。一般几分钟就可以;
点击export可以导出公证成功的app文件;
打包pkg和签名
1.打包pkg
2.获取 installer 证书名字
终端输入
security find-identity -v
可以得到如下类型的数据:
1) 1236AFAC91EB45EC745037C6720F851C67E "Mac Developer: ss (612SD557MK)"
2) BCDBBCDB4BB8A048092FFFB813C45571273EC2AA "iPhone Developer: ss (3213CE4L5)"
3) 12345BDC1845B3E8E9E8EFEE61221BEBDAA75E "Mac Developer: ss (3U6SDA6DL5)"
4) FBFSDF8FE507B8D9FDA6FDSDADA786A3 "Developer ID Installer: ss (DSA34QV93)"
找到带 installer 的那条数据,并将双引号及内容一起复制
3.签名
脚本
#先cd到 pkg文件的同一目录下;
#pkg签名
productsign --sign "Developer ID Installer: xxx Co., Ltd. (xxx)" xxx.pkg xxxsigned.pkg
#xxxsigned.pkg为签名后的pkg文件,要拿这个文件去公证,而不是你原来的pkg
#公证
xcrun altool --notarize-app --primary-bundle-id "com.xxxx.xxxx" --username "xxx@xxxxx" --password "xxxx-xxxx-xxxx-xxxx" --file xxxsigned.pkg
#password 要从apple官网中获取,文章底部有链接
#查看公证
xcrun altool --notarization-info 54b88d61-4858-48e4-a9be-7b272577abf3 --username "xxx@xxxx" --password "xxxx-xxxx-xxxx-xxxx"
#54b88d61-4858-48e4-a9be-7b272577abf3 这个是请求id,上一条指令成功后,会在控制台打印出来,然后替换;
#给包订上公证票据
xcrun stapler staple -v xxxsigned.pkg
#验证pkg
spctl -a -v --type install ./xxxsigned.pkg
#结果
#公证后的
/xxx/abc.pkg: accepted
source=Notarized Developer ID
#没公证的
/xxx/abc.pkg: rejected
source=Unnotarized Developer ID
密码获取:管理您的 Apple ID
参考 macOS 开发 - Notarization 公证你的 Developer ID 应用_伊织的笔记本-CSDN博客