Функции безопасности и конфиденциальности iOS
В этой статье рассматривается работа с безопасностью и конфиденциальностью в iOS, а также о том, как они влияют на приложение Xamarin.iOS.
Apple сделала несколько улучшений безопасности и конфиденциальности в iOS 10 (и больше), которые помогут разработчику улучшить безопасность своих приложений и обеспечить конфиденциальность конечных пользователей. В этой статье рассматривается реализация этих функций в приложении Xamarin.iOS.
Общие улучшения
В iOS 10 были внесены следующие общие изменения в безопасность и конфиденциальность:
- API Common Data Security Architecture (CDSA) устарел и должен быть заменен API SecKey для создания асимметричных ключей.
- Новый
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
) позволяет разработчику описать, почему приложение хочет получить доступ к библиотеке мультимедиа пользователя. - Конфиденциальность — Описание использования периферийных устройств Bluetooth (
NSBluetoothPeripheralUsageDescription
) — позволяет разработчику описать, почему приложение хочет получить доступ к Bluetooth на устройстве пользователя. - Конфиденциальность — описание использования календарей (
NSCalendarsUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к календарю пользователя. - Конфиденциальность — Камера описание использования (
NSCameraUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к камере устройства. - Конфиденциальность — описание использования контактов (
NSContactsUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к контактам пользователя. - Конфиденциальность — описание использования общей папки работоспособности (
NSHealthShareUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к данным о работоспособности пользователя. Дополнительные сведения см. в справочнике по классу HKHealthStore в Apple. - Конфиденциальность — описание использования обновления работоспособности (
NSHealthUpdateUsageDescription
) позволяет разработчику описать, почему приложение хочет изменить данные о работоспособности пользователя. Дополнительные сведения см. в справочнике по классу HKHealthStore в Apple. - Конфиденциальность — описание использования HomeKit (
NSHomeKitUsageDescription
) — позволяет разработчику описать, почему приложение хочет получить доступ к данным конфигурации HomeKit пользователя. - Конфиденциальность — описание always Usage (
NSLocationAlwaysUsageDescription
) — позволяет разработчику описать, почему приложение должно всегда иметь доступ к расположению пользователя. - [Не рекомендуется] Конфиденциальность — описание использования расположения (
NSLocationUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к расположению пользователя. ПРИМЕЧАНИЕ. Этот ключ не рекомендуется использовать в iOS 8 (и больше). Вместо этого используются типыNSLocationAlwaysUsageDescription
илиNSLocationWhenInUseUsageDescription
. - Конфиденциальность — расположение при использовании описания использования (
NSLocationWhenInUseUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к расположению пользователя во время его выполнения. - [Не рекомендуется] Конфиденциальность — описание использования библиотеки мультимедиа — позволяет разработчику описать, почему приложение хочет получить доступ к библиотеке мультимедиа пользователя. ПРИМЕЧАНИЕ. Этот ключ не рекомендуется использовать в iOS 8 (и больше). Вместо этого используйте
NSAppleMusicUsageDescription
. - Конфиденциальность — описание использования микрофона (
NSMicrophoneUsageDescription
) — позволяет разработчику описать, почему приложение хочет получить доступ к микрофону устройств. - Конфиденциальность — описание использования движения (
NSMotionUsageDescription
) позволяет разработчику описать, почему приложение хочет получить доступ к акселерометру устройства. - Конфиденциальность — описание использования библиотеки фотографий (
NSPhotoLibraryUsageDescription
) — позволяет разработчику описать, почему приложение хочет получить доступ к библиотеке фотографий пользователя. - Конфиденциальность — описание использования напоминаний (
NSRemindersUsageDescription
) — позволяет разработчику описать, почему приложение хочет получить доступ к напоминаниям пользователя. - Конфиденциальность — Описание использования Siri (
NSSiriUsageDescription
) — позволяет разработчику описать, почему приложение хочет отправлять данные пользователя в Siri. - Конфиденциальность — описание использования распознавания речи (
NSSpeechRecognitionUsageDescription
) позволяет разработчику описать, почему приложение хочет отправлять данные пользователей на серверы распознавания речи Apple. - Конфиденциальность — описание использования поставщика телевизоров (
NSVideoSubscriberAccountUsageDescription
) — позволяет разработчику описать, почему приложение хочет получить доступ к учетной записи поставщика телевизоров пользователя.
Дополнительные сведения о работе с ключами Info.plist см. в справочнике по ключу списка свойств Apple.
Настройка ключей конфиденциальности
Выполните следующий пример доступа к HomeKit в iOS 10 (и больше), разработчику потребуется добавить NSHomeKitUsageDescription
ключ в файл Info.plist приложения и предоставить строку, указывающую, почему приложение хочет получить доступ к базе данных HomeKit пользователя. Эта строка будет представлена пользователю при первом запуске приложения:
В настоящее время Xamarin.iOS для Visual Studio не поддерживает редактирование ключей конфиденциальности Info.plist в редакторе манифестов iOS по умолчанию. Вместо этого вам потребуется использовать универсальный редактор PList, поэтому сделайте следующее:
Щелкните правой кнопкой мыши файл Info.plist в Обозреватель решений и выберите "Открыть с...".
Выберите универсальный редактор PList в списке программ, чтобы открыть файл, а затем нажмите кнопку "ОК".
+ Нажмите кнопку на последней строке в редакторе, чтобы добавить новую запись в список. Это будет называться "Настраиваемое свойство", с заданным типом
String
и пустым значением.Щелкните имя свойства, и появится раскрывающийся список.
В раскрывающемся списке выберите ключ конфиденциальности (например , конфиденциальность — описание использования HomeKit):
Введите описание в столбец "Значение", чтобы получить доступ к данной функции или сведениям о пользователе:
Сохраните изменения в файле.
Внимание
В приведенном выше примере сбой установки NSHomeKitUsageDescription
ключа в файле Info.plist приведет к тому, что приложение автоматически завершается ошибкой (закрывается системой во время выполнения) без ошибок при запуске в iOS 10 (или больше).
Итоги
В этой статье рассматриваются изменения безопасности и конфиденциальности, внесенные Apple в iOS 10 и как они влияют на приложение Xamarin.iOS.