Работа с назначениями в Xamarin.iOSWorking with entitlements in Xamarin.iOS

Разрешения (entitlements) предоставляют особые возможности и функции безопасности корректно настроенным для их использования приложениям.Entitlements are special app capabilities and security permissions granted to applications that are correctly configured to use them.

В операционной системе iOS приложения выполняются в песочнице, которая устанавливает ряд правил, ограничивающих доступ приложения к определенным ресурсам системы или пользовательским данным.In iOS, apps run in a sandbox, which provides a set of rules that limit access between the application and certain system resources or user data. Назначения используются для запроса разрешения у системы на расширение песочницы и предоставление приложению дополнительных возможностей.Entitlements are used to request that the system expand the sandbox to give your app additional capabilities.

Для расширения возможностей вашего приложения необходимо сделать назначение в файле Entitlements.plist вашего приложения.To extend the capabilities of your app, an entitlement must be provided in your app’s Entitlements.plist file. Могут быть расширены только некоторые возможности, их список приведен в руководстве Работа с возможностями, а их описание приведено ниже.Only certain capabilities can be extended and these are listed in the Working with Capabilities guide and described below. Назначения передаются в систему как пара ключ/значение, и обычно достаточно одной пары для каждой возможности.Entitlements are passed to the system as a Key/Value pair, and generally only one is required per capability. Конкретные ключи и значения описаны в разделе Справочник по ключам назначений этого руководства.The specific Keys and Values are described in the Entitlement key reference section later in this guide. Visual Studio для Mac и Visual Studio предоставляют понятный интерфейс для добавления назначений для приложения Xamarin.iOS в редакторе файлов Entitlements.plist.Visual Studio for Mac and Visual Studio provide a clear interface for adding entitlements in a Xamarin.iOS app through the Entitlements.plist editor. Это руководство описывает работу в редакторе файлов Entitlements.plist.This guide introduces the Entitlements.plist editor and how to use it. В руководстве вы также найдете справочник всех назначений, которые можно добавить в проект iOS для каждой возможности.It also provides a reference of all the entitlements that can be added to an iOS project for each capability.

Назначения и подготовкаEntitlements and provisioning

Файл Entitlements.plist применяется для указания назначений и подписывания пакета приложения.The Entitlements.plist file is used to specify entitlements and is used to sign the application bundle.

Однако требуется дополнительная подготовка, чтобы убедиться в корректности подписанного кода.However, some additional provisioning is required to ensure that the app is code signed correctly. Используемый профиль подготовки должен содержать ИД приложения, в котором включена требуемая возможность.The provisioning profile used must contain an App ID that has the required capability enabled. Сведения о том, как это сделать, см. в руководстве Работа с возможностями.For information on how to do this, refer to the Working with Capabilities guide.

Важно!

Файл Entitlements.plist помогает указать правильные свойства приложения с использованием возможностей. Но он не обеспечивает создание профиля подготовки, так как не связан с учетной записью разработчика Apple.The Entitlements.plist file helps fill in the correct properties for an application using capabilities, but it can't generate a provisioning profile as it is not linked to an Apple developer account. Для создания профиля подготовки, для развертывания и распространения приложения вам все еще нужно будет воспользоваться порталом разработчика.You will still need to generate a provisioning profile using the developer portal to deploy and distribute the application.

Установка назначений в проекте Xamarin.iOSSet entitlements in a Xamarin.iOS project

В дополнение к выбору и настройке необходимых служб приложения при определении ИД приложения необходимо также в проекте Xamarin.iOS настроить назначения, отредактировав файлы Info.plist и Entitlements.plist.In addition to selecting and configuring the required application services when defining the App ID, the entitlements must also be configured in the Xamarin.iOS project by editing the Info.plist and Entitlements.plist files.

