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.You might want to first read 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 MAM è 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 esegue OS X 10.8.5 o versioni successive e include Xcode 8 o versioni successive.You will need a Mac OS computer that runs OS X 10.8.5 or later and has the Xcode 8 or later installed.

  • L'app deve essere destinata a iOS 9 o versioni successive.Your app must be targeted for iOS 9 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. Qualora l'utente non le accetti, non potrà 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 le 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, procedere come segue: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.

  2. 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 utenteThe 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)

  3. 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
  4. Se l'app per dispositivi mobili definisce un file NIB o uno storyboard principale in Info.plist, tagliare i campi per lo storyboard o il file NIB principale.If your mobile app defines a main nib or storyboard file in its Info.plist file, cut the Main Storyboard or Main Nib field(s). In Info.plist incollare questi campi e i relativi valori in un nuovo dizionario denominato IntuneMAMSettings con i nomi di chiave seguenti, in base alle esigenze:In Info.plist, paste these fields and their corresponding values under a new dictionary named IntuneMAMSettings with the following key names, as applicable:

    • MainStoryboardFileMainStoryboardFile
    • MainStoryboardFile~ipadMainStoryboardFile~ipad
    • MainNibFileMainNibFile
    • MainNibFile~ipadMainNibFile~ipad

      Nota

      Se l'app per dispositivi mobili non definisce un file NIB o uno storyboard principale in Info.plist, queste impostazioni non sono necessarie.If your mobile app doesn’t define a main nib or storyboard file in its Info.plist file, these settings are not required.

      È possibile visualizzare il file Info.plist in formato non elaborato per vedere i nomi chiave facendo clic con il pulsante destro del mouse in un punto qualsiasi nel corpo del documento e modificando il tipo di visualizzazione in Show Raw Keys/Values (Visualizza chiavi/valori non elaborati).You can view Info.plist in raw format (to see the key names) by right-clicking anywhere in the document body and changing the view type to Show Raw Keys/Values.

  5. 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>
    
  6. 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 dei 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 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 dei diritti è un file XML univoco per l'applicazione per dispositivi mobili.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 6) Xcode dovrebbe averne generato uno per l'app.If your app did not previously have an entitlements file, enabling keychain sharing (step 6) should have caused Xcode to generate one for your app.

  7. Se l'app definisce schemi URL nel file Info.plist, aggiungere un altro schema, con un suffisso -intunemam, per ogni schema URL.If the app defines URL schemes in its Info.plist file, add another scheme, with a -intunemam suffix, for each URL scheme.

  8. Se l'app definisce i tipi di documento nel file Info.plist, per la matrice "UTI dei tipi di contenuto documento" di ogni elemento, aggiungere una voce duplicata per ogni stringa con prefissoIf the app defines Document types in its Info.plist file, for each item's "Document Content Type UTIs" array, add a duplicate entry for each string with a "com.microsoft.intune.mam." "com.microsoft.intune.mam".prefix.

  9. Per le app per dispositivi mobili sviluppate in iOS 9 o versione successiva, includere ogni protocollo passato dall'app a UIApplication canOpenURL nella matrice LSApplicationQueriesSchemes del file Info.plist dell'app.For mobile apps developed on iOS 9+, include each protocol that your app passes to UIApplication canOpenURL in the LSApplicationQueriesSchemes array of your app's Info.plist file. Inoltre, per ogni protocollo elencato è necessario aggiungere un nuovo protocollo seguito da -intunemam.Additionally, for each protocol listed, add a new protocol and append it with -intunemam. Nella matrice è anche necessario includere http-intunemam, https-intunemam e ms-outlook-intunemam.You must also include http-intunemam, https-intunemam, and ms-outlook-intunemam in the array.

  10. Se nei diritti dell'app sono definiti gruppi di app, aggiungere questi gruppi al dizionario IntuneMAMSettings nella chiave AppGroupIdentifiers come matrice di stringhe.If the app has app groups defined in its entitlements, add these groups to the IntuneMAMSettings dictionary under the AppGroupIdentifiers key as an array of strings.

Uso dello strumento Intune MAM ConfiguratorUsing the Intune MAM Configurator Tool

Lo strumento Intune MAM Configurator gestisce tutte le elaborazioni di info.plist necessarie per l'integrazione manuale del SDK.The Intune MAM Configurator Tool now handles all info.plist manipulation that is needed to integrate our SDK manually. Lo strumento è disponibile nel repository Intune App SDK per iOS.You can find it in the repo for the Intune App SDK for iOS. Le impostazioni aggiuntive specifiche delle app quali ID multipli, impostazioni AAD e così via non vengono gestite da questo strumento.Any additional app specific settings such as multi-ID, AAD settings, etc are not handled by this tool. 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 File dei dirittiThe entitlements files
- o- o (Facoltativo) <Path for the changed input plist>(Optional) <Path for the changed input plist>

