版本:Unity 6 (6000.0)
语言:英语
为 macOS 应用程序进行代码签名和公证
使用 Xcode 和命令行工具进行公证

为应用程序进行代码签名

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

注意:您必须为应用程序进行代码签名,才能使用 Xcode 命令行Unity Build Automation面向 Unity 项目的持续集成服务,可以自动在 Unity 服务器上创建构建过程。 了解详情
请参阅 词汇表
对其进行公证。

创建签名标识

Unity 会在它生成的每一个 macOS 构建中添加代码签名,这称为签名标识。要对应用程序进行 公证,Apple 要求代码签名包含加密签名(例如 开发人员 ID 证书),该签名可以识别开发人员。

若要创建新的开发者 ID 证书,请执行以下步骤

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

查找应用程序标识符

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

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

获得应用程序标识符后,可向 Apple 注册该标识符。为此,请执行以下步骤

  1. 登录您的 Apple Developer 帐户。
  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 和命令行工具进行公证