Для настройки назначений Visual Studio для Mac выполните следующее:To configure the entitlements in Visual Studio for Mac, do the following:

  1. В Обозревателе решений дважды щелкните файл Info.plist, чтобы открыть его для редактирования.In the Solution Explorer, double-click the Info.plist file to open it for editing.
  2. В разделе Целевое приложение iOS введите имя приложения и Идентификатор пакета, который был создан при определении ИД приложения:In the iOS Application Target section, fill in a name for the application and enter the Bundle Identifier that was created when the App ID was defined:

  1. Сохраните изменения в файле Info.plist.Save the changes to the Info.plist file.

  2. В Обозревателе решений дважды щелкните файл Entitlements.plist, чтобы открыть его для редактирования:In the Solution Explorer, double-click the Entitlements.plist file to open it for editing:

  3. Выберите и настройте назначения для приложения Xamarin.iOS таким образом, чтобы соответствовать настройкам созданного ранее ИД приложения.Select and configure any entitlements required for the Xamarin.iOS application so that they match the setup that was defined when the App ID was created.

  4. Сохраните изменения в файле Entitlements.plist.Save the changes to the Entitlements.plist file.

Добавление нового файла Entitlements.plistAdding a new Entitlements.plist file

Назначения добавляются в приложение при помощи файла Entitlements.plist.Entitlements are added to an app via the Entitlements.plist file. Этот файл по умолчанию включается в проекты Xamarin.iOS, но может отсутствовать в более ранних проектах.This file is included in Xamarin.iOS projects by default but may be missing from older projects.

Для добавления файла Entitlements.plist в проект Xamarin.iOS выполните следующее:To add an Entitlements.plist file to your Xamarin.iOS do the following:

  1. Щелкните правой кнопкой на файле проекта и выберите Добавить > Новый файл…:Right-click on the project file and browse to Add > New File…:

    Контекстное меню добавления файлов

  2. В диалоговом окне создания файла выберите iOS > Список свойств и назовите его "Entitlements":In the New File dialog select iOS > Property List and name it Entitlements:

    Диалоговое окно "Новый файл"

Справочник по ключам назначенийEntitlement key reference

Ключи назначений добавляются через панель "Источник" редактора файла Entitlements.plist.Entitlement keys can be added via the Source panel of the Entitlements.plist editor. Ключи назначений обычно добавляются при использовании редактора файла Entitlements.plist и приводятся здесь для справки.The required keys will normally be added when using the Entitlements.plist editor but are listed below for reference.

WalletWallet

  • Описание. Приложение Wallet (формальное название — Passbook) используется для хранения и использования карт.Description: Formally known as Passbook, wallet is an app that stores and manages passes. Картами могут быть кредитные карты, карты скидок, посадочные талоны или билеты.These passes may be credit cards, store cards, boarding passes, or tickets.

    • Идентификатор типа картыPass Type Identifier
      • Ключи: com.apple.developer.pass-type-identifiersKeys: com.apple.developer.pass-type-identifiers
      • Строка: $(TeamIdentifierPrefix)*String: $(TeamIdentifierPrefix)*
  • Примечание.Notes:

    • Это позволит вашему приложение работать со всеми типами карт.This will enable your app to allow all pass types. Чтобы ограничить работу приложения только с подмножеством типов карт, установите следующее значение строки: $(TeamIdentifierPrefix)pass.$(CFBundleIdentifier)To restrict your app and only allow a subset of team pass types, set the string value to: $(TeamIdentifierPrefix)pass.$(CFBundleIdentifier)

    Здесь pass.$(CFBundleIdentifier) — ИД карты, созданный вышеWhere pass.$(CFBundleIdentifier) is the Pass ID that has been created above

