Uso degli entitlement in Xamarin.iOS

Gli entitlement sono funzionalità speciali delle app e autorizzazioni di sicurezza concesse alle applicazioni configurate correttamente per il loro uso.

In iOS le app vengono eseguite in una sandbox, che fornisce un set di regole che limitano l'accesso tra l'applicazione e determinate risorse di sistema o dati utente. Gli entitlement vengono usati per richiedere al sistema di espandere la sandbox per fornire all'app funzionalità aggiuntive.

Per estendere le funzionalità dell'app, è necessario specificare un entitlement nel file Entitlements.plist dell'app. Possono essere estese solo determinate funzionalità, elencate nella guida Uso delle funzionalità e descritte sotto. Gli entitlement vengono passati al sistema come coppia di chiave/valore e in genere ne è necessario solo uno per ogni funzionalità. Le chiavi e i valori specifici sono descritti nella sezione Informazioni di riferimento sulle chiavi degli entitlement più avanti in questa guida. Visual Studio per Mac e Visual Studio offrono un'interfaccia chiara per l'aggiunta di entitlement in un'app Xamarin.iOS tramite l'editor Entitlements.plist. Questa guida illustra l'editor Entitlements.plist e come usarlo. Fornisce anche informazioni di riferimento su tutti gli entitlement che possono essere aggiunti a un progetto iOS per ogni funzionalità.

Entitlement e provisioning

Il file Entitlements.plist viene usato per specificare gli entitlement e per firmare il bundle dell'applicazione.

È tuttavia necessario un provisioning aggiuntivo per assicurarsi che il codice dell'app sia firmato correttamente. Il profilo di provisioning usato deve contenere un ID app con la funzionalità necessaria abilitata. Per informazioni su come procedere, vedere la guida Uso delle funzionalità.

Importante

Il file Entitlements.plist consente di inserire le proprietà corrette per un'applicazione usando le funzionalità, ma non riesce a generare un profilo di provisioning perché non è collegato a un account per sviluppatore Apple. Sarà tuttavia necessario generare un profilo di provisioning usando il portale per sviluppatori per distribuire l'applicazione.

Impostare gli entitlement in un progetto Xamarin.iOS

Durante la definizione dell'ID app, oltre a selezionare e configurare i servizi dell'applicazione richiesti, è anche necessario configurare gli entitlement nel progetto Xamarin.iOS modificando i file Info.plist e Entitlements.plist.

Per configurare gli entitlement in Visual Studio per Mac, seguire questa procedura:

  1. Nel riquadro Della soluzione fare doppio clic sul file Info.plist per aprirlo.

  2. Nella sezione Identità immettere un nome per l'applicazione e immettere l'identificatore bundle creato al momento della definizione dell'ID app:

    Enter a Bundle Identifier

  3. Salvare le modifiche apportate al file Info.plist.

  4. Nel riquadro Della soluzione fare doppio clic sul file Entitlements.plist per aprirlo per la modifica:

    Editing the Entitlements

  5. Selezionare e configurare gli entitlement richiesti per l'applicazione Xamarin.iOS in modo che corrispondano alla configurazione definita durante la creazione dell'ID app.

  6. Salvare le modifiche apportate al file Entitlements.plist.

Aggiunta di un nuovo file Entitlements.plist

Gli entitlement vengono aggiunti a un'app tramite il file Entitlements.plist. Questo file è incluso nel progetto Xamarin.iOS per impostazione predefinita, ma potrebbe mancare nei progetti meno recenti.

Per aggiungere un file Entitlements.plist a Xamarin.iOS, seguire questa procedura:

  1. Fare clic con il pulsante destro del mouse sul file di progetto e scegliere Aggiungi > nuovo file...:

    Add Files context menu

  2. Nella finestra di dialogo Nuovo file selezionare Elenco proprietà iOS > e denominarlo Entitlements:

    New File dialog

Informazioni di riferimento sulle chiavi degli entitlement

Le chiavi degli entitlement possono essere aggiunte tramite il pannello Source (Origine) dell'editor Entitlements.plist. Le chiavi necessarie vengono in genere aggiunte quando si usa l'editor Entitlements.plist, ma sono elencate sotto come riferimento.

Portafoglio

  • Descrizione: conosciuta comunemente come Passbook, Wallet è un'app per l'archiviazione e la gestione dei pass. Questi pass possono essere carte di credito, carte cliente, carte d'imbarco o biglietti.

    • Identificatore tipo di pass
      • Chiavi: com.apple.developer.pass-type-identifiers
      • Stringa: $(TeamIdentifierPrefix)*
  • Note:

    • Permetterà all'app di consentire tutti i tipi di pass. Per limitare l'app e consentire solo un subset di tipi di pass per il team, impostare il valore della stringa su: $(TeamIdentifierPrefix)pass.$(CFBundleIdentifier)

    Dove pass.$(CFBundleIdentifier) è l'ID del pass creato sopra

