Version: 2020.3
macOS 播放器:适用于 IL2CPP 的 C++ 源代码插件
Apple TV

将应用程序提交到 Mac App Store

本页面介绍将应用程序提交到 Mac App Store 的过程。

首先,需要确保在密钥链中安装了正确的配置文件:“3rd Party Mac Developer Application”和“3rd Party Mac Developer Installer”配置文件。请参阅 Apple 开发者文档中的维护签名身份和证书 (Maintaining Your Signing Identities and Certificates) 部分以了解如何执行此操作。

选择 Edit > Project Settings__,然后选择 Player 类别。选择 Standalone 目标,展开 Other Settings__ 部分,然后导航到 Mac App Store Options

Unity 会自动将这些设置应用于应用程序的 info.plist 文件作为 CF 键(请参阅 Apple 开发者文档的 Core Foundation 键 (Core Foundation Keys) 以了解更多信息)。

Mac App Store Options
Mac App Store Options
属性 功能
Bundle Identifier 输入 iTunesConnect 应用程序的 Bundle ID。此信息在关联的 info.plist 文件中显示为 CFBundleIdentifier

请参阅 Apple 开发者文档的 CFBundleIdentifier 部分以了解更多信息。
Build 输入此应用版本的内部版本号。此信息在关联的 info.plist 文件中显示为 CFBundleVersion

请参阅 Apple 开发者文档的 CFBundleVersion 部分以了解更多信息。
Category 输入与应用程序类型对应的字符串。App Store 使用此字符串来确定应用程序的相应分类。默认情况下,此设置为游戏类别 public.app-category.games

请参阅 Apple 开发者文档的 LSApplicationCategoryType 部分以查看可用类别类型的列表。
Mac App Store Validation 通过启用此属性,可确保只有当应用程序包含来自 Mac App Store 的有效收据时才会运行。这样可以防止用户不在购买游戏的设备上而在另一台设备上运行游戏。仅当您已实施自己的收据验证时,才应禁用此设置。

启用 Mac App Store Validation 设置,然后构建应用程序 (File > Build Settings… > Build)。

接下来,需要创建一个 GAMENAME.entitlements 文件,并将其保存在任意位置。为此,最简单的方法是创建一个空的 Mac 应用程序。要执行此操作,请打开 Xcode,使用 macOS 模板创建一个新项目,转到 Capabilities 栏,并启用 App Sandbox。这样就会自动生成基本的 .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.app-sandbox</key> <true/>

  </dict>

  </plist>

在 Xcode(或任意文本编辑器)中打开 info.plist 文件,并添加以下键:

<key>LSApplicationCategoryType</key>

<string>{VALID APP CATEGORY, e.g.: public.app-category.kids-games }</string>

<key>CFBundleSignature</key>

<string>{4 LETTER CREATOR CODE, e. g.:  GMAD }</string>

如果使用的是 Xcode 8.0+,还需要将以下字段添加到 info.plist 文件中:

<key>CFBundleSupportedPlatforms</key>

    <array>
    
        <string>MacOSX</string>
        
    </array> 

接下来,修复 .app 中所有内容的读取权限。要执行此操作,请将以下内容添加到 macOS 终端:

 chmod -R a+xr "/path/to/GAMENAME.app"

使用先前创建的 .entitlements 对 .App 进行签名。要执行此操作,请将以下内容添加到 macOS 终端:

codesign -o runtime -f --deep -s '3rd Party Mac Developer Application: DEVELOPER NAME' --entitlements "GAMENAME.entitlements" "/AppPath/GAMENAME.app"

注意:-o runtime 切换开关可以指示代码符号启用 Hardened Runtime。从 macOS 10.14 起,这是应用程序通过 App Store 和 Apple 公证服务验证所需满足的要求。

构建安装程序/pkg。要执行此操作,请将以下内容添加到 macOS 终端:

 productbuild --component GAMENAME.app /Applications --sign "3rd Party Mac Developer Installer: DEVELOPER NAME" GAMENAME.pkg

最后,使用 Xcode ApplicationLoader 提交应用程序。

公证

公证 (Notarization) 是 Apple 用于检查是否有恶意组件的过程。这是一个自动化系统,不是应用程序审查 (App Review)。

Apple 开发者文档指出:

“从 macOS 10.14.5 开始,使用新的开发者 ID 证书以及所有新的或更新的内核扩展进行签名的软件必须经过公证才能运行。从 macOS 10.15 开始,必须对 2019 年 6 月 1 日之后构建并以开发者 ID 分发的所有软件进行公证。但是,您不需要对通过 Mac App Store 分发的软件进行公证,因为 App Store 的提交过程已经包含了等效的安全检查。”

有关更多信息,请参阅 Apple 开发者文档中的在分发前对 macOS 软件进行公证 (Notarizing macOS Software Before Distribution)

自定义图标

默认情况下,Unity 会缩小 Player 设置(打开 Edit > Project Settings,然后选择 Player 类别)的 Icon 面板中指定的图标图像,从而生成 .icns 文件。此文件定义了应用程序的图标在 macOS Finder 和操作系统停靠栏中的显示方式。但是,如果需要,可将其替换为自定义图标集。

  • 创建一个文件夹并将其命名为 UnityPlayer.iconset(或者是在 info.plistCFBundleIconFile/Icon File 字段中设置的任何名称),然后在其中放入以下名称的图像。请注意,此文件夹必须具有 .iconset 扩展名。
    icon_16x16.png

        icon_16x16@2x.png

        icon_32x32.png

        icon_32x32@2x.png

        icon_128x128.png

        icon_128x128@2x.png

        icon_256x256.png

        icon_256x256@2x.png

        icon_512x512.png

        icon_512x512@2x.png

确保 @2x.png 图像的大小是文件名中规定大小的两倍。例如,图像 512x512@2x.png 为 1024x1024 的图像。从 macOS 终端,导航到 .iconset 目录所在的目录,然后输入以下命令:

    iconutil -c icns UnityPlayer.iconset

最后,右键单击 .app 文件,然后选择 __Show Contents__,并将 iconset.icns 替换为先前创建的文件。


  • 2017–05–18 页面已发布

  • 5.6 版中的更新功能

macOS 播放器:适用于 IL2CPP 的 C++ 源代码插件
Apple TV