iCloudiCloud

  • Описание. iCloud позволяет пользователям легко и удобно хранить свои данные и обмениваться ими между устройствами.Description: iCloud provides iOS users with a convenient and simple way to store their content and share it between devices. Существует четыре способа, как разработчики могут предоставить своим пользователям хранилище с использованием iCloud: хранилище типа "ключ-значение", хранилище типа UIDocument, CoreData и использование CloudKit напрямую в качестве хранилища для отдельных файлов и каталогов.There are four ways developers can use iCloud to provide a means of storage for their users: Key-Value storage, UIDocument Storage, CoreData, and using CloudKit directly to provide storage for Individual files and directories. Дополнительную информацию см. в руководстве "Введение в iCloud".For more information on these, refer to the Introduction to iCloud guide.

    • Документы iCloud и CloudKitiCloud Documents & CloudKit
      • Ключи: com.apple.developer.ubiquity-container-identifiersKeys: com.apple.developer.ubiquity-container-identifiers
      • Строка: $(TeamIdentifierPrefix)$(CFBundleIdentifier)String: $(TeamIdentifierPrefix)$(CFBundleIdentifier)
    • Хранилище iCloud KeyValueiCloud KeyValue Storage
      • Ключ: com.apple.developer.ubiquity-kvstore-identifierKey: com.apple.developer.ubiquity-kvstore-identifier
      • Строка: $(TeamIdentifierPrefix)$(CFBundleIdentifier)String: $(TeamIdentifierPrefix)$(CFBundleIdentifier)
  • Примечание.Notes:

    • Строку $(TeamIdentifierPrefix) можно получить, если зайти в свой кабинет на сайте developer.apple.com и перейти в раздел Member Center > Your Account > Developer Account Summary (Центр пользователей > Ваша учетная запись > Сводка об учетной записи разработчика) для получения своего идентификатора Team ID (или Individual ID в случае единственного разработчика).The $(TeamIdentifierPrefix) string can be located by logging to developer.apple.com and visit the Member Center > Your Account > Developer Account Summary to get your Team ID (or Individual ID for single developers). Идентификатор представляет собой строку длиной 10 символов (например, A93A5CM278).It will be a 10 character string ( A93A5CM278 for example).
    • Строка $(CFBundleIdentifier) начинается с iCloud и имеет значение, когда упакован контейнер iCloud, как это описано в руководстве Работа с возможностями.The $(CFBundleIdentifier) string begins with iCloud and is set when the iCloud container is crated as per the steps in the Working with Capabilities guide.
    • Заполнители $(TeamIdentifierPrefix) и $(CFBundleIdentifier) можно использовать, и они будут заменены на правильные значения во время сборки.The $(TeamIdentifierPrefix) and $(CFBundleIdentifier) placeholders can be used and will be substituted for the correct values at build time.

Важно!

Компания Apple предоставляет инструменты, которые помогают разработчикам надлежащим образом соблюдать Общий регламент по защите данных Европейского союза (GDPR).Apple provides tools to help developers properly handle the European Union's General Data Protection Regulation (GDPR).

Группы приложенийApp Groups

  • Описание. Группы приложений предоставляют различным приложениям (или одному приложению и его расширениям) общее место хранения файлов.Description: An App Group allows different applications (or an application and its extensions) to access a shared file storage location.

    • Ключ: com.apple.security.application-groupsKey: com.apple.security.application-groups
    • Строка: group.$(CFBundleIdentifier)String: group.$(CFBundleIdentifier)

Apple PayApple Pay

  • Описание. Технология Apple Pay позволяет пользователям оплачивать физические товары со своего iOS-устройства.Description: Apple pay enables users to pay for physical goods via their iOS device.
    • Ключ: com.apple.developer.in-app-paymentsKey: com.apple.developer.in-app-payments
    • Строка: merchant.your.mechantidString: merchant.your.mechantid

Push-уведомленияPush Notifications

  • Ключ: aps-environmentKey: aps-environment
  • Строка: development или productionString: development or production

SiriSiri

  • Описание. SiriKit позволяет приложению iOS предоставлять службы, которые будут доступны для Siri и приложения "Карты" на устройстве iOS через расширения приложений и новые платформы Intents и Intents UI.Description: SiriKit allows an iOS app to provide services that are accessible to Siri and the Maps app on an iOS device using App Extensions and the new Intents and Intents UI frameworks. Подробные сведения см. в руководстве "Введение в SiriKit".For more information, refer to the Introduction to SiriKit guide.
    • Ключ: com.apple.developer.siriKey: com.apple.developer.siri

Личная VPNPersonal VPN

  • Ключ: com.apple.developer.networking.vpn.apiKey: com.apple.developer.networking.vpn.api
  • Строка: allow-vpnString: allow-vpn

Обмен связками ключейKeychain Sharing

  • Описание. Обмен связками ключей позволяет разработчикам приложений предоставлять доступ к паролям, которые хранятся в связке ключей устройства, другим приложениям, разрабатываемым той же командой.Description: Keychain sharing enables app developers to share passwords that are stored in the device keychain with other apps developed by the same team. Доступ может быть ограничен путем передачи в строке идентификатора доступа к связке ключей.Access can be restricted by passing a keychain access group identifier in the string.
    • Ключ: keychain-access-groupsKey: keychain-access-groups
    • Строка: $(AppIdentifierPrefix) $(CFBundleIdentifier)String: $(AppIdentifierPrefix) $(CFBundleIdentifier)