Lo strumento Intune MAM Configurator può essere usato per aggiornare:The Intune MAM Configurator Tool can be used to update:

  • I file dello storyboard principale o i file con estensione nib principali in IntuneMAMSettings.Any of your app's Main Storyboard and/or Main Nib files into the IntuneMAMSettings.
  • Gli schemi URL definiti dell'app nel file Info.plist corrispondente con il suffisso -intunemam per ogni schema URL.Any of your app's defined URL schemes in its Info.plist file with the -intunemam suffix, for each URL scheme.
  • I tipi di documento definiti nel file Info.plist per la matrice "UTI dei tipi di contenuto documento" di ogni elemento; aggiungere una voce duplicata per ogni stringa con prefissoAny of your app's defined Document types in its Info.plist file, for each item's "Document Content Type UTIs" array, add a duplicate entry for each string with a "com.microsoft.intune.mam." "com.microsoft.intune.mam".prefix.
  • I gruppi di app definiti nei diritti dell'app. Aggiungere questi gruppi al dizionario IntuneMAMSettings nella chiave AppGroupIdentitifiers come matrice di stringhe.Any of your app's app groups defined in its entitlements, add these groups to the IntuneMAMSettings dictionary under the AppGroupIdentifiers key as an array of strings.

Nota

Se si decide di usare questo strumento invece della modifica manuale di info.plist, è consigliabile eseguire nuovamente lo strumento dopo ogni modifica apportata al file info.plist o ai diritti dell'app.If you decide to use this tool instead of manual info.plist manipulation, we recommend it be rerun whenever changes to your app's info.plist or entitlements have been made.

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 inoltre su ADAL per registrare l'identità dell'utente al servizio di gestione delle applicazioni mobili per la gestione senza scenari di registrazione dei dispositivi.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 applicazioni 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 per l'applicazione.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. Includere il bundle di risorse ADALiOSBundle.bundle nel progetto trascinandolo in Copy Bundle Resources (Copia le risorse del bundle) nella scheda Build Phases (Crea fasi).Include the ADALiOSBundle.bundle resource bundle in the project by dragging the resource bundle under Copy Bundle Resources within Build Phases.

  3. 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.Add -force_load {PATH_TO_LIB}/libADALiOS.a to the project’s OTHER_LDFLAGS build configuration setting or Other Linker Flags in the 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.

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 i gruppi di accesso com.microsoft.adalcache e com.microsoft.workplacejoin ai diritti di Keychain.Enable ADAL single sign-on (SSO) by adding com.microsoft.adalcache and com.microsoft.workplacejoin access groups in the keychain entitlements.

  3. Nel caso in cui si stia impostando in modo esplicito il gruppo Keychain della cache condivisa di ADAL, assicurarsi di impostarlo su <app_id_prefix>.com.microsoft.adalcache.If you are explicitly setting the ADAL shared cache keychain group, make sure it is set to <app_id_prefix>.com.microsoft.adalcache. ADAL eseguirà questa operazione per conto dell'utente se quest'ultimo non esegue la sostituzione.ADAL will set this for you unless you override it. 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. Può essere necessario specificare anche ADALRedirectScheme, a seconda del formato dell'URI di reindirizzamento dell'app.You might also need to specify ADALRedirectScheme, depending on the format of your app’s redirect URI.

È anche possibile sostituire l'URL dell'autorità di Azure AD con un URL specifico del tenant in fase di runtime.Additionally, you can override the Azure AD Authority URL with a tenant-specific URL at runtime. A tale scopo, impostare semplicemente la proprietà aadAuthorityUriOverride nell'istanza IntuneMAMPolicyManager.To do this, simply set the aadAuthorityUriOverride property on the IntuneMAMPolicyManager instance.

Nota

L'impostazione dell'URL dell'autorità AAD è richiesta dal servizio APP senza registrazione del dispositivo per consentire all'SDK di riutilizzare il token di aggiornamento ADAL recuperato dall'app.Setting the AAD Authority URL is required for APP without device enrollment to let the SDK reuse the ADAL refresh token fetched by the app.

L'SDK continuerà a usare questo URL dell'autorità per l'aggiornamento dei criteri ed eventuali richieste di registrazione successive a meno che il valore non venga cancellato o modificato.The SDK will continue to use this authority URL for policy refresh and any subsequent enrollment requests, unless the value is cleared or changed. È quindi importante cancellare il valore quando un utente gestito si disconnette dall'app e reimpostare il valore quando un nuovo utente gestito esegue l'accesso.Therefore, it is important to clear the value when a managed user signs out of the app and to reset the value when a new managed user signs in.

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

