Guida per gli sviluppatori di Microsoft Intune App SDK per iOSMicrosoft Intune App SDK for iOS developer guide

Nota

Può essere utile leggere prima l'articolo Introduzione a Microsoft Intune App SDK, che spiega come preparare l'integrazione in ogni piattaforma supportata.Consider reading the Get Started with Intune App SDK Guide article, which explains how to prepare for integration on each supported platform.

Microsoft Intune App SDK per iOS consente di integrare i criteri di protezione delle app di Intune, noti anche comecriteri APP o MAM, nell'app iOS nativa.The Microsoft Intune App SDK for iOS lets you incorporate Intune app protection policies (also known as APP or MAM policies) into your native iOS app. Un'applicazione abilitata per la gestione delle applicazioni mobili è un'applicazione integrata con Intune App SDK.A MAM-enabled application is one that is integrated with the Intune App SDK. Gli amministratori IT possono distribuire i criteri di protezione all'app per dispositivi mobili quando Intune gestisce attivamente l'app.IT administrators can deploy app protection policies to your mobile app when Intune actively manages the app.

PrerequisitiPrerequisites

  • È necessario un computer Mac OS che esegua OS X 10.8.5 o versione successiva e in cui sia installato Xcode 9 o versione successiva.You will need a Mac OS computer that runs OS X 10.8.5 or later and has the Xcode 9 or later installed.

  • L'app deve essere destinata a iOS 9.3.5 o versione successiva.Your app must be targeted for iOS 9.3.5 or above.

  • Rivedere le Condizioni di licenza di Intune App SDK per iOS.Review the Intune App SDK for iOS License Terms. Stampare e conservare una copia delle condizioni di licenza.Print and retain a copy of the license terms for your records. Scaricando e usando Intune App SDK per iOS, l'utente accetta tali condizioni di licenza.By downloading and using the Intune App SDK for iOS, you agree to such license terms. Se non vengono accettate, non usare il software.If you do not accept them, do not use the software.

  • Scaricare i file per Intune App SDK per iOS in GitHub.Download the files for the Intune App SDK for iOS on GitHub.

Contenuto dell'SDKWhat’s in the SDK

Intune App SDK per iOS include una libreria statica, file di risorse, intestazioni API, un file con estensione plist di impostazioni di debug e uno strumento di configurazione.The Intune App SDK for iOS includes a static library, resource files, API headers, a debug settings .plist file, and a configurator tool. Le app per dispositivi mobili possono includere semplicemente i file di risorse e un collegamento statico alle librerie per l'applicazione della maggior parte dei criteri.Mobile apps might simply include the resource files and statically link to the libraries for most policy enforcement. Le funzionalità MAM di Intune avanzate vengono applicate tramite API.Advanced Intune MAM features are enforced through APIs.

Questa guida illustra l'uso dei componenti seguenti di Intune App SDK per iOS:This guide covers the use of the following components of the Intune App SDK for iOS:

  • libIntuneMAM.a: libreria statica di Intune App SDK.libIntuneMAM.a: The Intune App SDK static library. Se l'app non usa le estensioni, collegare la libreria al progetto per abilitare l'app per la gestione delle applicazioni mobili di Intune.If your app does not use extensions, link this library to your project to enable your app for Intune mobile application management.

  • IntuneMAM.framework: framework di Intune App SDK.IntuneMAM.framework: The Intune App SDK framework. Collegare questo framework al progetto per abilitare l'app per la gestione delle applicazioni mobili di Intune.Link this framework to your project to enable your app for Intune mobile application management. Usare il framework anziché la libreria statica se l'app usa estensioni, in modo che il progetto non crei più copie della libreria statica.Use the framework instead of the static library if your app uses extensions, so that your project does not create multiple copies of the static library.

  • IntuneMAMResources.bundle: bundle di risorse contenente le risorse usate dall'SDK.IntuneMAMResources.bundle: A resource bundle that has resources that the SDK relies on.

  • Intestazioni: espongono le API di Intune App SDK.Headers: Exposes the Intune App SDK APIs. Se si usa un'API, è necessario includere il file di intestazione contenente l'API.If you use an API, you will need to include the header file that contains the API. I file di intestazione seguenti includono API, tipi di dati e protocolli resi disponibili agli sviluppatori da Intune App SDK:The following header files include the APIs, data types, and protocols which the Intune App SDK makes available to developers:

    • IntuneMAMAppConfig.hIntuneMAMAppConfig.h
    • IntuneMAMAppConfigManager.hIntuneMAMAppConfigManager.h
    • IntuneMAMDataProtectionInfo.hIntuneMAMDataProtectionInfo.h
    • IntuneMAMDataProtectionManager.hIntuneMAMDataProtectionManager.h
    • IntuneMAMDefs.hIntuneMAMDefs.h
    • IntuneMAMEnrollmentDelegate.hIntuneMAMEnrollmentDelegate.h
    • IntuneMAMEnrollmentManager.hIntuneMAMEnrollmentManager.h
    • IntuneMAMEnrollmentStatus.hIntuneMAMEnrollmentStatus.h
    • IntuneMAMFileProtectionInfo.hIntuneMAMFileProtectionInfo.h
    • IntuneMAMFileProtectionManager.hIntuneMAMFileProtectionManager.h
    • IntuneMAMLogger.hIntuneMAMLogger.h
    • IntuneMAMPolicy.hIntuneMAMPolicy.h
    • IntuneMAMPolicyDelegate.hIntuneMAMPolicyDelegate.h
    • IntuneMAMPolicyManager.hIntuneMAMPolicyManager.h
    • IntuneMAMVersionInfo.hIntuneMAMVersionInfo.h

Gli sviluppatori possono rendere disponibile il contenuto di tutte le intestazioni importando IntuneMAM.hDevelopers can make the contents of all the above headers available by just importing IntuneMAM.h

Funzionamento di Intune App SDKHow the Intune App SDK works

L'obiettivo di Intune App SDK per iOS è quello di aggiungere funzionalità di gestione per le applicazioni iOS con modifiche minime al codice.The objective of the Intune App SDK for iOS is to add management capabilities to iOS applications with minimal code changes. Riducendo la quantità di modifiche al codice, si accelerano i tempi di immissione sul mercato, preservando nel contempo la coerenza e la stabilità dell'applicazione per dispositivi mobili.The fewer the code changes, the less time to market--without affecting the consistency and stability of your mobile application.

Compilare l'SDK nell'app per dispositivi mobiliBuild the SDK into your mobile app

Per abilitare Intune App SDK, seguire questa procedura:To enable the Intune App SDK, follow these steps:

  1. Opzione 1 (consigliata): collegare IntuneMAM.framework al progetto.Option 1 (recommended): Link IntuneMAM.framework to your project. Trascinare IntuneMAM.framework nell'elenco Embedded Binaries (File binari incorporati) della destinazione del progetto.Drag IntuneMAM.framework to the Embedded Binaries list of the project target.

    Nota

    Se si usa il framework, prima di inviare l'app all'App Store, è necessario eliminare manualmente le architetture del simulatore dal framework universale.If you use the framework, you must manually strip out the simulator architectures from the universal framework before you submit your app to the App Store. Per altri dettagli, vedere Inviare l'app all'App Store.See Submit your app to the App Store for more details.

    Opzione 2: eseguire il collegamento alla libreria libIntuneMAM.a.Option 2: Link to the libIntuneMAM.a library. Trascinare la libreria libIntuneMAM.a e rilasciarla nell'elenco Linked Frameworks and Libraries (Framework e librerie collegate) della destinazione del progetto.Drag the libIntuneMAM.a library to the Linked Frameworks and Libraries list of the project target.

    Intune App SDK iOS: framework e librerie collegati

    Aggiungere -force_load {PATH_TO_LIB}/libIntuneMAM.a in una delle posizioni seguenti, sostituendo {PATH_TO_LIB} con il percorso di Intune App SDK:Add -force_load {PATH_TO_LIB}/libIntuneMAM.a to either of the following, replacing {PATH_TO_LIB} with the Intune App SDK location:

    • Impostazione di configurazione della build OTHER_LDFLAGS del progettoThe project’s OTHER_LDFLAGS build configuration setting

    • Opzione Other Linker Flags (Altri contrassegni del linker) nell'interfaccia utente di XcodeThe Xcode UI’s Other Linker Flags

      Nota

      Per trovare PATH_TO_LIB, selezionare il file libIntuneMAM.a e scegliere Get Info (Ottieni informazioni) dal menu File.To find PATH_TO_LIB, select the file libIntuneMAM.a and choose Get Info from the File menu. Copiare e incollare le informazioni indicate in Where (Dove), ovvero il percorso, dalla sezione General (Generale) della finestra Info (Informazioni).Copy and paste the Where information (the path) from the General section of the Info window.

      Aggiungere il bundle di risorse IntuneMAMResources.bundle al progetto trascinandolo in Copy Bundle Resources (Copia le risorse del bundle) in Build Phases (Crea fasi).Add the IntuneMAMResources.bundle resource bundle to the project by dragging the resource bundle under Copy Bundle Resources within Build Phases.

      Intune App SDK iOS: opzione Copy Bundle Resources (Copia le risorse del bundle)

  2. Aggiungere i framework iOS seguenti al progetto:Add these iOS frameworks to the project:

    • MessageUI.frameworkMessageUI.framework
    • Security.frameworkSecurity.framework
    • MobileCoreServices.frameworkMobileCoreServices.framework
    • SystemConfiguration.frameworkSystemConfiguration.framework
    • libsqlite3.tbdlibsqlite3.tbd
    • libc++.tbdlibc++.tbd
    • ImageIO.frameworkImageIO.framework
    • LocalAuthentication.frameworkLocalAuthentication.framework
    • AudioToolbox.frameworkAudioToolbox.framework
    • QuartzCore.frameworkQuartzCore.framework
    • WebKit.frameworkWebKit.framework
  3. Abilitare la condivisione Keychain, se non è già abilitata, facendo clic su Capabilities (Funzionalità) in ogni destinazione del progetto e abilitando l'opzione Keychain Sharing (Condivisione Keychain).Enable keychain sharing (if it isn't already enabled) by choosing Capabilities in each project target and enabling the Keychain Sharing switch. La condivisione Keychain è necessaria per procedere con il passaggio successivo.Keychain sharing is required for you to proceed to the next step.

    Nota

    Il profilo di provisioning deve supportare i nuovi valori di condivisione Keychain.Your provisioning profile needs to support new keychain sharing values. I gruppi di accesso a Keychain devono supportare un carattere jolly.The keychain access groups should support a wildcard character. Per verificarlo, aprire il file .mobileprovision in un editor di testo, cercare keychain-access-groups e verificare che sia presente un carattere jolly.You can check this by opening the .mobileprovision file in a text editor, searching for keychain-access-groups, and ensuring that you have a wildcard. Ad esempio:For example:

    <key>keychain-access-groups</key>
    <array>
    <string>YOURBUNDLESEEDID.*</string>
    </array>
    
  4. Dopo avere abilitato la condivisione Keychain, completare i passaggi seguenti per creare un gruppo di accesso separato in cui Intune App SDK archivierà i dati.After you enable keychain sharing, follow these steps to create a separate access group in which the Intune App SDK will store its data. È possibile creare un gruppo di accesso a Keychain usando l'interfaccia utente o il file di diritti.You can create a keychain access group by using the UI or by using the entitlements file. Se si usa l'interfaccia utente per creare un gruppo di accesso a Keychain, assicurarsi di eseguire i passaggi seguenti:If you are using the UI to create the keychain access group, make sure to follow the steps below:

    1. Se per l'app per dispositivi mobili non sono definiti gruppi di accesso a Keychain, aggiungere l'ID bundle dell'app come primo gruppo.If your mobile app does not have any keychain access groups defined, add the app’s bundle ID as the first group.

    2. Aggiungere il gruppo di Keychain condiviso com.microsoft.intune.mam ai gruppi di accesso esistenti.Add the shared keychain group com.microsoft.intune.mam to your existing access groups. Questo è il gruppo di accesso usato da Intune App SDK per archiviare i dati.The Intune App SDK uses this access group to store data.

    3. Aggiungere com.microsoft.adalcache ai gruppi di accesso esistenti.Add com.microsoft.adalcache to your existing access groups.

      Intune App SDK per iOS: condivisione Keychain

    4. Se si modifica il file dei diritti direttamente, anziché tramite l'interfaccia utente di Xcode illustrata in precedenza per creare i gruppi di accesso keychain, anteporre il prefisso $(AppIdentifierPrefix) ai gruppi di accesso keychain (Xcode gestisce questo aspetto automaticamente).If you are editing the entitlements file directly, rather than using the Xcode UI shown above to create the keychain access groups, prepend the keychain access groups with $(AppIdentifierPrefix) (Xcode handles this automatically). Ad esempio:For example:

       * `$(AppIdentifierPrefix)com.microsoft.intune.mam`
       * `$(AppIdentifierPrefix)com.microsoft.adalcache`
      

      Nota

      Un file di diritti è un file XML specifico per l'applicazione mobile.An entitlements file is an XML file that's unique to your mobile application. Consente di specificare autorizzazioni e funzionalità speciali nell'app per iOS.It is used to specify special permissions and capabilities in your iOS app. Se l'app non aveva in precedenza un file dei diritti, in seguito all'abilitazione della condivisione del keychain (passaggio 3) Xcode dovrebbe averne generato uno per l'app.If your app did not previously have an entitlements file, enabling keychain sharing (step 3) should have caused Xcode to generate one for your app.

  5. Includere ogni protocollo passato dall'app a UIApplication canOpenURL nella matrice LSApplicationQueriesSchemes del file Info.plist dell'app.Include each protocol that your app passes to UIApplication canOpenURL in the LSApplicationQueriesSchemes array of your app's Info.plist file. Assicurarsi di salvare le modifiche prima di procedere al passaggio successivo.Be sure to save your changes before proceeding to the next step.

  6. Usare lo strumento IntuneMAMConfigurator incluso nel repository SDK per completare la configurazione del file Info.plist dell'app.Use the IntuneMAMConfigurator tool that is included in the SDK repo to finish configuring your app's Info.plist. Lo strumento include 3 parametri:The tool has 3 parameters:

    ProprietàProperty Modo d'usoHow to use it
    - i- i <Path to the input plist>
    - e- e <Path to the entitlements file>
    - o- o (Facoltativo) <Path to the output plist>(Optional) <Path to the output plist>

