Mac Catalyst 权利

在 Mac Catalyst 上,.NET 多平台应用 UI (.NET MAUI) 应用在沙盒中运行,该沙盒提供一组规则来限制应用与系统资源或用户数据之间的访问。 权利用于请求扩展沙盒以赋予应用更多功能,如与 Siri 集成。 应用使用的任何权利都必须在应用的 Entitlements.plist 文件中指定。 有关权利的详细信息,请参阅 developer.apple.com 上的权利

除了指定权利外,Entitlements.plist 文件还用于对应用进行代码签名。 对应用进行代码签名时,权利文件会与 Apple 开发者帐户中的信息相结合,以及其他项目信息,以将最终的权利集应用于应用。

权利与功能概念密切相关。 它们都请求扩展应用运行中的沙盒,以使其具有附加功能。 开发应用时通常会添加权利,而当代码对应用进行分发签名时,通常会添加功能。 有关功能的详细信息,请参阅功能

重要

Entitlements.plist 文件未链接到 Apple 开发者帐户。 因此,为应用创建预配配置文件时,应确保应用使用的任何权利也指定为其预配配置文件中的功能。 有关详细信息,请参阅功能

添加 Entitlements.plist 文件

若要向 .NET MAUI 应用项目添加新的权利文件,请将名为 Entitlements.plist 的新 XML 文件添加到 应用项目的 Platforms/MacCatalyst 文件夹中。 然后,将以下 XML 添加到此文件:

<?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>
</dict>
</plist>

设置权利

注意

根据 Microsoft 的现代生命周期策略,Visual Studio for Mac 计划于 2024 年 8 月 31 日停用。 在 2024 年 8 月 31 日 之前,Visual Studio for Mac 17.6 将继续受支持,并且可以获得 Apple 针对安全问题和更新平台提供的服务更新。 有关详细信息,包括用于在 Mac 上进行开发的替代选项,请参阅 Visual Studio for Mac 发生了什么情况?

可以通过双击 Entitlements.plist 文件在权利编辑器中打开它,在 Visual Studio for Mac 中配置权利:

  1. 在 Visual Studio for Mac 的“解决方案”窗口中,双击 .NET MAUI 应用项目的 “平台”> MacCatalyst 文件夹中的 Entitlements.plist 文件,在权利编辑器中将其打开。 然后,从“源”视图更改为“权利”视图:

    Visual Studio for Mac iOS entitlements editor source view.

  2. 在权利编辑器中,选择并配置应用所需的任何权利:

    Visual Studio for Mac iOS entitlements editor entitlements view.

  3. 保存对 Entitlements.plist 文件的更改,将权利密钥/值对添加到该文件。

对于某些权利,可能还需要在 Info.plist 中设置隐私密钥。

使用权利

注意

根据 Microsoft 的现代生命周期策略,Visual Studio for Mac 计划于 2024 年 8 月 31 日停用。 在 2024 年 8 月 31 日 之前,Visual Studio for Mac 17.6 将继续受支持,并且可以获得 Apple 针对安全问题和更新平台提供的服务更新。 有关详细信息,包括用于在 Mac 上进行开发的替代选项,请参阅 Visual Studio for Mac 发生了什么情况?

必须将 .NET MAUI Mac Catalyst 应用配置为使用 Entitlements.plist 文件中定义的权利:

  1. 在 Visual Studio for Mac 的“解决方案”窗口中,右键单击 .NET MAUI 应用项目并选择“属性”

  2. “项目属性”窗口中,选择“生成” > “MacCatalyst” > “捆绑签名”选项卡,然后单击“自定义权利”字段旁边的“...”按钮:

    Visual Studio for Mac bundle signing properties.

  3. 在对话框中,导航到包含 Entitlements.plist 文件的文件夹,选择该文件,然后单击“打开”按钮。

  4. “项目属性”窗口中,“自定义权利”字段将填充权利文件:

    Visual Studio for Mac custom entitlements field set.

  5. “项目属性”窗口中,单击“确定”按钮关闭窗口。

重要

必须为应用的每个生成配置单独设置自定义权利字段。

密钥参考

下面列出了权利密钥/值对以供参考。 在 Visual Studio 中,可以通过将 Entitlements.plist 文件编辑为 XML 文件来添加它们。 在 Visual Studio for Mac 中,可以通过权利编辑器的“源”视图添加它们。