Se l'app non usa ADAL, Intune App SDK fornisce 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.

Criteri di protezione delle app senza registrazione del dispositivoApp protection policy without device enrollment

PanoramicaOverview

I criteri di protezione delle app di Intune senza registrazione del dispositivo, 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.Intune app protection policy without device 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 Intune mobile device management (MDM). Per supportare questa nuova funzionalità, l'app deve partecipare alla registrazione degli account utente per la gestione.To support this new functionality, the app must participate to register user accounts for management. Per usare le nuove API, seguire questi passaggi:To use the new APIs, follow these steps:

  1. Usare la versione più recente di Intune App SDK che supporta la gestione delle app con o senza la registrazione del dispositivo.Use the latest release of the Intune App SDK, which supports management of apps with or without device enrollment.

  2. Aggiungere IntuneMAMEnrollment.h a qualsiasi file che chiamerà le API.Add IntuneMAMEnrollment.h to any files that will call the APIs.

Registrare gli account utenteRegister user accounts

Un'app può ricevere criteri di protezione delle app dal servizio Intune se esegue la registrazione al servizio APP-WE per conto di un account utente specificato.An app can receive app protection policy from the Intune service if the app enrolls with the APP-WE service on behalf of a specified user account. L'app è responsabile della registrazione di tutti gli utenti che eseguono l'accesso con l'SDK.The app is responsible for registering any newly signed-in user with the SDK. Al termine dell'autenticazione del nuovo account utente, l'app deve chiamare il metodo registerAndEnrollAccount in Headers/IntuneMAMEnrollment.h:After the new user account has been authenticated, the app should call the registerAndEnrollAccount method in Headers/IntuneMAMEnrollment.h:

/**


 *  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 le 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.

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 l'API seguente in Headers/IntuneMAMEnrollment.h:Before the user is signed out, the app should call the following API in Headers/IntuneMAMEnrollment.h:

/*
 *  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 eseguano richieste specifiche al servizio APP-WE per conto dell'utente.The SDK needs the user account’s AAD token(s) to make specific requests to the APP-WE 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.

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

App che non usano ADALApps that do not use ADAL

Le app che non eseguono l'accesso dell'utente con ADAL possono comunque ricevere criteri di protezione delle app dal servizio Intune chiamando l'API per consentire all'SDK di gestire l'autenticazione.Apps that do not sign in the user using ADAL can still receive app protection policy from the Intune 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 in Headers/IntuneMAMEnrollment.h:To do this, the application should call the loginAndEnrollAccount method in Headers/IntuneMAMEnrollment.h:

/**
 *  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 con il servizio APP-WE per conto dell'account utente specificato.The SDK will then try to enroll the app with the APP-WE 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 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, 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.

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 informare l'app che è necessario un riavvio, l'SDK fornisce 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 mostra immediatamente una finestra di dialogo che indica all'utente di 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.

ImpostazioniSetting 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 StringString 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. 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. Questa impostazione 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. 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. Facoltativa.Optional.
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 fornita in fase di runtime.That will be prefixed to the provided string at runtime. Facoltativa.Optional.
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. Facoltativa.Optional.
MainNibFileMainNibFile
MainNibFile~ipadMainNibFile~ipad
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
MainStoryboardFile~ipadMainStoryboardFile~ipad
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.
Facoltativa.Optional.
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.
Facoltativa.Optional.
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.
Facoltativa.Optional.
MultiIdentityMultiIdentity BooleanBoolean Specifica se l'app è compatibile con identità multiple.Specifies whether the app is multi-identity aware. Facoltativa.Optional.
SplashIconFileSplashIconFile
SplashIconFile~ipadSplashIconFile~ipad
StringaString Specifica il file dell'icona per la schermata iniziale (avvio) di Intune.Specifies the Intune splash (startup) icon file. Facoltativa.Optional.
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. Facoltativa.Optional.
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. Facoltativa.Optional. 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. Facoltativa.Optional. 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. Facoltativa.Optional. 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. Facoltativa.Optional.
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.

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 da Intune App SDK per iOS (v 7.0.1) le applicazioni incluse nella configurazione di destinazione MAM possono ricevere dati di configurazione MAM tramite il servizio MAM.As of the Intune App SDK for iOS (v 7.0.1), apps that are participating in MAM targeted configuration can be provded 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 della configurazione di destinazione MAM, l'app deve essere registrata in MAM-WE.The app needs to be MAM-WE enrolled before you access the MAM targeted config UI. Per altre informazioni su MAM-WE, vedere Criteri di protezione delle app senza registrazione del dispositivo nella Guida di Intune App SDK.For more information about MAM-WE, see App protection policy without device enrollment in the Intune App SDK guide.
  • Includere IntuneMAMAppConfigManager.h nel file di origine dell'app.Include IntuneMAMAppConfigManager.h in your app's source file.
  • Chiamare [[IntuneMAMAppConfig instance] appConfigForIdentity:] per ottenere l'oggetto Configurazione applicazione.Call [[IntuneMAMAppConfig 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 relative ai valori di configurazione MAM di destinazione, vedere Configurazione MAM di destinazione di riferimento per l'API Graph.For more information about the capabilities of the Graph API with respect to the MAM targeted configuration values, see Graph API Reference MAM Targeted Config.

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 del 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.

Passaggio da un'identità all'altraSwitching 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 di 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 notificare l'SDK prima che il file, la cassetta postale o la scheda venga effettivamente aperta.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 la 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'applicazione 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).

Testare le impostazioni dei criteri di protezione delle app in XcodeTest app protection policy settings in Xcode

Prima di testare manualmente l'app abilitata per Intune in ambiente di produzione, è possibile usare il file Settings.bundle in Xcode.Before you manually test your Intune-enlightened app in production, you can use a Settings.bundle file while in Xcode. In questo modo, sarà possibile impostare i criteri di protezione delle app per scopi di test senza che sia necessaria una connessione a Intune.This will let you set app protection policies for testing without requiring a connection to Intune.

Abilitare i test dei criteriEnable policy testing

Seguire questa procedura per abilitare i test dei criteri in Xcode:Follow the steps below to enable policy testing in Xcode:

  1. Assicurarsi di usare una build di debug.Make sure to be in a debug build. Aggiungere un file Settings.bundle facendo clic con il pulsante destro del mouse sulla cartella di livello principale nel progetto.Add a Settings.bundle file by right-clicking the top-level folder in your project. Selezionare Add > New File (Aggiungi > Nuovo file) dal menu.Choose Add > New File from the menu. Scegliere il modello Settings Bundle (Bundle impostazioni) in Resources (Risorse).Under Resources, choose the Settings Bundle template.

  2. Copiare il blocco seguente nel file Settings.bundle/Root.plist per la build di debug:Copy the following block to the Settings.bundle/Root.plist file for the debug build:

    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Type</key>
            <string>PSChildPaneSpecifier</string>
            <key>Title</key>
            <string>MDM Debug Settings</string>
            <key>Key</key>
            <string>MAMDebugSettings</string>
            <key>File</key>
            <string>MAMDebugSettings</string>
        </dict>
    </array>
    
  3. Aggiungere un valore booleano denominato "DebugSettingsEnabled" nel dizionario IntuneMAMSettings nel file Info.plist dell'app.In the IntuneMAMSettings dictionary in the app's Info.plist, add a boolean called "DebugSettingsEnabled." Impostare il valore DebugSettingsEnabled su "YES."Set the value of DebugSettingsEnabled to "YES."

Impostazioni dei criteri di protezione delle appApp protection policy settings

La tabella seguente descrive le impostazioni dei criteri di protezione delle app che è possibile testare mediante MAMDebugSettings.plist.The table below describes the app protection policy settings that you can test using MAMDebugSettings.plist. Per attivare un'impostazione, aggiungerla in MAMDebugSettings.plist.To turn on a setting, add it in MAMDebugSettings.plist.

Nome dell'impostazione dei criteriPolicy setting name DescrizioneDescription Valori possibiliPossible values
AccessRecheckOfflineTimeoutAccessRecheckOfflineTimeout Periodo di tempo in minuti per il quale l'app può rimanere offline prima che Intune impedisca l'avvio o la ripresa dell'app se è abilitata l'autenticazione.The length of time in minutes the app can be offline before Intune blocks the app from launching or resuming if authentication is enabled. Qualsiasi numero intero maggiore di 0Any integer greater than 0
AccessRecheckOnlineTimeoutAccessRecheckOnlineTimeout Periodo di tempo in minuti per il quale l'app può essere eseguita prima che venga richiesto un PIN o l'autenticazione all'utente in fase di avvio o ripresa, se è abilitato il PIN o l'autenticazione per l'accesso.The length of time in minutes the app can run before the user is prompted for PIN or authentication at launch or resume (if authentication or PIN for access is enabled). Qualsiasi numero intero maggiore di 0Any integer greater than 0
AppSharingFromLevelAppSharingFromLevel Specifica le app da cui questa app può accettare dati.Specifies which apps this app can accept data from. 0 =0 =

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 deve usare 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 inviata una notifica all'SDK che indica che l'utente non userà più l'applicazione, quindi l'SDK può arrestare gli eventi periodici per l'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 solo dispositivo, il linker rimuoverà 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.