Se il parametro '-o' viene omesso, il file di input verrà modificato sul posto.If the '-o' parameter is not specified, the input file will be modified in-place. Lo strumento è idempotente e deve essere eseguito di nuovo dopo ogni modifica del file Info.plist o dei diritti dell'app.The tool is idempotent, and should be rerun whenever changes to the app's Info.plist or entitlements have been made. È anche consigliabile scaricare ed eseguire la versione più recente dello strumento quando si aggiorna Intune SDK, nel caso i requisiti di configurazione di Info.plist siano cambiati nella versione più recente.You should also download and run the latest version of the tool when updating the Intune SDK, in case Info.plist config requirements have changed in the latest release.

Nota

Se l'app non usa già FaceID, verificare che la chiave NSFaceIDUsageDescription info.plist sia configurata con un messaggio predefinito.If your app does not use FaceID already, ensure the NSFaceIDUsageDescription info.plist key is configured with a default message. Ciò è necessario affinché iOS possa comunicare all'utente il modo in cui l'app intende usare FaceID.This is required so iOS can let the user know how the app intends to use FaceID. Un'impostazione dei criteri di protezione delle app di Intune consente l'uso di FaceID come metodo di accesso all'app, se configurato dall'amministratore IT.An Intune app protection policy setting allows for FaceID to be used as a method for app access when configured by the IT admin.

Configurare Azure Active Directory Authentication Library (ADAL)Configure Azure Active Directory Authentication Library (ADAL)

Intune App SDK usa Azure Active Directory Authentication Library per lo scenario di autenticazione e avvio condizionale.The Intune App SDK uses Azure Active Directory Authentication Library for its authentication and conditional launch scenarios. Si basa su ADAL anche per registrare l'identità utente con il servizio MAM per la gestione senza scenari di registrazione del dispositivo.It also relies on ADAL to register the user identity with the MAM service for management without device enrollment scenarios.

ADAL richiede in genere che le app eseguano la registrazione ad Azure Active Directory (AAD) e ottengano un ID univoco (ID client) e altri identificatori per garantire la sicurezza dei token concessi all'app.Typically, ADAL requires apps to register with Azure Active Directory (AAD) and get a unique ID (Client ID) and other identifiers, to guarantee the security of the tokens granted to the app. Se non diversamente specificato, Intune App SDK usa i valori di registrazione predefiniti per contattare Azure AD.Unless otherwise specified, the Intune App SDK uses default registration values when it contacts Azure AD.

Se l'app usa già ADAL per l'autenticazione degli utenti, l'app deve usare i valori di registrazione esistenti ed eseguire l'override dei valori predefiniti di Intune App SDK.If your app already uses ADAL to authenticate users, the app must use its existing registration values and override the Intune App SDK default values. In questo modo agli utenti non viene richiesta la doppia autenticazione, una di Intune App SDK e una dell'app.This ensures that users are not prompted for authentication twice (once by the Intune App SDK and once by the app).

IndicazioniRecommendations

È consigliabile collegare l'app alla versione più recente di ADAL nel ramo master.It is recommended that your app links to the latest version of ADAL on its master branch. Intune App SDK usa attualmente il ramo broker di ADAL per supportare le app che richiedono l'accesso condizionale.The Intune App SDK currently uses the broker branch of ADAL to support apps that require conditional access. Queste app dipendono di conseguenza dall'app Microsoft Authenticator. Tuttavia, l'SDK è ancora compatibile con il ramo master di ADAL.(These apps therefore depend on the Microsoft Authenticator app.) But the SDK is still compatible with the master branch of ADAL. Usare il ramo più adatto all'app.Use the branch that is appropriate for your app.

Seguire questa procedura per collegare l'app ai file binari di ADAL:Follow the steps below to link your app to the ADAL binaries:

  1. Scaricare Azure Active Directory Authentication Library (ADAL) for Objective-C da GitHub e quindi seguire le istruzioni su come scaricare ADAL usando i moduli secondari Git o CocoaPods.Download the Azure Active Directory Authentication Library (ADAL) for Objective-C from GitHub, then follow the instructions on how to download ADAL using Git submodules or CocoaPods.

  2. Aggiungere il framework ADAL (opzione 1) o una libreria statica (opzione 2) al progetto:Add the the ADAL framework (option 1) or static library (option 2) to your project:

    Opzione 1 (consigliata): trascinare ADAL.framework nell'elenco Embedded Binaries (File binari incorporati) della destinazione del progetto.Option 1 (recommended): Drag ADAL.framework to the Embedded Binaries list of the project target.

    Opzione 2: trascinare la libreria libADALiOS.a e rilasciarla nell'elenco Linked Frameworks and Libraries (Framework e librerie collegate) della destinazione del progetto.Option 2: Drag the libADALiOS.a library to the Linked Frameworks and Libraries list of the project target. Aggiungere -force_load {PATH_TO_LIB}/libADALiOS.a all'impostazione di configurazione della build OTHER_LDFLAGS del progetto o a Other Linker Flags (Altri contrassegni del linker) nell'interfaccia utente di Xcode.Add -force_load {PATH_TO_LIB}/libADALiOS.a to the project’s OTHER_LDFLAGS build configuration setting or Other Linker Flags in the Xcode UI. PATH_TO_LIB deve essere sostituito con la posizione dei file binari ADAL.PATH_TO_LIB should be replaced with the location of the ADAL binaries.

Per condividere la cache dei token ADAL con altre app firmate con lo stesso profilo di provisioningShare the ADAL token cache with other apps signed with the same provisioning profile?

Per condividere i token di ADAL tra le app firmate con lo stesso profilo di provisioning, seguire le istruzioni seguenti:Follow the instructions below if you want to share ADAL tokens between apps signed with the same provisioning profile:

  1. Se per l'app non sono definiti gruppi di accesso a Keychain, aggiungere l'ID bundle dell'app come primo gruppo.If your app does not have any keychain access groups defined, add the app’s bundle ID as the first group.

  2. Abilitare Single Sign-On (SSO) di ADAL aggiungendo com.microsoft.adalcache ai gruppi di accesso al keychain.Enable ADAL single sign-on (SSO) by adding com.microsoft.adalcache to the keychain access groups.

  3. Se si vuole specificare un gruppo Keychain personalizzato per sostituire com.microsoft.adalcache, specificarlo nel file Info.plist in IntuneMAMSettings usando la chiave ADALCacheKeychainGroupOverride.If you want to specify a custom keychain group to replace com.microsoft.adalcache, specify that in the Info.plist file under IntuneMAMSettings, by using the key ADALCacheKeychainGroupOverride.

Configurare le impostazioni di ADAL per Intune App SDKConfigure ADAL settings for the Intune App SDK

