We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
先导入 xxx.p12 文件。
签名app
codesign -f -s "Developer ID Application: xxx" -vvv Hello.app --deep --options=runtime
运行上面命令,输出错误
Warning: unable to build chain to self-signed root for signer "Developer ID Application: xxx" Hello.app: errSecInternalComponent
网上搜索一番,有说是证书链不完整。需要下载其他跟证书。于是去 https://www.apple.com/certificateauthority/ 下载了相关依赖
Apple Inc. Root Apple Root CA - G2 Root
还是有问题。不过我注意到,我的证书显示和别人不一样 因为在导入证书时,选择了始终信任。起始这里需要保持系统默认,下面的图标才会变成绿色
完成签名后,建议在检查一下是否成功。因为codesign可能会漏掉一些文件。
spctl -a -vv -t install /path/to/app
上面会输出是否成功。如果需要更详细信息,可以用
codesign --verify \ -vvvv \ -R='anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.1] exists and (certificate leaf[field.1.2.840.113635.100.6.1.2] exists or certificate leaf[field.1.2.840.113635.100.6.1.4] exists)' \ /path/to/app
Debugging Broken Signed/Notarized Apps on macOS
签名出现错误 bundle format unrecognized, invalid, or unsuitable 比较难查,因为它并没有告诉你具体是什么导致的。经验做法是根据输出提示,看是那个包出的问题,再尝试签名它,看有没有报错
错误 A timestamp was expected but was not found. ,重试一下就可以了
#!/bin/bash if [ "$#" -ne 1 ]; then echo "Usage: $0 <path_to_app>" exit 1 fi APP_NAME=$(basename $1 .app) # 创建一个临时的稀疏磁盘映像 hdiutil create -size 100m -fs HFS+ -volname "$APP_NAME" -type SPARSE /tmp/$APP_NAME.sparseimage # 挂载稀疏磁盘映像 hdiutil attach /tmp/$APP_NAME.sparseimage # 将应用程序复制到挂载点 cp -R $1 /Volumes/$APP_NAME/ # 卸载稀疏磁盘映像 hdiutil detach /Volumes/$APP_NAME # 将稀疏磁盘映像转换为只读压缩的 .dmg 文件 hdiutil convert /tmp/$APP_NAME.sparseimage -format UDZO -o $APP_NAME.dmg # 删除临时的稀疏磁盘映像 rm /tmp/$APP_NAME.sparseimage
或者简单使用 create-dmg 工具
公证前,需在keychain中创建一个专用密码。可以用命令行工具
xcrun notarytool store-credentials "AC_PASSWORD" --apple-id "your-apple-id" --password "your-app-specific-password"
your-app-specific-password 是一个应用专用密码,或者是一个新的一次性验证码(如果开启了用双重认证)。
下一步:上传文件到苹果公证。
xcrun notarytool submit "Hello.dmg" --keychain-profile "AC_PASSWORD" --wait
这部分很慢(有时需要等好几天 see issue),可能会遇到服务器500错误。这时建议等一段时间再试。
上传时会返回一个Submission ID,可以通过这个ID查询状态
# 查询进展 xcrun notarytool info <submission-id> --keychain-profile "AC_PASSWORD" xcrun notarytool history --keychain-profile "AC_PASSWORD"
如果查询结果是Invalid,需要根据错误原因解决
# 查询错误原因 xcrun notarytool log <submission-id> --keychain-profile "AC_PASSWORD"
常见的问题在官网 resolving-common-notarization-issues 有相应的解决方案。
公证成功后,使用 stapler 工具将苹果提供的票据附着到 .dmg 文件上:
xcrun stapler staple "Hello.dmg"
验证: 使用 spctl 工具验证 .dmg 文件是否被接受:
spctl --assess --type open --verbose=4 "Hello.dmg"
The text was updated successfully, but these errors were encountered:
No branches or pull requests
先导入 xxx.p12 文件。
签名app
codesign -f -s "Developer ID Application: xxx" -vvv Hello.app --deep --options=runtime
运行上面命令,输出错误
网上搜索一番,有说是证书链不完整。需要下载其他跟证书。于是去 https://www.apple.com/certificateauthority/ 下载了相关依赖
Apple Inc. Root
Apple Root CA - G2 Root
还是有问题。不过我注意到,我的证书显示和别人不一样
因为在导入证书时,选择了始终信任。起始这里需要保持系统默认,下面的图标才会变成绿色
完成签名后,建议在检查一下是否成功。因为codesign可能会漏掉一些文件。
上面会输出是否成功。如果需要更详细信息,可以用
codesign --verify \ -vvvv \ -R='anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.1] exists and (certificate leaf[field.1.2.840.113635.100.6.1.2] exists or certificate leaf[field.1.2.840.113635.100.6.1.4] exists)' \ /path/to/app
Debugging Broken Signed/Notarized Apps on macOS
可以把app打包成dmg或pkg。以dmg为例,可以用第三方工具或自带的命令行
或者简单使用 create-dmg 工具
苹果要求所有通过Developer ID分发的应用程序都要经过公证,以确保它们没有已知的安全问题,并且在发布前已经过苹果的安全检查。这为用户提供了一个额外的安全层,因为经过公证的应用程序在首次启动时不会触发安全警告。
公证前,需在keychain中创建一个专用密码。可以用命令行工具
your-app-specific-password 是一个应用专用密码,或者是一个新的一次性验证码(如果开启了用双重认证)。
下一步:上传文件到苹果公证。
这部分很慢(有时需要等好几天 see issue),可能会遇到服务器500错误。这时建议等一段时间再试。
上传时会返回一个Submission ID,可以通过这个ID查询状态
如果查询结果是Invalid,需要根据错误原因解决
常见的问题在官网 resolving-common-notarization-issues 有相应的解决方案。
公证成功后,使用 stapler 工具将苹果提供的票据附着到 .dmg 文件上:
xcrun stapler staple "Hello.dmg"
验证:
使用 spctl 工具验证 .dmg 文件是否被接受:
spctl --assess --type open --verbose=4 "Hello.dmg"
苹果的安全策略是阻止从互联网上下载的应用安装。所有必须通过浏览器去下载dmg,才会提示。
如果没有经过公证,会提示
如果经过公证,会提示
The text was updated successfully, but these errors were encountered: