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

代码签名应用程序

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

注意:您必须对应用程序进行代码签名才能使用 Xcode 命令行Unity Build Automation 对其进行公证。

创建签名标识

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

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

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

找到应用程序标识符

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

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

拥有应用程序标识符后,即可向 Apple 注册。要执行此操作,请使用以下 API:

  1. 登录您的 Apple 开发者帐户。
  2. 选择证书、ID 和配置文件 (Certificates、IDs & Profiles)
  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 和命令行工具进行公证