Se l'app usa già ADAL per l'autenticazione e ha impostazioni di ADAL proprie, è possibile forzare l'uso delle stesse impostazioni in Intune App SDK durante l'autenticazione con Azure Active Directory.If your app already uses ADAL for authentication and has its own ADAL settings, you can force the Intune App SDK to use the same settings during authentication against Azure Active Directory. Ciò garantisce che l'app non richieda due volte l'intervento dell'utente per l'autenticazione.This ensures that the app will not double-prompt the user for authentication. Vedere Configurare le impostazioni per Intune App SDK per informazioni sulla compilazione delle impostazioni seguenti:See Configure settings for the Intune App SDK for information on populating the following settings:

  • ADALClientIdADALClientId
  • ADALAuthorityADALAuthority
  • ADALRedirectUriADALRedirectUri
  • ADALRedirectSchemeADALRedirectScheme
  • ADALCacheKeychainGroupOverrideADALCacheKeychainGroupOverride

Se l'app usa già ADAL, sono necessarie le configurazioni seguenti:If your app already uses ADAL, the following configurations are required:

  1. Nel file Info.plist del progetto, in un dizionario IntuneMAMSettings con il nome di chiave ADALClientId, specificare l'ID client da usare per le chiamate ADAL.In the project’s Info.plist file, under the IntuneMAMSettings dictionary with the key name ADALClientId, specify the client ID to be used for ADAL calls.

  2. Nel dizionario IntuneMAMSettings con il nome di chiave ADALAuthority, specificare inoltre l'autorità di Azure AD.Also under the IntuneMAMSettings dictionary with the key name ADALAuthority, specify the Azure AD authority.

  3. Nel dizionario IntuneMAMSettings con il nome di chiave ADALRedirectUri, specificare inoltre l'URI di reindirizzamento da usare per le chiamate a ADAL.Also under the IntuneMAMSettings dictionary with the key name ADALRedirectUri, specify the redirect URI to be used for ADAL calls. In alternativa è possibile specificare ADALRedirectScheme, se l'URI di reindirizzamento dell'applicazione è nel formato scheme://bundle_id.Alternatively, you could specify ADALRedirectScheme instead, if the application's redirect URI is in the format scheme://bundle_id.

Inoltre, le app possono ignorare queste impostazioni di Azure AD in fase di esecuzione.Additionally, apps can override these Azure AD settings at runtime. A tale scopo, impostare semplicemente le proprietà aadAuthorityUriOverride, aadClientIdOverride e aadRedirectUriOverride nell'istanza IntuneMAMPolicyManager.To do this, simply set the aadAuthorityUriOverride, aadClientIdOverride, and aadRedirectUriOverride properties on the IntuneMAMPolicyManager instance.

Nota

L'approccio basato sul file Info.plist è consigliato per tutte le impostazioni statiche, che non è necessario determinare in fase di esecuzione.The Info.plist approach is recommended for all settings which are static and do not need to be determined at runtime. I valori assegnati alle proprietà IntuneMAMPolicyManager hanno la precedenza su qualsiasi altro valore corrispondente specificato nel file Info.plist e verranno mantenuti anche dopo il riavvio dell'app.Values assigned to the IntuneMAMPolicyManager properties take precedence over any corresponding values specified in the Info.plist, and will persist even after the app is restarted. L'SDK continuerà a usarli per le archiviazioni dei criteri finché non viene annullata registrazione dell'utente o fino a quando i valori non vengono cancellati o modificati.The SDK will continue to use them for policy check-ins until the user is unenrolled or the values are cleared or changed.

Se l'applicazione non usa ADALIf your app does not use ADAL

Se l'app non usa ADAL, Intune App SDK specifica i valori predefiniti per i parametri ADAL e gestisce l'autenticazione con Azure AD.If your app does not use ADAL, the Intune App SDK will provide default values for ADAL parameters and handle authentication against Azure AD. Non è necessario specificare valori per le impostazioni ADAL elencate in precedenza.You do not have to specify any values for the ADAL settings listed above.

Ricezione dei criteri di protezione delle appReceiving app protection policy

PanoramicaOverview

Per ricevere i criteri di protezione delle app di Intune, le app devono avviare una richiesta di registrazione nel servizio MAM di Intune.To receive Intune app protection policy, apps must initiate an enrollment request with the Intune MAM service. Le app possono essere configurate nella console di Intune per ricevere i criteri di protezione delle app con o senza registrazione del dispositivo.Apps can be configured in the Intune console to receive app protection policy with or without device enrollment. I criteri di protezione delle app senza registrazione, noti anche come APP-WE o MAM-WE, consentono la gestione delle app in Intune senza richiedere la registrazione del dispositivo nella gestione dei dispositivi mobili (MDM) di Intune.App protection policy without enrollment, also known as APP-WE or MAM-WE, allows apps to be managed by Intune without the need for the device to be enrolled in Intune mobile device management (MDM). In entrambi i casi, la registrazione nel servizio MAM di Intune è obbligatoria per ricevere i criteri.In both cases, enrolling with the Intune MAM service is required to receive policy.

App che usano ADALApps that use ADAL

Le app che usano già ADAL devono chiamare il metodo registerAndEnrollAccount sull'istanza IntuneMAMEnrollmentManager dopo che l'utente è stato autenticato:Apps which already use ADAL should call the registerAndEnrollAccount method on the IntuneMAMEnrollmentManager instance after the user has been successfully authenticated:

/*
 *  This method will add the account to the list of registered accounts.
 *  An enrollment request will immediately be started.
 *  @param identity The UPN of the account to be registered with the SDK
 */

(void)registerAndEnrollAccount:(NSString *)identity;

Chiamando il metodo registerAndEnrollAccount, l'SDK registra l'account utente e prova a registrare l'app per conto di questo account.By calling the registerAndEnrollAccount method, the SDK will register the user account and attempt to enroll the app on behalf of this account. Se la registrazione non riesce per qualsiasi motivo, l'SDK riproverà automaticamente la registrazione dopo 24 ore.If the enrollment fails for any reason, the SDK will automatically retry the enrollment 24 hours later. A scopo di debug, l'app può ricevere notifiche sui risultati di tutte le richieste di registrazione attraverso un delegato.For debugging purposes, the app can receive notifications, via a delegate, about the results of any enrollment requests.

Dopo aver richiamato l'API, l'app può continuare a funzionare normalmente.After this API has been invoked, the app can continue to function as normal. Se la registrazione riesce, l'SDK notificherà all'utente che è necessario un riavvio dell'app.If the enrollment succeeds, the SDK will notify the user that an app restart is required. A questo punto, l'utente può riavviare l'app.At that time, the user can immediately restart the app.

[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccount:@”user@foo.com”];

App che non usano ADALApps that do not use ADAL

Le app che non eseguono l'accesso utente con ADAL possono comunque ricevere i criteri di protezione delle app dal servizio MAM di Intune chiamando l'API, perché l'autenticazione sia gestita dall'SDK.Apps that do not sign in the user using ADAL can still receive app protection policy from the Intune MAM service by calling the API to have the SDK handle that authentication. Le app devono usare questa tecnica quando l'utente non è stato autenticato con Azure AD, ma è comunque necessario recuperare i criteri di protezione delle app per proteggere i dati.Apps should use this technique when they have not authenticated a user with Azure AD but still need to retrieve app protection policy to help protect data. Ad esempio, viene applicata quando viene usato un altro servizio di autenticazione per l'accesso dell'app o se l'app non supporta l'accesso.An example is if another authentication service is being used for app sign-in, or if the app does not support signing in at all. A tale scopo, l'applicazione deve chiamare il metodo loginAndEnrollAccount sull'istanza IntuneMAMEnrollmentManager:To do this, the application should call the loginAndEnrollAccount method on the IntuneMAMEnrollmentManager instance:

/**
 *  Creates an enrollment request which is started immediately.
 *  If no token can be retrieved for the identity, the user will be prompted
 *  to enter their credentials, after which enrollment will be retried.
 *  @param identity The UPN of the account to be logged in and enrolled.
 */
 (void)loginAndEnrollAccount: (NSString *)identity;

Chiamando questo metodo, l'SDK chiederà le credenziali dell'utente se non viene trovato alcun token esistente.By calling this method, the SDK will prompt the user for credentials if no existing token can be found. L'SDK proverà quindi a registrare l'app nel servizio MAM di Intune per conto dell'account utente specificato.The SDK will then try to enroll the app with the Intune MAM service on behalf of the supplied user account. Il metodo può essere chiamato con l'identità "nil".The method can be called with "nil" as the identity. In questo caso l'SDK eseguirà la registrazione con l'utente gestito esistente nel dispositivo (nel caso di MDM) o chiederà di specificare un nome se non trova utenti esistenti.In that case, the SDK will enroll with the existing managed user on the device (in the case of MDM), or prompt the user for a user name if no existing user is found.

Se la registrazione ha esito negativo, l'app deve prendere in considerazione la necessità di chiamare l'API in un secondo momento, a seconda dei dettagli dell'errore.If the enrollment fails, the app should consider calling this API again at a future time, depending on the details of the failure. L'app può ricevere le notifiche sui risultati delle richieste di registrazione attraverso un delegato.The app can receive notifications, via a delegate, about the results of any enrollment requests.

Dopo aver chiamato l'API, l'app può continuare a funzionare normalmente.After this API has been invoked, the app can continue functioning as normal. Se la registrazione riesce, l'SDK notificherà all'utente che è necessario un riavvio dell'app.If the enrollment succeeds, the SDK will notify the user that an app restart is required.

Esempio:Example:

[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@”user@foo.com”];

Annullare la registrazione degli account utenteDeregister user accounts

Prima della disconnessione di un utente da un'app, questa deve annullare la registrazione dell'utente dall'SDK.Before a user is signed out of an app, the app should deregister the user from the SDK. In questo modo:This will ensure:

  1. Non si verificheranno nuovi tentativi di registrazione per l'account utente.Enrollment retries will no longer happen for the user’s account.

  2. I criteri di protezione delle app verranno rimossi.App protection policy will be removed.

  3. Se l'app avvia una cancellazione selettiva (facoltativa), tutti i dati aziendali vengono eliminati.If the app initiates a selective wipe (optional), any corporate data is deleted.

Prima della disconnessione dell'utente, l'app deve chiamare il metodo seguente sull'istanza IntuneMAMEnrollmentManager:Before the user is signed out, the app should call the following method on the on the IntuneMAMEnrollmentManager instance:

/*
 *  This method will remove the provided account from the list of
 *  registered accounts.  Once removed, if the account has enrolled
 *  the application, the account will be un-enrolled.
 *  @note In the case where an un-enroll is required, this method will block
 *  until the Intune MAM AAD token is acquired, then return.  This method must be called before  
 *  the user is removed from the application (so that required AAD tokens are not purged
 *  before this method is called).
 *  @param identity The UPN of the account to be removed.
 *  @param doWipe   If YES, a selective wipe if the account is un-enrolled
 */