访问 WiFi 信息

此“访问 WiFi 信息”权利使应用能够获取有关当前连接的 WiFi 网络的信息。

权利是使用 com.apple.developer.networking.wifi-info 类型的 Boolean 密钥定义的:

<key>com.apple.developer.networking.wifi-info</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的“访问 WiFi 信息”权利

应用证明

使用“应用证明”权利,可以在设备上生成一个特殊的加密密钥,并在服务器提供对敏感数据的访问权限之前使用它来验证应用的完整性。

权利是使用 com.apple.developer.devicecheck.appattest-environment 类型的 String 密钥定义的:

<key>com.apple.developer.devicecheck.appattest-environment</key>
<string>development</string>

有关详细信息,请参阅 developer.apple.com 上的应用证明环境

应用组

“应用组”权利使应用能够访问多个相关应用之间共享的组容器,以及执行应用之间的进程间通信。

权利是使用 com.apple.security.application-groupsArray 类型的 String 密钥定义的:

<key>com.apple.security.application-groups</key>
<array>
  <string>group.MyAppGroups</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的“应用组”权利

Apple Pay

借助“Apple Pay”权利,用户可以使用存储在其设备上的付款信息轻松安全地支付杂货、服装、门票和预定等实物权益和服务。

权利是使用 com.apple.developer.in-app-paymentsArray 类型的 String 密钥定义的:

<key>com.apple.developer.in-app-payments</key>
<array>
  <string>merchant.your.merchantid</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的商家 ID 权利

关联域

“关联域”权利使应用能够与特定服务的特定域相关联,例如访问 Safari、保存的密码和活动延续。

权利是使用 com.apple.developer.associated-domainsArray 类型的 String 密钥定义的:

<key>com.apple.developer.associated-domains</key>
<array>
  <string>webcredentials:example.com</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的“关联域”权利

自动填充凭据提供程序

“自动填充凭据提供程序”权利使具有用户权限的应用能够向应用和 Safari 提供自动填充的用户名和密码。

权利是使用 com.apple.developer.authentication-services.autofill-credential-provider 类型的 Boolean 密钥定义的:

<key>com.apple.developer.authentication-services.autofill-credential-provider</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的“自动填充凭据提供程序”权利

ClassKit

ClassKit 权利使应用能够在学校管理的环境中私下安全地与教师共享学生进度,例如阅读书籍中的章节或参加测验。

权利是使用 com.apple.developer.ClassKit-environment 类型的 String 密钥定义的:

<key>com.apple.developer.ClassKit-environment</key>
<string>development</string>

有关详细信息,请参阅 developer.apple.com 上的 ClassKit 环境权利

与驱动程序通信

“与驱动程序权利”允许应用程序和 DriverKit 驱动程序之间的通信。

权利是使用 com.apple.developer.driverkit.communicates-with-drivers 类型的 Boolean 密钥定义的:

<key>com.apple.developer.driverkit.communicates-with-drivers</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的与驱动程序通信

通信通知

“通信通知”使应用程序能够从一个人发送通信通知给一个人或多人。

权利是使用 com.apple.developer.usernotifications.communication 类型的 Boolean 密钥定义的:

<key>com.apple.developer.usernotifications.communication</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的请求通知服务权利

数据保护

“数据保护权利”使应用能够在受支持的设备上使用内置加密。 将文件指定为受保护的文件时,系统将以加密格式存储该文件。

权利是使用 com.apple.developer.default-data-protection 类型的 String 密钥定义的:

<key>com.apple.developer.default-data-protection</key>
<string>NSFileProtectionComplete</string>

有关详细信息,请参阅 developer.apple.com 上的“数据保护”权利

扩展虚拟寻址

“扩展的虚拟寻址”权利使你可以在应用中使用更多地址空间。

权利是使用 com.apple.developer.kernel.extended-virtual-addressing 类型的 Boolean 密钥定义的:

<key>com.apple.developer.kernel.extended-virtual-addressing</key>
<true/>

有关详细信息,请参阅有关 developer.apple.com 的“扩展虚拟寻址”权利

家庭控制

“家庭控制”权利允许应用中的家长控制,授予对 ScreenTime API 中托管设置和设备活动框架的访问权限。 使用“家庭控制”需要“家庭共享”进行用户注册。 它阻止移除应用,并从“网络扩展”启用设备内容筛选器。

