iOS 权利

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

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

权利与功能概念密切相关。 两者都要求扩展应用运行时所在的沙盒,从而为应用赋予更多功能。 开发应用时通常会添加权利,而对应用进行代码签名以进行分发时,通常会添加功能。 但是,启用自动预配后,向应用添加某些权利也会在其预配配置文件中更新应用的功能。 有关详细信息,请参阅使用 Visual Studio 添加功能

重要

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

添加 Entitlements.plist 文件

若要向 .NET MAUI 应用项目添加新的权利文件,请将名为 Entitlements.plist 的新 XML 文件添加到应用项目的 Platforms\iOS 文件夹中。 然后,将以下 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>

设置权利

可以通过双击 Entitlements.plist 文件在权利编辑器中将其打开,在 Visual Studio 中配置权利。

  1. 在“解决方案资源管理器”中,双击 .NET MAUI 应用项目的 Platforms > iOS 文件夹中的 Entitlements.plist 文件,在权利编辑器中将其打开。

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

    Visual Studio iOS entitlements editor.

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

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

使用权利

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

  1. 在“解决方案资源管理器”中,右键单击 .NET MAUI 应用项目,然后选择“属性”。 然后,导航至“iOS”>“捆绑签名”选项卡。

  2. 在捆绑签名设置中,单击“自定义权利”字段的“浏览...”按钮。

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

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

    Visual Studio custom entitlements field set.

  5. 关闭项目属性。

注意

Visual Studio 将为调试和发布版本设置自定义权利字段。

自动设置启用后,应用的预配配置文件中也会添加一个权利子集作为功能。 有关详细信息,请参阅使用 Visual Studio 添加功能

密钥引用

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

访问 WiFi 信息

访问 WiFi 信息权利可让应用获取当前连接的 WiFi 网络的信息。

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

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

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

应用证明

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

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

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

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

应用组

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

该权利是使用 StringArray 类型的 com.apple.security.application-groups 键定义的:

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

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

Apple Pay

Apple Pay 权利使用户能够利用存储在设备中的支付信息,轻松安全地支付杂货、服装、票据和预订等实物商品和服务的费用。

该权利是使用 StringArray 类型的 com.apple.developer.in-app-payments 键定义的:

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

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

关联域

关联域权利可让应用与特定服务的特定域关联,例如访问 Safari、保存的密码和活动延续。

该权利是使用 StringArray 类型的 com.apple.developer.associated-domains 键定义的:

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

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

自动填充凭据访问接口

自动填充凭证访问接口权限可使应用在用户许可的情况下,为应用和 Safari 中的自动填充提供用户名和密码。

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

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

有关详细信息,请参阅 developer.apple.com 上的自动填充凭据访问接口权利

ClassKit

ClassKit 权利可使应用能够在学校管理的环境中,与教师私密、安全地共享学生在已分配的活动(如阅读书中章节或参加测验)上的进展情况。

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

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

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

与驱动程序通信

与驱动程序通信权利可实现应用与 DriverKit 驱动程序之间的通信。

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

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

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

通信通知

通信通知权利使得应用可发送从一人到一人或从一人到多人的通信通知。

权利将使用 Boolean 类型的 com.apple.developer.usernotifications.communication 键定义:

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

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

数据保护

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

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

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

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

扩展虚拟寻址

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

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

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

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

家庭控制

拥有“家庭控制”权利时,可以在应用中启用家长控制,允许访问 ScreenTime API 中的托管设置和设备活动框架。 使用家庭控制时,需要通过家人共享进行用户注册。 它可防止移除应用,并从网络扩展启用设备端内容过滤器。

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

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

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

FileProvider 测试模式

拥有 FileProvider 测试模式权利时,可以启用一种测试模式,该测试模式有助于在测试期间让文件访问接口扩展能够更好地控制系统行为。

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

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

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

字体

“字体”权利使应用可以在获得用户授权的情况下安装和使用自定义字体。

该权利是使用 com.apple.developer.user-fonts 键定义的,类型为 Array(属于 String):

<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 配件交互。

该权利是使用类型为 Booleancom.apple.developer.homekit 键定义的:

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

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

热点配置

拥有“热点配置”权利时,应用可以配置 WiFi 网络。

该权利是使用类型为 Booleancom.apple.developer.networking.HotspotConfiguration 键定义的:

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

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

iCloud

拥有 iCloud 权利时,可以允许应用在云中存储数据,以便用户跨多个设备共享其数据。

该权利是使用 com.apple.developer.icloud-container-development-container-identifiers 键定义的,类型为 Array(属于 String),还有代表容器标识符的其他键:

<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 容器标识符权利

增加内存限制

拥有“增加内存限制”权利时,应用可以超出受支持设备上的默认应用内存限制。

该权利是使用类型为 Booleancom.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 中运行 iPad 应用时不可用。

密钥链

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

该权利是使用 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 TCP),后者可以将流量从一个接口无缝移交至另一个接口。

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

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

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

近场通信标记读取器

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

该权利是使用 StringArray 类型的 com.apple.developer.nfc.readersession.formats 键定义的:

<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>

此示例使应用允许所有通行证类型。 要限制应用并仅允许一组团队通行证类型,请将字符串值设置为 $(TeamIdentifierPrefix)pass.$(CFBundleIdentifier),其中 pass.$(CFBundleIdentifier) 是通行证 ID。

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

WeatherKit

WeatherKit 权利使应用能够接收和处理当前和预测的天气信息。

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

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

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

无线附件配置

无线配件配置权利支持应用配置 WiFi 配件。

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

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

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