iOS 安全和隐私功能

本文介绍如何在 iOS 中使用安全和隐私功能,以及它们如何影响 Xamarin.iOS 应用。

Apple 在 iOS 10(和更高版本)中对安全和隐私进行了多项增强,这可以帮助开发人员提高应用的安全性并确保最终用户的隐私。 本文将介绍如何在 Xamarin.iOS 应用中实现这些功能。

一般增强功能

iOS 10 中的安全和隐私功能进行了以下常规更改:

  • 通用数据安全体系结构 (CDSA) API 已弃用,将替换为可生成非对称键的 SecKey API。
  • NSAllowsArbitraryLoadsInWebContent 键可以添加到应用的 Info.plist 文件中,可以在正确加载网页的同时仍为应用的其余部分启用 Apple 传输安全性 (ATS) 保护。 有关详细信息,请参阅我们的应用传输安全性文档。
  • 由于 iOS 10 和 macOS Sierra 中的新剪贴板允许用户在设备之间复制和粘贴,因此 API 已扩展为允许将剪贴板限制为特定设备,并带有时间戳,以便在给定时间点自动清除。 此外,命名粘贴板不再保留,将替换为共享粘贴板容器。
  • 对于所有 SSL/TLS 连接,现在默认会禁用 RC4 对称密码。 此外,安全传输 API 不再支持 SSLv3,建议开发人员尽快停止使用 SHA-1 和 3DES 加密。

访问专用用户数据

在 iOS 10(或更高版本)上运行的应用必须静态声明其访问特定功能或用户信息的意图,方法是在其 Info.plist 文件中输入一个或多个隐私键,向用户解释应用为何希望获取使用权

重要

当无法提供所需键的应用尝试访问其中一项受限功能或用户信息时,系统将以无提示方式终止,而不会出错! 如果应用在 iOS 10 上意外启动失败,请确保已指定所有必需的 Info.plist

以下隐私相关键可用:

  • 隐私 - Apple Music 使用说明 (NSAppleMusicUsageDescription) - 允许开发人员描述应用要访问用户媒体库的原因
  • 隐私 - 蓝牙外设使用说明 (NSBluetoothPeripheralUsageDescription) - 允许开发人员描述应用要访问用户设备上的蓝牙的原因
  • 隐私 - 日历使用说明 (NSCalendarsUsageDescription) - 允许开发人员描述应用要访问用户日历的原因
  • 隐私 - 相机使用说明 (NSCameraUsageDescription) - 允许开发人员描述应用要访问设备相机的原因
  • 隐私 - 通讯录使用说明 (NSContactsUsageDescription) - 允许开发人员描述应用要访问用户通讯录的原因
  • 隐私 - 健康共享使用说明 (NSHealthShareUsageDescription) - 允许开发人员描述应用要访问用户健康数据的原因。 有关详细信息,请参阅 Apple 的 HKHealthStore 类参考
  • 隐私 - 健康更新使用说明 (NSHealthUpdateUsageDescription) - 允许开发人员描述应用要编辑用户健康数据的原因。 有关详细信息,请参阅 Apple 的 HKHealthStore 类参考
  • 隐私 - HomeKit 使用说明 (NSHomeKitUsageDescription) - 允许开发人员描述应用要访问用户 HomeKit 配置数据的原因
  • 隐私 - 始终允许定位使用说明 (NSLocationAlwaysUsageDescription) - 允许开发人员描述应用始终有权访问用户位置的原因
  • [已弃用] 隐私 - 位置使用说明 (NSLocationUsageDescription) - 允许开发人员描述应用要访问用户位置的原因注意:iOS 8(及更高版本)中已弃用此键。 请改用 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription
  • 隐私 - 使用中定位使用说明 (NSLocationWhenInUseUsageDescription) - 允许开发人员描述应用在运行时访问用户位置的原因
  • [已弃用] 隐私 - 媒体库使用说明 - 允许开发人员描述应用要访问用户媒体库的原因注意:iOS 8(及更高版本)中已弃用此键。 请改用 NSAppleMusicUsageDescription
  • 隐私 - 麦克风使用说明 (NSMicrophoneUsageDescription) - 允许开发人员描述应用要访问设备麦克风的原因
  • 隐私 - 运动使用说明 (NSMotionUsageDescription) - 允许开发人员描述应用要访问设备加速计的原因
  • 隐私 - 照片库使用说明 (NSPhotoLibraryUsageDescription) - 允许开发人员描述应用要访问用户照片库的原因
  • 隐私 - 提醒使用说明 (NSRemindersUsageDescription) - 允许开发人员描述应用要访问用户提醒的原因
  • 隐私 - Siri 使用说明 (NSSiriUsageDescription) - 允许开发人员描述应用要将用户数据发送到 Siri 的原因
  • 隐私 - 语音识别使用说明 (NSSpeechRecognitionUsageDescription) - 允许开发人员描述应用要将用户数据发送到 Apple 的语音识别服务器的原因
  • 隐私 - 电视提供商使用说明 (NSVideoSubscriberAccountUsageDescription) - 允许开发人员描述应用要访问电视提供商帐户的原因

有关使用 Info.plist 键的详细信息,请参阅 Apple 信息属性列表键参考

设置隐私键

以以下示例为例,即访问 iOS 10(及更高版本)上的 HomeKit,开发人员需要将 NSHomeKitUsageDescription 键添加到应用的 Info.plist 文件中,并提供一个字符串,声明应用为何想要访问用户的 HomeKit 数据库。 此字符串将在用户首次运行应用时向用户显示:

An example NSHomeKitUsageDescription alert

Visual Studio 的 Xamarin.iOS 目前不支持在默认 iOS 清单编辑器中编辑 Info.plist 隐私键。 需要改用通用 PList 编辑器,因此请执行以下操作:

  1. 右键单击“解决方案资源管理器”中的“Entitlements.plist”文件,选择“打开方式...”

  2. 从程序列表中选择“通用 PList 编辑器”以打开该文件,然后单击“确定”。

    Select the Generic PList Editor

  3. 单击编辑器中最后一行上的 + 按钮,向列表中添加一个新条目。 此条目将称为“自定义属性”,类型设置为 String 并设置为空值。

  4. 单击属性名称,将显示一个下拉列表。

  5. 从下拉列表中选择隐私键(如“隐私 - HomeKit 使用说明”):

    Select a Privacy key

  6. 在“值”列中输入说明,描述应用要访问给定功能或用户信息的原因:

    Enter a description

  7. 保存对文件所做的更改。

重要

在上面给出的示例中,未能在 Info.plist 文件中设置 NSHomeKitUsageDescription 键将导致应用在 iOS 10(或更高版本)中运行时无提示地失败(在运行时被系统关闭),而不会出现错误

总结

本文介绍了 Apple 在 iOS 10 中的安全和隐私功能更改,以及它们如何影响 Xamarin.iOS 应用。