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 中配置权利。
在“解决方案资源管理器”中,双击 .NET MAUI 应用项目的 Platforms > iOS 文件夹中的 Entitlements.plist 文件,在权利编辑器中将其打开。
在权利编辑器中,选择并配置应用所需的任何权利:
保存对 Entitlements.plist 文件的更改,将权利键/值对添加到文件。
对于某些权利,可能还需要在 Info.plist 中设置私钥。
使用权利
必须将 .NET MAUI iOS 应用配置为使用 Entitlements.plist 文件中定义的权利。
在“解决方案资源管理器”中,右键单击 .NET MAUI 应用项目,然后选择“属性”。 然后,导航至“iOS”>“捆绑签名”选项卡。
在捆绑签名设置中,单击“自定义权利”字段的“浏览...”按钮。
在自定义权利对话中,导航到包含 Entitlements.plist 文件的文件夹,选择该文件,然后单击“打开”按钮。
在项目属性中,将使用权利文件填充“自定义权利”字段:
关闭项目属性。
注意
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 证明环境。
应用组
应用组权利使应用能够访问多个相关应用之间共享的组容器,以及在应用之间执行进程间通信。
该权利是使用 String
的 Array
类型的 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 权利使用户能够利用存储在设备中的支付信息,轻松安全地支付杂货、服装、票据和预订等实物商品和服务的费用。
该权利是使用 String
的 Array
类型的 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、保存的密码和活动延续。
该权利是使用 String
的 Array
类型的 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 配件交互。
该权利是使用类型为 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 权利时,可以允许应用在云中存储数据,以便用户跨多个设备共享其数据。
该权利是使用 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 容器标识符权利。
增加内存限制
拥有“增加内存限制”权利时,应用可以超出受支持设备上的默认应用内存限制。
该权利是使用类型为 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 中运行 iPad 应用时不可用。
密钥链
密钥链权利可以让同一团队编写的多个应用共享密码。
该权利是使用 String
的 Array
类型的 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) 标记。
该权利是使用 String
的 Array
类型的 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 上的近场通信标记读取器会话格式权利。
网络扩展
通过网络扩展权利,可以创建扩展和自定义设备网络功能的应用扩展。
该权利是使用 String
的 Array
类型的 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 连接。
该权利是使用 String
的 Array
类型的 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 进行身份验证。
该权利是使用 String
的 Array
类型的 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
电子钱包权利支持应用管理通行证、票证、礼品卡和会员卡。 它支持各种条形码格式。
该权利是使用 String
的 Array
类型的 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 上的无线配件配置权利。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