权利是使用 com.apple.developer.family-controls 类型的 Boolean 密钥定义的:

<key>com.apple.developer.family-controls</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的“家庭控制”权利

FileProvider 测试模式

FileProvider 测试模式权利可以实现一种在测试期间让 FileProvider 扩展能够更好地控制系统行为的测试模式。

权利是使用 Boolean 类型的 com.apple.developer.fileprovider.testing-mode 密钥定义的:

<key>com.apple.developer.fileprovider.testing-mode</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的 FileProvider 测试模式权利

字体

字体权利可以让你的应用使用用户权限安装和使用自定义字体。

权利是使用 StringArray 类型的 com.apple.developer.user-fonts 密钥定义的:

<key>com.apple.developer.user-fonts</key>
<array>
  <string>system-installation</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的配置自定义字体

组活动

组活动权利使应用能够在一台或多台其他设备上与同一应用通信,从而在 FaceTime 调用中创建组活动。 FaceTime 上的组活动允许用户一起观看视频、一起听音乐或执行另一个同步活动。

权利是使用 Boolean 类型的 com.apple.developer.group-session 密钥定义的:

<key>com.apple.developer.group-session</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的组活动权利

HealthKit

HealthKit 权利可以让应用使用用户权限访问个人健康信息。

权利是使用 Boolean 类型的 com.apple.developer.healthkit 密钥定义的:

<key>com.apple.developer.healthkit</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的 HealthKit 权利

HomeKit

HomeKit 权利可以让你的应用与 HomeKit 配件进行交互。

权利是使用 Boolean 类型的 com.apple.developer.homekit 密钥定义的:

<key>com.apple.developer.homekit</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的 HomeKit 权利

热点配置

热点配置权利可以让应用配置 WiFi 网络。

权利是使用 Boolean 类型的 com.apple.developer.networking.HotspotConfiguration 密钥定义的:

<key>com.apple.developer.networking.HotspotConfiguration</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的热点配置权利

iCloud

iCloud 权利让应用能够在云中存储数据,使用户能够跨多台设备共享其数据。

权利是使用 StringArray 类型的 com.apple.developer.icloud-container-development-container-identifiers 密钥以及表示容器标识符的其他密钥定义的:

<key>com.apple.developer.icloud-container-identifiers</key>
<array>
  <string>iCloud.com.companyname.test</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>

为了在生成时获得正确的值,将替换 $(AppIdentifierPrefix)$(CFBundleIdentifier) 占位符。

有关详细信息,请参阅 developer.apple.com 上的 iCloud 容器标识符权利

增加内存限制

增加的内存限制权利可以让你的应用超过受支持设备上的默认应用内存限制。

权利是使用 Boolean 类型的 com.apple.developer.kernel.increased-memory-limit 密钥定义的:

<key>com.apple.developer.kernel.increased-memory-limit</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的增加内存限制权利

应用间音频

应用间音频权利可以让你的应用向/从启用了应用间音频的其他应用发送和接收音频。

权利是使用 Boolean 类型的 inter-app-audio 密钥定义的:

<key>inter-app-audio</key>
<true/>

有关详细信息,请参阅 developer.apple.com 的 应用间音频权利

重要

此权利在 iOS 13 中已弃用,当在 macOS 中运行 iPads 应用时,此权利不可用。

密钥链

密钥链权利可以让同一团队编写的多个应用共享密码。

权利是使用 StringArray 类型的 keychain-access-groups 密钥定义的:

<key>keychain-access-groups</key>
<array>
  <string>$(AppIdentifierPrefix)com.companyname.test</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的密钥链访问组权利

MDM 托管的关联域

移动开发管理 (MDM) 托管的关联域权利可以让 MDM 使用环境唯一的服务器名称等值补充应用附带的关联域。

权利是使用 Boolean 类型的 com.apple.developer.associated-domains.mdm-managed 密钥定义的:

<key>com.apple.developer.associated-domains.mdm-managed</key>
<true/>

多路径

Multipath 权利可以让应用使用多路径协议(例如:Multipath TCP),后者可无缝地将流量从一个接口移交到另一个接口。

权利是使用 Boolean 类型的 com.apple.developer.networking.multipath 密钥定义的:

<key>com.apple.developer.networking.multipath</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的 Multipath 权利

近场通信标记读取器