iCloud

  • Descrizione: iCloud offre agli utenti iOS un modo semplice e pratico per archiviare contenuti e condividerli tra i dispositivi. Gli sviluppatori possono usare iCloud in quattro modi per offrire ai propri utenti un mezzo di archiviazione: archiviazione chiave-valore, archiviazione UIDocument, CoreData e uso diretto di CloudKit per l'archiviazione di singoli file e directory. Per altre informazioni su questi argomenti, vedere la guida introduttiva a iCloud.

    • Documenti iCloud e CloudKit
      • Chiavi: com.apple.developer.ubiquity-container-identifiers
      • Stringa: $(TeamIdentifierPrefix)$(CFBundleIdentifier)
    • Archiviazione chiave-valore iCloud
      • Chiave: com.apple.developer.ubiquity-kvstore-identifier
      • Stringa: $(TeamIdentifierPrefix)$(CFBundleIdentifier)
  • Note:

    • La $(TeamIdentifierPrefix) stringa può essere individuata accedendo a developer.apple.com e visitando il Riepilogo account sviluppatore del Centro >> membri per ottenere l'ID team (o ID singolo per singoli sviluppatori). Sarà una stringa di 10 caratteri (ad esempio, A93A5CM278).
    • La stringa $(CFBundleIdentifier) inizia con iCloud e viene impostata quando il contenitore iCloud viene creato seguendo i passaggi della guida Uso delle funzionalità.
    • Si possono usare i segnaposto $(TeamIdentifierPrefix) e $(CFBundleIdentifier) che verranno sostituiti con i valori corretti in fase di compilazione.

Importante

Apple fornisce strumenti per aiutare gli sviluppatori a gestire correttamente il Regolamento generale sulla protezione dei dati (GDPR) dell'Unione Europea.

Gruppi di app

  • Descrizione: un gruppo di app consente a diverse applicazioni o a un'applicazione e alle relative estensioni di accedere a un percorso di archiviazione file condiviso.

    • Chiave: com.apple.security.application-groups
    • Stringa: group.$(CFBundleIdentifier)

Apple Pay

  • Descrizione: Apple Pay consente agli utenti di pagare beni tramite il dispositivo iOS.
    • Chiave: com.apple.developer.in-app-payments
    • Stringa: merchant.your.mechantid

Notifiche push

  • Chiave: aps-environment
  • Stringa: development oppure production

Siri

  • Descrizione: SiriKit consente a un'app iOS di fornire servizi accessibili a Siri e all'app Mappe su un dispositivo iOS usando le estensioni app e i nuovi framework Intent e Interfaccia utente Intent. Per altre informazioni, vedere la guida introduttiva a SiriKit.
    • Chiave: com.apple.developer.siri

VPN personale

  • Chiave: com.apple.developer.networking.vpn.api
  • Stringa: allow-vpn

Condivisione del keychain

  • Descrizione: la condivisione del keychain consente agli sviluppatori di app di condividere le password archiviate nel keychain di un dispositivo con le altre app sviluppate dallo stesso team. L'accesso può essere limitato passando un identificatore di gruppo di accesso keychain nella stringa.
    • Chiave: keychain-access-groups
    • Stringa: $(AppIdentifierPrefix) $(CFBundleIdentifier)

Audio Inter-App

  • Descrizione: Audio Inter-App consente agli sviluppatori di trasmettere l'audio tra le app.
    • Chiave: inter-app-audio
    • Valore booleano: YES

Domini associati

  • Descrizione: i domini associati che devono essere gestiti come collegamenti universali devono essere passati con questo entitlement. I collegamenti universali possono essere implementati per consentire il deep linking tra l'app e il sito Web. È consigliabile specificare una voce per ogni dominio supportato dall'app e ogni voce deve iniziare con applinks:
    • Chiave: com.apple.developer.associated-domains
    • Stringa: webcredentials:example.com

Protezione dei dati

  • Descrizione: l'abilitazione della protezione dati usa l'hardware di crittografia predefinito per archiviare i dati sensibili usati nell'app in un formato crittografato. Per impostazione predefinita, il livello di protezione viene impostato sulla protezione completa, in cui i file sono accessibili solo quando il dispositivo è sbloccato.
    • Chiave: com.apple.developer.default-data-protection
    • Stringa: NSFileProtectionComplete

HomeKit

  • Descrizione: il framework HomeKit fornisce una piattaforma per l'impostazione, la configurazione e la gestione dei dispositivi di domotica supportati da un solo dispositivo iOS. Per altre informazioni sull'uso di HomeKit, vedere la guida introduttiva a HomeKit.
    • Chiave: com.apple.developer.homekit
    • Valore booleano: YES

HealthKit

  • Descrizione: HealthKit è un framework introdotto in iOS 8 che fornisce un archivio dati centralizzato, coordinato e sicuro per le informazioni relative alla salute. Per altre informazioni sull'uso di HealthKit, vedere la guida introduttiva a HealthKit.
    • Chiave: com.apple.developer.healthkit
    • Valore booleano: YES

Configurazione accessori wireless

  • Descrizione: l'uso della configurazione accessori wireless consente all'app di configurare gli accessori Wi-Fi MFi
    • Chiave: com.apple.external-accessory.wireless-configuration
    • Valore booleano: YES

ClassKit

  • Descrizione: ClassKit consente ai docenti di visualizzare l'avanzamento degli studenti nelle attività assegnate nell'app.
    • Key: com.apple.developer.ClassKit-environment
    • Stringa: development oppure production

Riepilogo

Questa guida ha illustrato gli entitlement e come usarli in Visual Studio per Mac e in Visual Studio. Ha anche fornito informazioni di riferimento sulle coppie chiave/valore per ogni funzionalità.