Version: 6000.3
语言: 中文
对 macOS 应用程序进行代码签名和公证
使用 Xcode 和命令行工具进行公证

对应用程序进行代码签名

代码签名是为应用程序创建代码签名的过程。此签名保证了应用程序的完整性并防止任何篡改。Apple 设备使用应用程序的代码签名来检测开发人员创建代码签名后所做的更改。如果应用程序没有代码签名,设备会在用户打开它之前警告用户。

注意:您必须对应用程序进行代码签名,以使用 Xcode 命令行Unity 构建自动化Unity 项目的持续集成服务,可自动执行在 Unity 服务器上创建构建的过程。更多信息
请参阅术语表
.

创建签名标识

Unity 在其生成的每个 macOS 版本中添加一个代码签名,称为签名身份。若要对应用程序进行公证,Apple 要求代码签名包含用于识别开发者的加密签名,例如开发者 ID 证书。

要创建新的开发者 ID 证书,请使用以下步骤:

  1. 转到创建新证书
  2. 按照提示创建私钥并上传证书签名请求
  3. 下载您的开发者 ID 证书。此证书的文件格式为.cer.
  4. 单击证书以将其添加到您的钥匙串中。在钥匙串中,它显示的名称格式如下:开发者 ID 应用程序:XXX (YYY)。

找到应用程序标识符

要对您的应用程序进行公证,Apple 需要使用应用程序标识符来识别它。有两种方法可以获取应用程序标识符:在 Unity 中,或在应用程序的信息属性列表文件中。

  • 在 Unity 中:
    1. 转到 编辑>项目设置(Project Settings) > 播放器。
    2. 展开其他设置部分
    3. 导航到 Mac App Store 选项
    4. Bundle Identifier 属性是应用程序标识符。
  • 在信息属性列表文件中:
    1. 在 Finder 中,前往已构建的应用程序。
    2. 右键单击应用程序并选择显示包内容
    3. 转到“目录”
    4. 打开 Info.plist
    5. 表示应用程序标识符的键是 CFBundleIdentifier

获得应用程序标识符后,您可以将其注册给 Apple。为此,请使用以下步骤:

  1. 登录到你的 Apple 开发者帐户。
  2. 选择“证书、ID 和配置文件”。
  3. 选择标识符
  4. 输入您的捆绑包 ID。

创建权利

权利是代码签名包含的权限或限制,用于控制应用程序可以执行的作。

要为应用程序设置权利,请使用以下步骤:

  1. 在与构建的应用程序相同的目录中,使用.entitlements文件扩展名。例如,如果将应用程序命名为 MyProject,请创建一个名为MyProject.entitlements.
  2. 使用文本编辑器打开文件并复制以下内容:
<?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选项以及如何解决问题,请参阅 签署您的代码

其他资源

对 macOS 应用程序进行代码签名和公证
使用 Xcode 和命令行工具进行公证