(void)deRegisterAndUnenrollAccount:(NSString *)identity withWipe:(BOOL)doWipe;

Questo metodo deve essere chiamato prima che i token di Azure AD dell'account utente vengano eliminati.This method must be called before the user account’s Azure AD tokens are deleted. L'SDK richiede che i token AAD dell'account utente inviino richieste specifiche al servizio MAM di Intune per conto dell'utente.The SDK needs the user account’s AAD token(s) to make specific requests to the Intune MAM service on behalf of the user.

Se l'app eliminerà i dati aziendali dell'utente in modo autonomo, il contrassegno doWipe può essere impostato su false.If the app will delete the user’s corporate data on its own, the doWipe flag can be set to false. In caso contrario, l'SDK può avviare automaticamente una cancellazione selettiva.Otherwise, the app can have the SDK initiate a selective wipe. Ciò comporta una chiamata al delegato per la cancellazione selettiva dell'app.This will result in a call to the app's selective wipe delegate.

Esempio:Example:

[[IntuneMAMEnrollmentManager instance] deRegisterAndUnenrollAccount:@”user@foo.com” withWipe:YES];

Notifiche di stato, risultato e debugStatus, result, and debug notifications

L'app può ricevere notifiche di stato, risultato e debug sulle richieste seguenti al servizio MAM di Intune:The app can receive status, result, and debug notifications about the following requests to the Intune MAM service:

  • Richieste di registrazioneEnrollment requests
  • Richieste di aggiornamento dei criteriPolicy update requests
  • Richieste di annullamento della registrazioneUnenrollment requests

Le notifiche vengono presentate tramite metodi delegato in Headers/IntuneMAMEnrollmentDelegate.h:The notifications are presented via delegate methods in Headers/IntuneMAMEnrollmentDelegate.h:

/**
 *  Called when an enrollment request operation is completed.
 * @param status status object containing debug information
 */