近场通信标记读取器权利可以让应用读取 NFC 数据交换格式 (NDEF) 近场通信 (NFC) 标记。

权利是使用 com.apple.developer.nfc.readersession.formatsArray 类型的 String 密钥定义的:

<key>com.apple.developer.nfc.readersession.formats</key>
<array>
  <string>NDEF</string>
  <string>TAG</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的近场通信标记读取器会话格式权利

网络扩展

通过网络扩展权利,可以创建扩展和自定义设备网络功能的应用扩展。

权利是使用 StringArray 类型的 com.apple.developer.networking.networkextension 密钥定义的:

<key>com.apple.developer.networking.networkextension</key>
<array>
  <string>content-filter-provider</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的网络扩展权利

个人 VPN

个人 VPN 权利可以让你的应用使用自定义 VPN 连接。

权利是使用 StringArray 类型的 com.apple.developer.networking.vpn.api 密钥定义的:

<key>com.apple.developer.networking.vpn.api</key>
<array>
  <string>allow-vpn</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的个人 VPN 权利

推送通知

推送通知权利可以让你的应用接收推送通知。

权利是使用 String 类型的 aps-environment 密钥定义的:

<key>aps-environment</key>
<string>development</string>

有关详细信息,请参阅 developer.apple.com 上的 APS 环境权利

按下即可发言

按下即可发言权利可以让你的应用向系统报告按下即可发言通道,以便其可以处理传输和接收后台音频。

权利是使用 Boolean 类型的 com.apple.developer.push-to-talk 密钥定义的:

<key>com.apple.developer.push-to-talk</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的按下即可发言权利

与你共享

与你共享权利可以让你的应用认领消息对话中共享的链接,并通过“与你共享”框架呈现。

权利是使用 Boolean 类型的 com.apple.developer.shared-with-you 密钥定义的:

<key>com.apple.developer.shared-with-you</key>
<true/>

使用 Apple 登录

通过 Apple 登录权利可以让用户使用其 Apple ID 进行身份验证。

权利是使用 StringArray 类型的 com.apple.developer.applesignin 密钥定义的:

<key>com.apple.developer.applesignin</key>
<array>
  <string>Default</string>
</array>

有关详细信息,请参阅 developer.apple.com 上的使用 Apple 权利登录

Siri

Siri 权利可以让你的应用处理 Siri 请求。

权利是使用 Boolean 类型的 com.apple.developer.siri 密钥定义的:

<key>com.apple.developer.siri</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的 Siri 权利

时间敏感通知

时间敏感通知权利可以让你的应用处理时间敏感通知。 时间敏感通知提供需要立即注意的信息,并直接呼吁个人在收到通知时即刻采取行动。 始终立即发送时间敏感警报,警报显示在其他通知上方,并允许其突破焦点和请勿打扰设置。

权利是使用 Boolean 类型的 com.apple.developer.usernotifications.time-sensitive 密钥定义的:

<key>com.apple.developer.usernotifications.time-sensitive</key>
<true/>

Wallet

电子钱包权利可以让你的应用管理通行证、门票、礼品卡和会员卡。 它支持各种条形码格式。

权利是使用 StringArray 类型的 com.apple.developer.pass-type-identifiers 密钥定义的:

<key>com.apple.developer.pass-type-identifiers</key>
<array>
  <string>$(TeamIdentifierPrefix)*</string>
</array>

此例将可以让你的应用允许所有通行证类型。 若要限制应用并仅允许一组团队通行证类型,请将字符串值设置成 pass.$(CFBundleIdentifier) 为通行证 ID 的 $(TeamIdentifierPrefix)pass.$(CFBundleIdentifier)

有关详细信息,请参阅 developer.apple.com 上的通行证类型 ID 权利

WeatherKit

WeatherKit 权利可以让应用接收和处理当前和预测的天气信息。

权利是使用 Boolean 类型的 com.apple.developer.weatherkit 密钥定义的:

<key>com.apple.developer.weatherkit</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的 WeatherKit Entitlement

无线附件配置

无线附件配置权利可以让你的应用配置 WiFi 附件。

权利是使用 com.apple.external-accessory.wireless-configuration 类型的 Boolean 密钥定义的:

<key>com.apple.external-accessory.wireless-configuration</key>
<true/>

有关详细信息,请参阅 developer.apple.com 上的无线附件配置权利