Звук между приложениямиInter-App Audio

  • Описание. Функция звука между приложениями позволяет разработчикам использовать потоковую передачу аудио из одного приложения в другое.Description: Inter-App Audio enables developers to stream audio between apps.
    • Ключ: inter-app-audioKey: inter-app-audio
    • Логическое значение: даBoolean: YES

Связанные доменыAssociated Domains

  • Описание. Это право служит для передачи связанных доменов, которые должны обрабатываться как универсальные ссылки.Description: Associated domains that should be handled as universal links should be passed with this entitlement. Для обеспечения глубокой связи между приложением и веб-сайтом можно использовать универсальные ссылки.Universal links can be implemented to allow deep linking between your app and website. Необходимо создать запись для каждого домена, с которым работает ваше приложение. Каждая запись должна начинаться с applinks:You should provide an entry to each domain that your app supports and each entry should begin with applinks:
    • Ключ: com.apple.developer.associated-domainsKey: com.apple.developer.associated-domains
    • Строка: webcredentials:example.comString: webcredentials:example.com

Защита данныхData Protection

  • Описание. Функция защиты данных использует встроенное оборудование с шифрованием для хранения конфиденциальных данных вашего приложения в зашифрованном виде.Description: Enabling data protection uses built-in encryption hardware to store sensitive data used in your app in an encrypted format. По умолчанию уровень защиты установлен на полную защиту (файлы доступны только тогда, когда устройство разблокировано).By default, the level of protection is set to complete protection (files are only accessible when then device is unlocked).
    • Ключ: com.apple.developer.default-data-protectionKey: com.apple.developer.default-data-protection
    • Строка: NSFileProtectionCompleteString: NSFileProtectionComplete

HomeKitHomeKit

  • Описание. HomeKit предоставляет платформу для установки, настройки и эксплуатации поддерживаемых устройств домашней автоматики с одного устройства iOS.Description: The HomeKit framework provides a platform for setting up, configuring, and managing supported home automation devices – all from an iOS device. Дополнительные сведения об использовании HomeKit см. в руководстве "Введение в HomeKit".For more information on using HomeKit, refer to the Introduction to HomeKit guide.
    • Ключ: com.apple.developer.homekitKey: com.apple.developer.homekit
    • Логическое значение: даBoolean: YES

HealthKitHealthKit

  • Описание. Платформа HealthKit впервые появилась в iOS 8. Она предоставляет централизованное, управляемое и безопасное хранилище медицинских данных.Description: HealthKit is a framework introduced in iOS 8 that provides a centralized, coordinated, and secure data store for health-related information. Дополнительные сведения об использовании HealthKit см. в руководстве "Введение в HealthKit".For more information on using HealthKit, refer to the Introduction to HealthKit guide.
    • Ключ: com.apple.developer.healthkitKey: com.apple.developer.healthkit
    • Логическое значение: даBoolean: YES

Конфигурация беспроводных периферийных устройствWireless Accessory Configuration

  • Описание. Конфигурация беспроводных периферийных устройств позволяет вашему приложению настраивать периферийные MFi-устройства с Wi-Fi.Description: Using the Wireless Accessory Configuration allows your app to configure MFi Wi-Fi accessories
    • Ключ: com.apple.external-accessory.wireless-configurationKey: com.apple.external-accessory.wireless-configuration
    • Логическое значение: даBoolean: YES

ClassKitClassKit

  • Описание. ClassKit позволяет преподавателям просматривать выполнение учащимися выданных заданий в вашем приложении.Description: ClassKit enables teachers to view student progress on assigned activities in your app.
    • Ключ: com.apple.developer.ClassKit-environmentKey: com.apple.developer.ClassKit-environment
    • Строка: development или productionString: development or production

СводкаSummary

Это руководство описывает использование назначений в Visual Studio для Mac и Visual Studio.This guide introduced entitlements and how to use them in Visual Studio for Mac and in Visual Studio. В нем также приведен справочник пар ключ/значение для каждой возможности.It also provided a reference of the Key/Value pairs for each capability.