(void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;

/**
 *  Called when a MAM policy request operation is completed.
 *  @param status status object containing debug information
 */
(void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;

/**
 *  Called when a un-enroll request operation is completed.
 *  @Note: when a user is un-enrolled, the user is also de-registered with the SDK
 *  @param status status object containing debug information
 */

(void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;

Questi metodi delegato restituiscono un oggetto IntuneMAMEnrollmentStatus che contiene le informazioni seguenti:These delegate methods return an IntuneMAMEnrollmentStatus object that has the following information:

  • Identità dell'account associate alla richiestaThe identity of the account associated with the request
  • Codice di stato che indica il risultato della richiestaA status code that indicates the result of the request
  • Stringa di errore con una descrizione del codice di statoAn error string with a description of the status code
  • Oggetto NSErrorAn NSError object

Questo oggetto viene definito in IntuneMAMEnrollmentStatus.h con gli specifici codici di stato che possono essere restituiti.This object is defined in IntuneMAMEnrollmentStatus.h, along with the specific status codes that can be returned.

Codice di esempioSample code

Di seguito sono illustrate implementazioni di esempio dei metodi delegato:These are example implementations of the delegate methods:

- (void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus *)status
{
    NSLog(@"enrollment result for identity %@ with status code %ld", status.identity, (unsigned long)status.statusCode);
    NSLog(@"Debug Message: %@", status.errorString);
}


- (void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus *)status
{
    NSLog(@"policy check-in result for identity %@ with status code %ld", status.identity, (unsigned long)status.statusCode);
    NSLog(@"Debug Message: %@", status.errorString);
}

- (void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus *)status
{
    NSLog(@"un-enroll result for identity %@ with status code %ld", status.identity, (unsigned long)status.statusCode);
    NSLog(@"Debug Message: %@", status.errorString);
}

Riavvio dell'appApp restart

Quando un'app riceve i criteri di protezione delle app per la prima volta, deve riavviarsi per applicare gli hook obbligatori.When an app receives app protection policies for the first time, it must restart to apply the required hooks. Per comunicare all'app che è necessario un riavvio, l'SDK offre un metodo delegato in Headers/IntuneMAMPolicyDelegate.h.To notify the app that a restart needs to happen, the SDK provides a delegate method in Headers/IntuneMAMPolicyDelegate.h.

 - (BOOL) restartApplication

Il valore restituito da questo metodo indica all'SDK se l'applicazione deve gestire il riavvio richiesto:The return value of this method tells the SDK if the application must handle the required restart:

  • Se viene restituito true, l'applicazione deve gestire il riavvio.If true is returned, the application must handle the restart.

  • Se viene restituito false, l'SDK riavvierà l'applicazione.If false is returned, the SDK will restart the application after this method returns. L'SDK visualizzerà immediatamente una finestra di dialogo per indicare all'utente che è necessario riavviare l'applicazione.The SDK will immediately show a dialog box that tells the user to restart the application.

Personalizzare il comportamento dell'appCustomize your app's behavior

Intune App SDK include varie API che è possibile chiamare per ottenere informazioni sui criteri di protezione delle app di Intune distribuiti all'app.The Intune App SDK has several APIs you can call to get information about the Intune app protection policy deployed to the app. È possibile usare questi dati per personalizzare il comportamento dell'app.You can use this data to customize your app's behavior. La maggior parte delle impostazioni dei criteri di protezione delle app viene applicata automaticamente dall'SDK e non dall'applicazione.Most app protection policy settings are automatically enforced by the SDK and not the application. L'unica impostazione che deve implementare l'app è il controllo di salvataggio.The only setting that the app should implement is the Save-as control.

Ottenere i criteri di protezione delle appGet app protection policy

IntuneMAMPolicyManager.hIntuneMAMPolicyManager.h

La classe IntuneMAMPolicyManager espone i criteri di protezione delle app di Intune distribuiti all'applicazione.The IntuneMAMPolicyManager class exposes the Intune app protection policy deployed to the application. In particolare, espone le API utili per l'abilitazione di identità multiple.Notably, it exposes APIs that are useful for Enabling multi-identity.

IntuneMAMPolicy.hIntuneMAMPolicy.h

La classe IntuneMAMPolicy espone i criteri di protezione delle app di Intune distribuiti all'applicazione.The IntuneMAMPolicy class exposes the Intune app protection policy deployed to the application. La maggior parte delle impostazioni dei criteri esposte in questa classe viene applicata dall'SDK, ma è sempre possibile personalizzare il comportamento dell'app in base alla modalità di applicazione delle impostazioni dei criteri.Most the policy settings exposed in this class are enforced by the SDK, but you can always customize your app's behavior based on how policy settings are enforced.

Questa classe espone alcune API necessarie per implementare i controlli di salvataggio, descritti in dettaglio nella sezione successiva.This class exposes some APIs needed to implement save-as controls, detailed in the next section.

Implementare i controlli di salvataggioImplement save-as controls

Intune consente agli amministratori IT di selezionare le posizioni di archiviazione in cui possono essere salvati i dati di un'app gestita.Intune lets IT admins select which storage locations a managed app can save data to. Le app possono eseguire una query in Intune App SDK per recuperare le posizioni di archiviazione consentite usando l'API isSaveToAllowedForLocation definita in IntuneMAMPolicy.h.Apps can query the Intune App SDK for allowed storage locations by using the isSaveToAllowedForLocation API, defined in IntuneMAMPolicy.h.

Prima di salvare i dati gestiti in un'archiviazione cloud o in percorsi locali, le app devono usare l'API isSaveToAllowedForLocation per verificare se l'amministratore IT ha consentito il salvataggio dei dati in quel percorso.Before apps can save managed data to a cloud-storage or local location, they must check with the isSaveToAllowedForLocation API to know if the IT admin has allowed data to be saved there.

Quando si usa l’API isSaveToAllowedForLocation, le app devono passare l’UPN usato per la posizione di archiviazione, se disponibile.When apps use the isSaveToAllowedForLocation API, they must pass in the UPN for the storage location, if it is available.

Percorsi di salvataggio supportatiSupported save locations

L'API isSaveToAllowedForLocation specifica delle costanti per verificare se l'amministratore IT ha autorizzato il salvataggio dei dati nei percorsi seguenti definiti in IntuneMAMPolicy.h:The isSaveToAllowedForLocation API provides constants to check whether the IT admin permits data to be saved to the following locations defined in IntuneMAMPolicy.h:

  • IntuneMAMSaveLocationOtherIntuneMAMSaveLocationOther
  • IntuneMAMSaveLocationOneDriveForBusinessIntuneMAMSaveLocationOneDriveForBusiness
  • IntuneMAMSaveLocationSharePointIntuneMAMSaveLocationSharePoint
  • IntuneMAMSaveLocationLocalDriveIntuneMAMSaveLocationLocalDrive

Le app devono usare le costanti nell’API isSaveToAllowedForLocation per verificare se i dati possano essere salvati in percorsi considerati "gestiti", come ad esempio OneDrive for Business, o "personali".Apps should use the constants in the isSaveToAllowedForLocation API to check if data can be saved to locations considered "managed," like OneDrive for Business, or "personal." L'API deve essere usata anche quando l'app non riesce a determinare se un percorso è "gestito" o "personale".Additionally, the API should be used when the app can't check whether a location is "managed" or "personal."

I percorsi notoriamente personali sono rappresentati dalla costante IntuneMAMSaveLocationOther.Locations known to be "personal" are represented by the IntuneMAMSaveLocationOther constant.

La costante IntuneMAMSaveLocationLocalDrive deve essere usata quando l'app salva i dati in qualsiasi percorso nel dispositivo locale.The IntuneMAMSaveLocationLocalDrive constant should be used when the app is saving data to any location on the local device.

Configurare le impostazioni per Intune App SDKConfigure settings for the Intune App SDK

Per installare e configurare Intune App SDK è possibile usare il dizionario IntuneMAMSettings incluso nel file Info.plist dell'applicazione.You can use the IntuneMAMSettings dictionary in the application’s Info.plist file to set up and configure the Intune App SDK. Se il dizionario IntuneMAMSettings non è visibile nel file Info.plist, è consigliabile creare un dizionario nel Info.plist dell'app con il nome di campo "IntuneMAMSettings".If the IntuneMAMSettings dictionary is not seen in your Info.plist file, you should create a dictionary in your app's Info.plist with the field name "IntuneMAMSettings."

Nel dizionario IntuneMAMSettings è possibile aggiungere righe con coppie chiave/valore per configurare l'SDK.Under the IntuneMAMSettings dictionary, you can add key/value rows of configuration settings to configure the SDK. La tabella seguente elenca tutte le impostazioni supportate.The table below lists all supported settings.

Alcune di queste impostazioni possono essere state descritte nelle sezioni precedenti e alcune non riguardano tutte le app.Some of these settings might have been covered in previous sections, and some do not apply to all apps.

ImpostazioneSetting TipoType DefinizioneDefinition Necessaria?Required?
ADALClientIdADALClientId StringaString Identificatore del client Azure AD dell'app.The app’s Azure AD client identifier. Obbligatoria se l'app usa ADAL.Required if the app uses ADAL.
ADALAuthorityADALAuthority StringaString Autorità di Azure AD dell'app in uso.The app's Azure AD authority in use. È necessario usare l'ambiente specifico in cui sono stati configurati gli account Azure AD.You should use your own environment where AAD accounts have been configured. Obbligatoria se l'app usa ADAL.Required if the app uses ADAL. Se questo valore è assente, viene usato un valore predefinito di Intune.If this value is absent, an Intune default is used.
ADALRedirectUriADALRedirectUri StringaString URI di reindirizzamento di Azure AD dell'app.The app’s Azure AD redirect URI. L'impostazione ADALRedirectUri o ADALRedirectScheme è obbligatoria se l'app usa ADAL.ADALRedirectUri or ADALRedirectScheme is required if the app uses ADAL.
ADALRedirectSchemeADALRedirectScheme StringaString Schema di reindirizzamento di Azure AD dell'app.The app's Azure AD redirect scheme. Può essere usata al posto di ADALRedirectUri se l'URI di reindirizzamento dell'applicazione è nel formato scheme://bundle_id.This can be used in place of ADALRedirectUri if the application's redirect URI is in the format scheme://bundle_id. L'impostazione ADALRedirectUri o ADALRedirectScheme è obbligatoria se l'app usa ADAL.ADALRedirectUri or ADALRedirectScheme is required if the app uses ADAL.
ADALLogOverrideDisabledADALLogOverrideDisabled BooleanBoolean Specifica se l'SDK indirizzerà tutti i log ADAL, incluse le eventuali chiamate ADAL dall'app, al proprio file di log.Specifies whether the SDK will route all ADAL logs (including ADAL calls from the app, if any) to its own log file. L'impostazione predefinita è NO.Defaults to NO. Impostare il valore su YES se l'app imposta la richiamata al log ADAL.Set to YES if the app will set its own ADAL log callback. FacoltativoOptional.
ADALCacheKeychainGroupOverrideADALCacheKeychainGroupOverride StringaString Specifica il gruppo Keychain da usare per la cache ADAL al posto di "com.microsoft.adalcache".Specifies the keychain group to use for the ADAL cache, instead of “com.microsoft.adalcache." Si noti che non contiene il prefisso app-id.Note that this doesn’t have the app-id prefix. che verrà aggiunto alla stringa specificata in fase di runtime.That will be prefixed to the provided string at runtime. FacoltativoOptional.
AppGroupIdentifiersAppGroupIdentifiers Matrice di stringheArray of string Matrice di gruppi di app della sezione com.apple.security.application-groups dei diritti dell'app.Array of app groups from the app’s entitlements com.apple.security.application-groups section. Necessaria se l'applicazione usa i gruppi di applicazioni.Required if the app uses application groups.
ContainingAppBundleIdContainingAppBundleId StringaString Specifica l'ID bundle dell'applicazione che contiene l'estensione.Specifies the bundle ID of the extension’s containing application. Necessaria per le estensioni iOS.Required for iOS extensions.
DebugSettingsEnabledDebugSettingsEnabled BooleanBoolean Se impostata su Sì, è possibile applicare i criteri di test nell'ambito del bundle delle impostazioni.If set to YES, test policies within the Settings bundle can be applied. Le applicazioni non dovrebbero essere inviate con questa impostazione abilitata.Applications should not be shipped with this setting enabled. FacoltativoOptional.
MainNibFileMainNibFile
MainNibFileipadMainNibFileipad
StringaString Questa impostazione deve avere il nome del file NIB principale dell'applicazione.This setting should have the application’s main nib file name. È obbligatoria se l'applicazione definisce MainNibFile in Info.plist.Required if the application defines MainNibFile in Info.plist.
MainStoryboardFileMainStoryboardFile
MainStoryboardFileipadMainStoryboardFileipad
StringaString Questa impostazione deve avere il nome del file di storyboard principale dell'applicazione.This setting should have the application’s main storyboard file name. È obbligatoria se l'applicazione definisce UIMainStoryboardFile in Info.plist.Required if the application defines UIMainStoryboardFile in Info.plist.
AutoEnrollOnLaunchAutoEnrollOnLaunch BooleanBoolean Specifica se l'app deve tentare di registrarsi automaticamente all'avvio se viene rilevata un'identità gestita esistente e se tale operazione non è ancora stata compiuta.Specifies whether the app should attempt to automatically enroll on launch if an existing managed identity is detected and it has not yet done so. L'impostazione predefinita è NO.Defaults to NO.

Note: se non viene trovata alcuna identità gestita o non è disponibile alcun token valido per l'identità nella cache ADAL, il tentativo di registrazione avrà esito negativo senza chiedere le credenziali, a meno che l'app non abbia configurato anche MAMPolicyRequired su YES.Notes: If no managed identity is found or no valid token for the identity is available in the ADAL cache, the enrollment attempt will silently fail without prompting for credentials, unless the app has also set MAMPolicyRequired to YES.
FacoltativoOptional.
MAMPolicyRequiredMAMPolicyRequired BooleanBoolean Specifica se viene impedito l'avvio dell'app se non ha i criteri di protezione delle app di Intune.Specifies whether the app will be blocked from starting if the app does not have an Intune app protection policy. L'impostazione predefinita è NO.Defaults to NO.

Note: le app non possono essere inviate ad App Store se MAMPolicyRequired è impostato su YES.Notes: Apps cannot be submitted to the App Store with MAMPolicyRequired set to YES. Quando si imposta MAMPolicyRequired su YES, anche AutoEnrollOnLaunch deve essere impostato su YES.When setting MAMPolicyRequired to YES, AutoEnrollOnLaunch should also be set to YES.
FacoltativoOptional.
MAMPolicyWarnAbsentMAMPolicyWarnAbsent BooleanBoolean Specifica se l'app avvisa l'utente durante l'avvio se non ha i criteri di protezione delle app di Intune.Specifies whether the app will warn the user during launch if the app does not have an Intune app protection policy.

Nota: gli utenti potranno ancora usare l'app senza criterio dopo aver ignorato l'avviso.Note: Users will still be allowed to use the app without policy after dismissing the warning.
FacoltativoOptional.
MultiIdentityMultiIdentity BooleanBoolean Specifica se l'app è compatibile con identità multiple.Specifies whether the app is multi-identity aware. FacoltativoOptional.
SplashIconFileSplashIconFile
SplashIconFileipadSplashIconFileipad
StringaString Specifica il file dell'icona per la schermata iniziale (avvio) di Intune.Specifies the Intune splash (startup) icon file. FacoltativoOptional.
SplashDurationSplashDuration NumeroNumber Quantità minima di tempo, in secondi, per la visualizzazione della schermata iniziale di Intune all'avvio dell'applicazione.Minimum amount of time, in seconds, that the Intune startup screen will be shown at application launch. Il valore predefinito è 1,5.Defaults to 1.5. FacoltativoOptional.
BackgroundColorBackgroundColor StringaString Specifica il colore di sfondo per le schermate di avvio e PIN.Specifies the background color for the startup and PIN screens. Accetta una stringa RGB esadecimale nel formato #XXXXXX, dove X può variare da 0 a 9 o da A a F.Accepts a hexadecimal RGB string in the form of #XXXXXX, where X can range from 0-9 or A-F. Il segno di cancelletto può essere omesso.The pound sign might be omitted. FacoltativoOptional. L'impostazione predefinita è grigio chiaro.Defaults to light grey.
ForegroundColorForegroundColor StringaString Specifica il colore di primo piano per le schermate di avvio e PIN, come colore del testo.Specifies the foreground color for the startup and PIN screens, like text color. Accetta una stringa RGB esadecimale nel formato #XXXXXX, dove X può variare da 0 a 9 o da A a F.Accepts a hexadecimal RGB string in the form of #XXXXXX, where X can range from 0-9 or A-F. Il segno di cancelletto può essere omesso.The pound sign might be omitted. FacoltativoOptional. L'impostazione predefinita è nero.Defaults to black.
AccentColorAccentColor StringaString Specifica il colore principale della schermata del PIN, ad esempio il colore del testo del pulsante e il colore di evidenziazione della casella.Specifies the accent color for the PIN screen, like button text color and box highlight color. Accetta una stringa RGB esadecimale nel formato #XXXXXX, dove X può variare da 0 a 9 o da A a F.Accepts a hexadecimal RGB string in the form of #XXXXXX, where X can range from 0-9 or A-F. Il segno di cancelletto può essere omesso.The pound sign might be omitted. FacoltativoOptional. L'impostazione predefinita è blu.Defaults to system blue.
MAMTelemetryDisabledMAMTelemetryDisabled BooleanBoolean Specifica se l'SDK non invierà i dati di telemetria al relativo back-end.Specifies if the SDK will not send any telemetry data to its back end. FacoltativoOptional.
WebViewHandledURLSchemesWebViewHandledURLSchemes Matrice di stringheArray of Strings Specifica gli schemi URL gestiti dalla visualizzazione Web dell'app.Specifies the URL schemes that your app's WebView handles. Obbligatoria se l'app usa una WebView che gestisce gli URL tramite collegamenti e/o JavaScript.Required if your app uses a WebView that handles URLs via links and/or javascript.

Nota

Se l'app verrà rilasciata per l'App Store, MAMPolicyRequired deve essere impostato su "NO" come previsto dagli standard per App Store.If your app will be released to the App Store, MAMPolicyRequired must be set to "NO," per App Store standards.

Condivisione dei dati tramite UIActivityViewControllerSharing Data via UIActivityViewController

A partire dalla versioneStarting v. 8.0.2+, Intune APP SDK potrà filtrare le azioni di UIActivityViewController in modo che nessun percorso di condivisione non Intune sia disponibile per la selezione.8.0.2+, the Intune APP SDK will be able to filter the UIActivityViewController actions so that no non-Intune sharing locations are available to select. Questo comportamento verrà controllato dai criteri di trasferimento dei dati dell'applicazione e da una funzionalità APP futura.This behavior will be controlled by the application data transfer policy and an upcoming APP feature. La funzionalità futura verrà abilitata dopo che alla maggior parte delle applicazioni di Microsoft (ad esempioThe upcoming feature will be enabled after the majority of Microsoft 1st party applications (i.e Word, Excel, PowerPoint) saranno state apportate le modifiche necessarie per supportare la condivisione dei dati tramite UIActivityViewController.Word, Excel, Powerpoint) have made the required changes to support Sharing Data via UIActivityViewController.

Azioni "Copy To" (Copia in)‘Copy To’ actions

Quando si condividono documenti tramite UIActivityViewController e UIDocumentInteractionController, iOS visualizza le azioni "Copy to" (Copia in) per ogni applicazione che supporta l'apertura del documento da condividere.When sharing documents via the UIActivityViewController and UIDocumentInteractionController, iOS displays ‘Copy to’ actions for each application that supports opening the document being shared. Le applicazioni dichiarano tipi di documenti supportati tramite l'impostazione CFBundleDocumentTypes in Info.plist.Applications declare the document types they support through the CFBundleDocumentTypes setting in their Info.plist. Questo tipo di condivisione non sarà più disponibile se i criteri non consentono la condivisione con applicazioni non gestite.This type of sharing will no longer be available if the policy disallows sharing to unmanaged applications. In sostituzione, le applicazioni dovranno aggiungere un'estensione per Azione non dell'interfaccia utente alla propria applicazione e collegarla a Intune APP SDK per iOS.As a replacement, applications will have to add a non-ui Action extension to their application and link it to the Intune APP SDK for iOS. L'estensione per Azione funge da stub.The Action extension acts like a stub. L'SDK implementerà tutto il comportamento di condivisione file.The SDK will implement all of the file sharing behavior. Seguire i passaggi precedenti per l'integrazione dell'SDK, oltre ai seguenti:Follow the SDK integration steps above plus the following:

  1. L'applicazione deve avere almeno un elemento schemeURL definito in CFBundleURLTypes di Info.plist.Your application must have at least one schemeURL defined under its Info.plist CFBundleURLTypes.
  2. L'applicazione e l'estensione per Azione devono condividere almeno un gruppo di app e il gruppo di app deve essere elencato sotto la matrice AppGroupIdentifiers nel dizionario IntuneMAMSettings dell'app e dell'estensione.Your application and action extension must share at least one App Group and the App Group must be listed under the AppGroupIdentifiers array under the app and extension IntuneMAMSettings dictionary.
  3. Assegnare all'estensione per Azione il nome "Open in" seguito dal nome dell'applicazione.Name the action extension “Open in” followed by the application name. Localizzare Info.plist in base alle esigenze.Localize the Info.plist as needed.
  4. Progettare un'icona del modello per l'estensione, come illustrato nella documentazione per gli sviluppatori di Apple.Design a template icon for the extension as described by Apple’s developer documentation. In alternativa, è possibile usare lo strumento IntuneMAMConfigurator per generare queste immagini dalla directory APP dell'applicazione.Alternatively, the IntuneMAMConfigurator tool can be used to generate these images from the application .app directory. Eseguire "IntuneMAMConfigurator -generateOpenInIcons /path/to/app.app -o /path/to/output/directory"Run ‘IntuneMAMConfigurator -generateOpenInIcons /path/to/app.app -o /path/to/output/directory’
  5. Sotto IntuneMAMSettings nel file Info.plist dell'estensione aggiungere un'impostazione booleana denominata OpenInActionExtension con il valore YES.Under IntuneMAMSettings in the extension’s Info.plist, add a Boolean setting named OpenInActionExtension with value YES.
  6. Configurare NSExtensionActivationRule per supportare un singolo file e tutti i tipi contenuti in CFBundleDocumentTypes dell'applicazione con il prefisso "com.microsoft.intune.mam".Configure the NSExtensionActivationRule to support a single file and all types from the application’s CFBundleDocumentTypes prefixed with ‘com.microsoft.intune.mam’. Se ad esempio l'applicazione supporta public.text e public.image, la regola di attivazione sarà:For example, if the application supports public.text and public.image, the activation rule would be:
SUBQUERY ( 
    extensionItems, 
    $extensionItem, 
    SUBQUERY ( 
        $extensionItem.attachments, 
        $attachment, 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.text” || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.image”).@count == 1 
).@count == 1 

Aggiornare le estensioni per Condivisione e Azione esistentiUpdate existing Share and Action extensions

Se l'applicazione contiene già le estensioni per Condivisione o Azione, NSExtensionActivationRule dovrà essere modificata per consentire i tipi di Intune.If your application already contains Share or Action extensions, then their NSExtensionActivationRule will have to be modified to allow the Intune types. Per ogni tipo supportato dall'estensione, inserire un tipo aggiuntivo con il prefisso "com.microsoft.intune.mam".For each type supported by the extension, an additional type prefixed with ‘com.microsoft.intune.mam.’. Se ad esempio la regola di attivazione esistente è:For example, if the existing activation rule is:

SUBQUERY ( 
    extensionItems, 
    $extensionItem, 
    SUBQUERY ( 
        $extensionItem.attachments, 
        $attachment, 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data" 
    ).@count > 0 
).@count > 0 

Dovrà essere modificata in:It should be changed to:

SUBQUERY ( 
    extensionItems, 
    $extensionItem, 
    SUBQUERY ( 
        $extensionItem.attachments, 
        $attachment, 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.url" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.plain-text" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.image" || 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.data 
    ).@count > 0 
).@count > 0 

Nota

Per aggiungere i tipi di Intune alla regola di attivazione, si può usare lo strumento IntuneMAMConfigurator.The IntuneMAMConfigurator tool can be used to add the Intune types to the activation rule. Se la regola di attivazione esistente usa le costanti stringa predefinite (ad esempio NSExtensionActivationSupportsFileWithMaxCount, NSExtensionActivationSupportsText e così via), la sintassi del predicato può diventare piuttosto complessa.If your existing activation rule uses the predefined string constants (e.g. NSExtensionActivationSupportsFileWithMaxCount, NSExtensionActivationSupportsText, etc.), the predicate syntax can get quite complex. Lo strumento IntuneMAMConfigurator può essere usato anche per convertire la regola di attivazione dalle costanti stringa in una stringa di predicato durante l'aggiunta dei tipi di Intune.The IntuneMAMConfigurator tool can also be used to convert the activation rule from the string constants to a predicate string while adding the Intune types. IntuneMAMConfigurator è disponibile nel repository di GitHub.The IntuneMAMConfigurator is found in our GitHub repository.

Abilitazione della configurazione di destinazione MAM per le applicazioni iOSEnabling MAM targeted configuration for your iOS applications

La configurazione di destinazione MAM consente a un'app di ricevere i dati di configurazione tramite Intune App SDK.MAM targeted configuration allows an app to receive configuration data through the Intune App SDK. Il proprietario o lo sviluppatore dell'applicazione deve comunicare ai clienti Intune il formato e le varianti di tali dati.The format and variants of this data must be defined and communicated to Intune customers by the application owner/developer. Gli amministratori di Intune possono trovare e distribuire i dati di configurazione tramite il portale di Azure di Intune.Intune administrators can target and deploy configuration data via the Intune Azure portal. A partire dalla versione 7.0.1 di Intune App SDK per iOS, le applicazioni incluse nella configurazione di destinazione MAM possono ricevere dati di configurazione MAM tramite il servizio MAM.As of version 7.0.1 of the Intune App SDK for iOS, apps that are participating in MAM targeted configuration can be provided MAM targeted configuration data via the MAM Service. I dati di configurazione dell'applicazione vengono inviati tramite il servizio MAM direttamente all'app invece che tramite il canale MDM.The application configuration data is pushed through our MAM Service directly to the app instead of through the MDM channel. Intune App SDK include una classe per l'accesso ai dati recuperati da queste console.The Intune App SDK provides a class to access the data retrieved from these consoles. I seguenti elementi possono essere considerati come prerequisiti:Consider the following as prerequisites:

  • Per l'accesso all'interfaccia utente per la configurazione della destinazione MAM, l'app deve essere registrata nel servizio MAM di Intune.The app needs to be enrolled with the Intune MAM service before you access the MAM targeted config UI. Per altre informazioni, vedere Ricezione dei criteri di protezione delle app.For more information, see Receiving app protection policy.
  • Includere IntuneMAMAppConfigManager.h nel file di origine dell'app.Include IntuneMAMAppConfigManager.h in your app's source file.
  • Chiamare [[IntuneMAMAppConfigManager instance] appConfigForIdentity:] per ottenere l'oggetto Configurazione applicazione.Call [[IntuneMAMAppConfigManager instance] appConfigForIdentity:] to get the App Config Object.
  • Chiamare il selettore appropriato per l'oggetto IntuneMAMAppConfig.Call the appropriate selector on IntuneMAMAppConfig object. Ad esempio se la chiave dell'applicazione è una stringa è opportuno usare stringValueForKey o allStringsForKey.For example, if your application's key is a string, you'd want to use stringValueForKey or allStringsForKey. Il file IntuneMAMAppConfig.h header illustra le condizioni di errore e i valori restituiti.The IntuneMAMAppConfig.h header file talks about return values/error conditions.

Per altre informazioni sulle funzionalità dell'API Graph, vedere Informazioni di riferimento sull'API Graph.For more information about the capabilities of the Graph API, see Graph API Reference.

Per altre informazioni su come creare un criterio di configurazione app di destinazione MAM in iOS, vedere la sezione relativa alla configurazione di app di destinazione MAM in Come usare i criteri di configurazione delle app di Microsoft Intune per iOS.For more information about how to create a MAM targeted app configuration policy in iOS, see the section on MAM targeted app config in How to use Microsoft Intune app configuration policies for iOS.

TelemetriaTelemetry

Per impostazione predefinita, Intune App SDK per iOS registra i dati di telemetria sugli eventi di utilizzo seguenti.By default, the Intune App SDK for iOS logs telemetry data on the following usage events. Questi dati vengono inviati a Microsoft Intune.This data is sent to Microsoft Intune.

  • Avvio dell'app: per fornire informazioni a Microsoft Intune sull'utilizzo dell'app abilitata per MAM in base al tipo di gestione (MAM con MDM, MAM senza registrazione MDM e così via).App launch: To help Microsoft Intune learn about MAM-enabled app usage by management type (MAM with MDM, MAM without MDM enrollment, and so on).

  • Chiamate di registrazione: per fornire a Microsoft Intune informazioni sulla frequenza di esecuzioni riuscite e diverse altre metriche sulle prestazioni delle chiamate di registrazione avviate dal lato client.Enrollment calls: To help Microsoft Intune learn about success rate and other performance metrics of enrollment calls initiated from the client side.

Nota

Se si sceglie di non inviare i dati di telemetria di Intune App SDK a Microsoft Intune dall'applicazione per dispositivi mobili, è necessario disabilitare l'acquisizione della telemetria di Intune App SDK.If you choose not to send Intune App SDK telemetry data to Microsoft Intune from your mobile application, you must disable Intune App SDK telemetry capture. Impostare la proprietà MAMTelemetryDisabled su YES nel dizionario IntuneMAMSettings.Set the property MAMTelemetryDisabled to YES in the IntuneMAMSettings dictionary.

Abilitare identità multiple (facoltativo)Enable multi-identity (optional)

Per impostazione predefinita, l'SDK applicherà i criteri all'app nel suo complesso.By default, the SDK applies a policy to the app as a whole. La funzionalità MAM per l'uso delle identità multiple può essere abilitata per applicare un criterio a livello delle singole identità.Multi-identity is a MAM feature that you can enable to apply a policy on a per-identity level. Ciò richiede una partecipazione dell'app più attiva rispetto ad altre funzionalità di gestione delle applicazioni mobili.This requires more app participation than other MAM features.

L'app deve informare l'SDK dell'app quando intende modificare l'identità attiva.The app must inform the app SDK when it intends to change the active identity. L'SDK invierà anche una notifica all'app quando è necessaria una modifica di identità.The SDK also notifies the app when an identity change is required. Attualmente è supportata solo l'identità gestita.Currently, only one managed identity is supported. Dopo che l'utente registra il dispositivo o l'app, l'SDK usa questa identità e la considera l'identità primaria gestita.After the user enrolls the device or the app, the SDK uses this identity and considers it the primary managed identity. Gli altri utenti dell'app verranno trattati come non gestiti con impostazioni di criteri limitate.Other users in the app will be treated as unmanaged with unrestricted policy settings.

Si noti che un'identità viene semplicemente definita come stringa.Note that an identity is simply defined as a string. Le identità non fanno distinzione tra maiuscole e minuscole.Identities are case-insensitive. Le richieste di identità all'SDK potrebbero non restituire la stessa distinzione usata originariamente durante l'impostazione dell'identità.Requests to the SDK for an identity might not return the same casing that was originally used when the identity was set.

Panoramica dell'identitàIdentity overview

Un'identità è costituita semplicemente dal nome utente di un account (ad esempio, user@contoso.com).An identity is simply the user name of an account (for example, user@contoso.com). Gli sviluppatori possono impostare l'identità dell'app sui livelli seguenti:Developers can set the identity of the app on the following levels:

  • Identità del processo: imposta l'identità a livello di processo e viene usata principalmente per applicazioni a identità singola.Process identity: Sets the process-wide identity and is mainly used for single identity applications. Questa identità influisce su attività, file e interfaccia utente.This identity affects all tasks, files, and UI.

  • Identità dell'interfaccia utente: determina quali criteri vengono applicati alle attività dell'interfaccia utente nel thread principale, ad esempio taglia/copia/incolla, PIN, autenticazione e condivisione dati.UI identity: Determines what policies are applied to UI tasks on the main thread, like cut/copy/paste, PIN, authentication, and data sharing. L'identità dell'interfaccia utente non influisce sulle attività di file come crittografia e backup.The UI identity does not affect file tasks like encryption and backup.

  • Identità del thread: influisce sui criteri applicati al thread corrente.Thread identity: Affects what policies are applied on the current thread. Questa identità influisce su attività, file e interfaccia utente.This identity affects all tasks, files, and UI.

L'app deve impostare le identità in modo appropriato, indipendentemente dal fatto che l'utente sia gestito.The app is responsible for setting the identities appropriately, whether or not the user is managed.

In qualsiasi momento, ogni thread ha un'identità effettiva per le attività dell'interfaccia utente e le attività di file.At any time, every thread has an effective identity for UI tasks and file tasks. Si tratta dell'identità usata per determinare i criteri da applicare, se presenti.This is the identity that's used to check what policies, if any, should be applied. Se l'identità non esiste o l'utente non è gestito, non verrà applicato alcun criterio.If the identity is "no identity" or the user is not managed, no policies will be applied. I diagrammi seguenti mostrano come vengono determinate le identità effettive.The diagrams below show how the effective identities are determined.

Intune App SDK iOS: framework e librerie collegati

Code di threadThread queues

Le app inviano spesso attività sincrone e asincrone alle code del thread.Apps often dispatch asynchronous and synchronous tasks to thread queues. L'SDK intercetta le chiamate a Grand Central Dispatch (GCD) e associa l'identità del thread corrente alle attività inviate.The SDK intercepts Grand Central Dispatch (GCD) calls and associates the current thread identity with the dispatched tasks. Al termine delle attività, l'SDK modifica temporaneamente l'identità del thread nell'identità associata alle attività, esegue le attività e quindi ripristina l'identità del thread originale.When the tasks are finished, the SDK temporarily changes the thread identity to the identity associated with the tasks, finishes the tasks, then restores the original thread identity.

NSOperationQueue si basa su GCD, di conseguenza NSOperations verrà eseguito sull'identità del thread nel momento in cui sono state aggiunte le attività a NSOperationQueue.Because NSOperationQueue is built on top of GCD, NSOperations will run on the identity of the thread at the time the tasks are added to NSOperationQueue. NSOperations o le funzioni inviate direttamente con GCD possono anche modificare l'identità del thread corrente durante l'esecuzione.NSOperations or functions dispatched directly through GCD can also change the current thread identity as they are running. Questa identità sovrascrive l'identità ereditata dal thread di invio.This identity will override the identity inherited from the dispatching thread.

Proprietario dei fileFile owner

L'SDK tiene traccia delle identità dei proprietari dei file locali e applica i criteri di conseguenza.The SDK tracks the identities of local file owners and applies policies accordingly. Un proprietario del file viene stabilito al momento della creazione del file o quando un file viene aperto in modalità di troncamento.A file owner is established when a file is created or when a file is opened in truncate mode. Il proprietario viene impostato sull'identità dell'attività di file effettiva del thread che esegue l'operazione.The owner is set to the effective file task identity of the thread that's performing the task.

In alternativa, le app possono impostare l'identità del proprietario del file in modo esplicito usando IntuneMAMFilePolicyManager.Alternatively, apps can set the file owner identity explicitly by using IntuneMAMFilePolicyManager. Le app possono usare IntuneMAMFilePolicyManager per recuperare il proprietario del file e impostare l'identità dell'interfaccia utente prima di visualizzare il contenuto del file.Apps can use IntuneMAMFilePolicyManager to retrieve the file owner and set the UI identity before showing the file contents.

Dati condivisiShared data

Se l'app crea file che contengono dati di utenti gestiti e non gestiti, l'app deve crittografare i dati dell'utente gestito.If the app creates files that have data from both managed and unmanaged users, the app is responsible for encrypting the managed user’s data. È possibile crittografare i dati usando le API protect e unprotect in IntuneMAMDataProtectionManager.You can encrypt data by using the protect and unprotect APIs in IntuneMAMDataProtectionManager.

Il metodo protect accetta un'identità che può corrispondere a un utente gestito o non gestito.The protect method accepts an identity that can be a managed or unmanaged user. Se l'utente è gestito, i dati verranno crittografati.If the user is managed, the data will be encrypted. Se l'utente non è gestito, verrà aggiunta un'intestazione ai dati per la codifica dell'identità, ma i dati non verranno crittografati.If the user is unmanaged, a header will be added to the data that's encoding the identity, but the data will not be encrypted. Il metodo protectionInfo può essere usato per recuperare il proprietario dei dati.You can use the protectionInfo method to retrieve the data’s owner.

Condividere estensioniShare extensions

Se l'app contiene un'estensione di condivisione, il proprietario dell'elemento condiviso può essere recuperato con il metodo protectionInfoForItemProvider in IntuneMAMDataProtectionManager.If the app has a share extension, the owner of the item being shared can be retrieved through the protectionInfoForItemProvider method in IntuneMAMDataProtectionManager. Se l'elemento condiviso è un file, l'SDK gestirà l'impostazione del proprietario del file.If the shared item is a file, the SDK will handle setting the file owner. Se l'elemento condiviso è costituito da dati, l'app deve impostare il proprietario del file se questi dati vengono archiviati in un file e deve chiamare l'API setUIPolicyIdentity prima di visualizzare i dati nell'interfaccia utente.If the shared item is data, the app is responsible for setting the file owner if this data is persisted to a file, and for calling the setUIPolicyIdentity API before showing this data in the UI.

Attivazione delle identità multipleTurning on multi-identity

Per impostazione predefinita, tutte le app sono considerate a identità singola.By default, apps are considered single identity. L'SDK imposta l'identità del processo per l'utente registrato.The SDK sets the process identity to the enrolled user. Per abilitare il supporto per le identità multiple, un'impostazione booleana denominata MultiIdentity e con un valore YES al dizionario IntuneMAMSettings nel file Info.plist delle app.To enable multi-identity support, add a Boolean setting with the name MultiIdentity and a value of YES to the IntuneMAMSettings dictionary in the app's Info.plist file.

Nota

Quando vengono abilitate le identità multiple, l'identità del processo, l'identità dell'interfaccia utente e le identità del thread vengono impostate su nil.When multi-identity is enabled, the process identity, UI identity, and thread identities are set to nil. L'app deve impostare correttamente questi elementi.The app is responsible for setting them appropriately.

Cambio di identitàSwitching identities

  • Cambio di identità avviato dall'app:App-initiated identity switch:

    All'avvio, si considera che le app con identità multiple sono in esecuzione con un account sconosciuto e non gestito.At launch, multi-identity apps are considered to be running under an unknown, unmanaged account. L'interfaccia utente dell'avvio condizionale non verrà eseguita e all'app non verrà applicato alcun criterio.The conditional launch UI will not run, and no policies will be enforced on the app. L'app deve notificare l'SDK ogni volta che l'identità deve essere modificata.The app is responsible for notifying the SDK whenever the identity should be changed. In genere, ciò si verifica ogni volta che l'app sta per visualizzare i dati di un account utente specifico,Typically, this will happen whenever the app is about to show data for a specific user account.

    ad esempio, quando l'utente prova ad aprire un documento, una cassetta postale o una scheda in un notebook.An example is when the user attempts to open a document, a mailbox, or a tab in a notebook. L'app deve inviare una notifica all'SDK prima che venga effettivamente aperto il file, la cassetta postale o la scheda.The app needs to notify the SDK before the file, mailbox, or tab is actually opened. Questa operazione viene eseguita tramite l'API setUIPolicyIdentity in IntuneMAMPolicyManager.This is done through the setUIPolicyIdentity API in IntuneMAMPolicyManager. Questa API deve essere chiamata indipendentemente dal fatto che l'utente sia gestito.This API should be called whether or not the user is managed. Se l'utente è gestito, l'SDK eseguirà le verifiche di avvio condizionale, ad esempio rilevamento jailbreak, PIN e autenticazione.If the user is managed, the SDK will perform the conditional launch checks, like jailbreak detection, PIN, and authentication.

    Il risultato del cambio d'identità viene restituito all'app in modo sincrono tramite un gestore di completamento.The result of the identity switch is returned to the app asynchronously through a completion handler. L'app deve rimandare l'apertura del documento, della cassetta postale o della scheda finché non viene restituito un codice risultato di esito positivo.The app should postpone opening the document, mailbox, or tab until a success result code is returned. Se il cambio di identità non riesce, l'app deve annullare l'attività.If the identity switch failed, the app should cancel the task.

  • Cambio di identità avviato dall'SDK:SDK-initiated identity switch:

    In alcuni casi l'SDK deve richiedere all'app di passare a un'identità specifica.Sometimes, the SDK needs to ask the app to switch to a specific identity. Le app con identità multiple devono implementare il metodo identitySwitchRequired in IntuneMAMPolicyDelegate per gestire tale richiesta.Multi-identity apps must implement the identitySwitchRequired method in IntuneMAMPolicyDelegate to handle this request.

    Quando viene chiamato questo metodo, se l'app riesce a gestire la richiesta per passare all'identità specificata, deve passare IntuneMAMAddIdentityResultSuccess al gestore di completamento.When this method is called, if the app can handle the request to switch to the specified identity, it should pass IntuneMAMAddIdentityResultSuccess into the completion handler. Se l'app non riesce a gestire il cambio di identità, deve passare IntuneMAMAddIdentityResultFailed al gestore di completamento.If it can't handle switching the identity, the app should pass IntuneMAMAddIdentityResultFailed into the completion handler.

    L'app non deve chiamare setUIPolicyIdentity in risposta a questa chiamata.The app does not have to call setUIPolicyIdentity in response to this call. Se l'SDK richiede all'app di passare a un account utente non gestito, la stringa vuota verrà passata alla chiamata identitySwitchRequired.If the SDK needs the app to switch to an unmanaged user account, the empty string will be passed into the identitySwitchRequired call.

  • Cancellazione selettiva:Selective wipe:

    Quando all'app viene applicata la cancellazione selettiva, l'SDK chiama il metodo wipeDataForAccount in IntuneMAMPolicyDelegate.When the app is selectively wiped, the SDK will call the wipeDataForAccount method in IntuneMAMPolicyDelegate. L'app deve rimuovere l'account dell'utente specificato ed eventuali dati associati.The app is responsible for removing the specified user’s account and any data associated with it. L'SDK può rimuovere tutti i file dell'utente e può eseguire questa operazione se l'app restituisce FALSE dalla chiamata a wipeDataForAccount.The SDK is capable of removing all files owned by the user and will do so if the app returns FALSE from the wipeDataForAccount call.

    Questo metodo viene chiamato da un thread in background.Note that this method is called from a background thread. L'app non deve restituire un valore finché non vengono rimossi tutti i dati dell'utente, ad eccezione dei file, se l'applicazione restituisce FALSE.The app should not return a value until all data for the user has been removed (with the exception of files if the app returns FALSE).

Procedure consigliate per iOSiOS best practices

Ecco alcune procedure consigliate per lo sviluppo per iOS:Here are recommended best practices for developing for iOS:

  • Il file system iOS fa distinzione tra maiuscole e minuscole.The iOS file system is case-sensitive. Verificare che l'uso di minuscole e maiuscole sia corretto per i nomi di file come libIntuneMAM.a e IntuneMAMResources.bundle.Ensure that the case is correct for file names like libIntuneMAM.a and IntuneMAMResources.bundle.

  • Se Xcode non trova libIntuneMAM.a, è possibile correggere il problema aggiungendo il percorso di questa libreria nei percorsi di ricerca del linker.If Xcode has trouble finding libIntuneMAM.a, you can fix the problem by adding the path to this library into the linker search paths.

Domande frequentiFAQs

Tutte le API sono indirizzabili tramite Swift nativo o l'interoperabilità tra Objective-C e Swift?Are all of the APIs addressable through native Swift or the Objective-C and Swift interoperability?

Le API di Intune App SDK sono solo in Objective-C e non supportano Swift nativo.The Intune App SDK APIs are in Objective-C only and do not support native Swift. L'interoperabilità di Swift con Objective-C è necessaria.Swift interoperability with Objective-C is required.

Tutti gli utenti dell'applicazione devono essere registrati al servizio APP-WE?Do all users of my application need to be registered with the APP-WE service?

No.No. Solo gli account aziendali o dell'istituto di istruzione devono essere registrati con Intune App SDK.In fact, only work or school accounts should be registered with the Intune App SDK. Le app devono determinare se un account viene usato in un contesto aziendale o dell'istituto di istruzione.Apps are responsible for determining if an account is used in a work or school context.

Gli utenti che hanno già eseguito l'accesso all'applicazione devono essere registrati?What about users that have already signed in to the application? Do they need to be enrolled?

L'applicazione deve registrare gli utenti dopo che sono stati autenticati correttamente.The application is responsible for enrolling users after they have been successfully authenticated. L'applicazione deve anche registrare tutti gli account esistenti presenti prima che l'applicazione includesse la funzionalità MAM senza MDM.The application is also responsible for enrolling any existing accounts that might have been present before the application had MDM-less MAM functionality.

A tale scopo, l'applicazione userà il metodo registeredAccounts:.To do this, the application should make use of the registeredAccounts: method. Questo metodo restituisce NSDictionary che contiene tutti gli account registrati nel servizio MAM di Intune.This method returns an NSDictionary that has all of the accounts registered into the Intune MAM service. Se eventuali account esistenti nell'applicazione non sono presenti nell'elenco, l'applicazione deve registrarli con registerAndEnrollAccount:.If any existing accounts in the application are not in the list, the application should register and enroll those accounts via registerAndEnrollAccount:.

Con quale frequenza l'SDK ritenta l'esecuzione delle registrazioni?How often does the SDK retry enrollments?

L'SDK ritenterà automaticamente tutte le registrazioni non riuscite in precedenza in un intervallo di 24 ore.The SDK will automatically retry all previously failed enrollments on a 24-hour interval. L'SDK esegue questa operazione per verificare che l'utente registri e riceva correttamente i criteri se l'organizzazione ha abilitato MAM dopo l'accesso dell'utente all'applicazione.The SDK does this to ensure that if a user’s organization enabled MAM after the user signed in to the application, the user will successfully enroll and receive policies.

L'SDK interrompe ulteriori tentativi quando rileva che un utente ha registrato correttamente l'applicazione.The SDK will stop retrying when it detects that a user has successfully enrolled the application. Questo perché solo un utente può registrare un'applicazione in un determinato momento.This is because only one user can enroll an application at a particular time. Se viene annullata la registrazione di un utente, i nuovi tentativi inizieranno nuovamente nello stesso intervallo di 24 ore.If the user is unenrolled, the retries will begin again on the same 24-hour interval.

Perché è necessario annullare la registrazione dell'utente?Why does the user need to be deregistered?

L'SDK eseguirà queste azioni in background periodicamente:The SDK will take these actions in the background periodically:

  • Se l'applicazione non è ancora registrata, l'SDK tenterà di registrare tutti gli account registrati ogni 24 ore.If the application is not yet enrolled, it will try to enroll all registered accounts every 24 hours.
  • Se l'applicazione è registrata, l'SDK controllerà la presenza di aggiornamenti dei criteri di protezione delle app ogni 8 ore.If the application is enrolled, the SDK will check for app protection policy updates every 8 hours.

Annullando la registrazione di un utente, viene comunicato all'SDK che l'utente non userà più l'applicazione. L'SDK può quindi arrestare gli eventi periodici per tale account utente.Deregistering a user notifies the SDK that the user will no longer use the application, and the SDK can stop any of the periodic events for that user account. Se necessario, viene anche attivata una procedura di annullamento della registrazione e di cancellazione selettiva.It also triggers an app unenroll and selective wipe if necessary.

È necessario impostare il contrassegno doWipe su true nel metodo deregister?Should I set the doWipe flag to true in the deregister method?

Questo metodo deve essere chiamato prima che l'utente venga disconnesso dall'applicazione.This method should be called before the user is signed out of the application. Se i dati dell'utente vengono eliminati dall'applicazione durante la disconnessione, è possibile impostare doWipe su false.If the user’s data is deleted from the application as part of the sign-out, doWipe can be set to false. Tuttavia, se l'applicazione non rimuove i dati dell'utente, doWipe deve essere impostato su true in modo che l'SDK possa eliminare i dati.But if the application does not remove the user’s data, doWipe should be set to true so that the SDK can delete the data.

Sono disponibili altre modalità di annullamento della registrazione dell'applicazione?Are there any other ways that an application can be un-enrolled?

Sì. L'amministratore IT può inviare un comando di cancellazione selettiva all'applicazione.Yes, the IT admin can send a selective wipe command to the application. Il comando annulla la registrazione dell'utente e cancella selettivamente i dati dell'utente.This will deregister and unenroll the user, and it will wipe the user’s data. L'SDK gestisce questo scenario automaticamente e invia una notifica usando un metodo delegato di annullamento della registrazione.The SDK automatically handles this scenario and sends a notification via the unenroll delegate method.

Inviare l'app all'App StoreSubmit your app to the App Store

Sia la libreria statica che le build del framework di Intune App SDK sono file binari universali.Both the static library and framework builds of the Intune App SDK are universal binaries. Ciò significa che hanno un codice per tutte le architetture del dispositivo e del simulatore.This means they have code for all device and simulator architectures. Apple rifiuterà le app inviate all'App Store se contengono codice del simulatore.Apple will reject apps submitted to the App Store if they have simulator code. Durante la compilazione con la libreria statica per le build del dispositivo, il linker rimuove automaticamente il codice del simulatore.When compiling against the static library for device-only builds, the linker will automatically strip out the simulator code. Seguire la procedura seguente per rimuovere tutto il codice simulatore prima di caricare l'app in App Store.Follow the steps below to ensure all simulator code is removed before you upload your app to the App Store.

  1. Assicurarsi che IntuneMAM.framework sia presente nel desktop.Make sure IntuneMAM.framework is on your desktop.

  2. Eseguire questi comandi:Run these commands:

    lipo ~/Desktop/IntuneMAM.framework/IntuneMAM -remove i386 -remove x86_64 -output ~/Desktop/IntuneMAM.device_only
    
    cp ~/Desktop/IntuneMAM.device_only ~/Desktop/IntuneMAM.framework/IntuneMAM
    

    Il primo comando rimuove le architetture del simulatore dal file DYLIB del framework.The first command strips the simulator architectures from the framework's DYLIB file. Il secondo comando copia il file DYLIB del dispositivo nella directory del framework.The second command copies the device-only DYLIB file back into the framework directory.