代码签名是为应用程序创建代码签名的过程。此签名可以保证应用程序的完整性,并防止任何篡改。Apple 设备使用应用程序的代码签名来检测开发者创建完签名后对代码所做的任何更改。如果应用程序没有代码签名,则设备会在用户打开之前发出警告。
注意:您必须对应用程序进行代码签名才能使用 Xcode 命令行或 Unity Build Automation 对其进行公证。
Unity 会为其生成的每个 macOS 构建添加代码签名,称为签名身份。为了对应用程序进行公证,Apple 要求代码签名包含用于识别开发者的加密签名,例如开发者 ID 证书。
要创建新的开发者 ID 证书,请使用以下步骤:
.cer。
为了对应用程序进行公证,Apple 需要使用应用程序标识符进行标识。获取应用程序标识符有两种方法:在 Unity 中或在应用程序的信息属性列表文件中。
拥有应用程序标识符后,即可向 Apple 注册。要执行此操作,请使用以下 API:
授权是代码签名中包含的权限或限制,用于控制应用程序可以执行的操作。
要为应用程序设置授权,请使用以下步骤:
.entitlements 文件扩展名的文件。例如,如果将应用程序命名为 MyProject,请创建一个名为 MyProject.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.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
</dict>
</plist>
这些授权是 macOS 应用程序具备硬运行时所需的最低权限。如果您的应用程序需要更多权限,请将其添加到此列表中。
要对应用程序进行代码签名,需要使用命令行。在计算机上,打开终端并导航到应用程序所在的目录。
为了确保您拥有必要的读取权限来处理代码签名,请运行以下命令,其中 "application_name.app" 是应用程序的名称:
chmod -R a+xr "application_name.app"
要对应用程序进行代码签名,请运行以下命令,其中:
"application_name.app" 是您构建的应用程序。"application_name.entitlements" 是授权文件的名称。"Developer ID Application : XXX (YYY)" 是您的签名身份。codesign
--deep
--force
--verify
--verbose
--timestamp
--options runtime
--entitlements "application_name.entitlements"
--sign "Developer ID Application : XXX (YYY)" "application_name.app"
此命令通过应用程序捆绑包文件夹运行,为所有文件签名,添加安全时间戳,并将您设置的授权嵌入到签名中。
使用 --deep 选项可能会导致代码签名出现问题。这是因为:
它会对所有进行签名的代码应用相同的代码签名选项和授权。
它仅对找到的代码文件进行签名。如果在系统期望查找数据的位置存在代码文件,则使用 --deep 不会对这些代码文件进行签名。
有关 --deep 选项以及借此如何解决问题的更多信息,请参阅签署代码。