1. 关于公证苹果官方文档
2. 新闻:苹果强制启用公证
2020年2月3日起,Mac App Store 以外通过其他途径分发的 Mac 软件必须经过 Apple 公证,才能在 macOS Catalina 中运行
3. 公证流程
苹果官方,申请账号、密码、证书
对
dmg
或pkg
或zip
包,进行签名提交
dmg
或pkg
或zip
包,到Apple服务器
$ xcrun altool --notarize-app --primary-bundle-id "软件ID" --username "苹果账号" --password "密码" --file "本地文件路径"
提交后,会返回一个RequestUUID
, 用这个id,获取公证结果。
公证有3中状态:
success
invalid
in Progress
$ xcrun altool --notarization-info "服务器返回的RequestUUID" -u "苹果账号" -p "密码"
备注:公证结果, 也会发送至您注册苹果账号时邮箱中。
- 获取公证历史记录
$ xcrun altool --notarization-history 0 -u "苹果账号" -p "密码" | head -n 20
4. 公证可能遇到的问题
问题1: The executable does not have the hardened runtime enabled.
解决方法:对软件签名时候,增加选项 --options=runtime
$ codesign --options=runtime -f -s "证书名称" "文件"
问题2: The signature does not include a secure timestamp.
解决方法:对软件签名时候,增加选项 --timestamp
$ codesign --timestamp
问题3: The binary is not signed.
有的时候发现对dmg包或zip包,都整体签名了。为什么还会提示这个?
因为:公证的软件包内,所有的可执行文件
,都需要签名。
5. hardened.entitlements
注意:增加的时候,千万不要出现重复值。大坑。
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.bluetooth</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.device.print</key>
<true/>
<key>com.apple.security.device.usb</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict>
</plist>
6. codesign 命令详解
查看codesign命令帮助
$ man codesign
签名
$ codesign --entitlements=hardened.entitlements --timestamp --options=runtime -f -s "证书名称" "文件"
查看签名
$ codesign -dvvv filename.dmg
移除签名
$ codesign --remove-signature filename.dmg