Best Practices für iOS-Apps

Bei der Entwicklung von iOS-Apps sollten Sie diese Best Practices anwenden, um die Kompatibilität zwischen Citrix Endpoint Management™ und mobilen Apps für iOS-Geräte zu verbessern.

MDX App SDK Framework und Wrapping

Wenn Ihre App das MDX App SDK Framework verwendet, müssen Sie die passende MDX Toolkit-Version für das Wrapping verwenden. Eine Versionsinkompatibilität zwischen diesen beiden Komponenten kann zu Fehlfunktionen führen.

Um eine solche Inkompatibilität zu vermeiden, wrappen Sie die App als ISV-App und geben Sie einen App-Modus von Premium oder General an. Dadurch können Sie eine vorab gewrappte App bereitstellen. Infolgedessen muss Ihr Kunde die App nicht wrappen, wodurch die Verwendung eines inkompatiblen MDX Toolkits vermieden wird. Details zum ISV-Wrapping finden Sie unter Wrapping iOS mobile apps.

Explizite App-IDs verwenden

Wenn Ihr iOS Developer Enterprise-Konto keine Wildcard-App-IDs unterstützt, stellen Sie sicher, dass Sie für jede App, die Sie mit dem MDX Toolkit wrappen möchten, eine explizite App-ID erstellen. Erstellen Sie außerdem ein Bereitstellungsprofil für jede App-ID.

  • Den Hauptthread nicht blockieren

Verwenden Sie keinen blockierenden Code, wenn Sie auf dem Hauptthread ausgeführt werden. Dies ist eine Apple-Richtlinie, aber bei Citrix Endpoint Management ist sie noch wichtiger. Einige Aktionen können in einer verwalteten App länger dauern oder die weitere Thread-Ausführung blockieren. Datei-, Datenbank- und Netzwerkoperationen sind Beispiele für Operationen, die den aktuell ausgeführten Thread blockieren könnten und auf dem Hauptthread vermieden werden sollten.

  • Robusten Code schreiben

  • Insbesondere sollten Sie Apps gemäß den Best Practices entwickeln, die in den Apple-Programmierhandbüchern dokumentiert sind, wie z. B. dem Apple Application Programming Guide.

  • Nur von Apple veröffentlichte Schnittstellen verwenden

  • Überprüfen Sie die Rückgabewerte aller API-Aufrufe und behandeln Sie alle Ausnahmen, die als Nebeneffekt eines API-Aufrufs auftreten können. Diese Vorgehensweise gewährleistet eine elegante Fehlerbehebung oder eine ordnungsgemäße Beendigung der App. Obwohl dies eine gängige Best Practice in der Programmierung ist, ist sie für verwaltete Apps besonders wichtig.

  • Verschiedene APIs, von denen Sie erwarten würden, dass sie funktionieren, schlagen fehl, wenn die zugrunde liegende Funktionalität aufgrund von Citrix Endpoint Management-Richtlinien blockiert wurde. Beispiele hierfür wären alle zuvor beschriebenen Funktionen:

  • Netzwerk-APIs schlagen fehl, als ob kein Netzwerk verfügbar wäre.
  • Sensor-APIs, wie GPS und Kamera, geben null zurück oder lösen eine Ausnahme aus.

Die folgenden Objective-C-Laufzeitselektoren geben nil zurück, wenn die zugrunde liegende Funktionalität aufgrund von Citrix Endpoint Management-Richtlinien blockiert wurde, und sollten daher entsprechend behandelt werden.

Objektklasse: AVCaptureDevice

  • Selektorname: devicesWithMediaType:

Objektklasse: MFMailComposeViewController

  • Selektorname: init:

  • Objektklasse: MFMessageComposeViewController

  • Selektorname: initWithNibName:bundle:

Objektklasse: NSFileManager

  • Selektorname: URLForUbiquityContainerIdentifier:

Objektklasse: NSUbiquitousKeyValueStore

  • Selektorname: defaultStore:

Objektklasse: PHPhotoLibrary

  • Selektorname: sharedPhotoLibrary:

Objektklasse: UIImagePickerController

  • Selektorname: availableCaptureModesForCameraDevice:

Objektklasse: UIPasteboard

  • Selektorname:

    dataForPasteboardType:

  • valueForPasteboardType:

  • items:

    dataForPasteboardType:inItemSet:

    valuesForPasteboardType:inItemSet:

Objektklasse: UIPopoverController

  • Selektorname: initWithContentViewController:

Objektklasse: UINavigationController

  • Selektorname:

    ctxInitWithRootViewController:

    ctxPopToViewController:animated:

Laufzeit-Schnittstellen umleiten

Citrix Endpoint Management bietet eine UI-PIN-Eingabeaufforderung, sodass Sie dies nicht in Ihrer App tun müssen.

Um die Bereitschaft von Citrix Endpoint Management zu gewährleisten, empfehlen wir Ihnen, Objective-C-Laufzeitselektoren nicht umzuleiten oder zu ersetzen. Der Grund dafür ist, dass Citrix Endpoint Management die zugrunde liegenden Methoden mehrerer Objektklassen-Selektoren “swizzelt”, um das Laufzeitverhalten einer App zu steuern oder zu modifizieren. Die folgende Tabelle listet die Objective-C-Klassen-Selektoren auf, die Citrix Endpoint Management umleitet:

  • Objektklassenname: NSURLProtectionSpace

  • Selektorname: serverTrust

Objektklassenname: NSURLAuthenticationChallenge

  • Selektorname: sender

Objektklassenname: NSURLConnection

  • Selektorname:

    sendSynchronousRequest:returningResponse:error:

    initWithRequest:delegate:startImmediately:

    initWithRequest:delegate:

    connectionWithRequest:delegate:

Objektklassenname: NSURLConnectionDelegate

  • Selektorname:

    connection:canAuthenticateAgainstProtectionSpace:

    connection:didReceiveAuthenticationChallenge:

    connection:willSendRequestForAuthenticationChallenge:

Objektklassenname: NSURLSessionConfiguration

  • Selektorname:

    defaultSessionConfiguration

    ephemeralSessionConfiguration

Objektklassenname: ALAssetsLibrary

  • Selektorname: authorizationStatus

  • Objektklassenname: AVAudioRecorder

  • Selektorname:

  • record

    prepareToRecord

    recordForDuration:

    recordAtTime:

    recordAtTime:ForDuration:

  • Objektklassenname: AVAudioSession

  • Selektorname: recordPermission

  • Objektklassenname: AVCaptureDevice

  • Selektorname:

    devices

    devicesWithMediaType:

Objektklassenname: AVAsset

  • Selektorname: assetWithURL:

Objektklassenname: AVURLAsset

  • Selektorname:

    initWithURL:options:

    URLAssetWithURL:options:

Objektklassenname: AVPlayerItem

  • Selektorname:

    playerItemWithAsset:

    initWithURL:

    playerItemWithURL:

Objektklassenname: AVPlayer

  • Selektorname:

    playerWithPlayerItem:

    initWithPlayerItem:

    initWithURL:

Objektklassenname: CLLocationManager

  • Selektorname: startUpdatingLocation

  • Objektklassenname: UIScrollView

  • Selektorname: setContentOffset:

Objektklassenname: MFMailComposeViewController

  • Selektorname:

  • canSendMail

    init

Objektklassenname: MFMessageComposeViewController

  • Selektorname:

    canSendText

    initWithNibName:bundle:

Objektklassenname: NSFileManager

  • Selektorname: URLForUbiquityContainerIdentifier:

Objektklassenname: NSUbiquitousKeyValueStore

  • Selektorname: defaultStore

Objektklassenname: PHPhotoLibrary

  • Selektorname: authorizationStatus

Objektklassenname: QLPreviewController

  • Selektorname:

    setDataSource:

    canPreviewItem:

Objektklassenname: QLPreviewControllerDataSource

  • Selektorname:

    numberOfPreviewItemsInPreviewController:

  • previewController:previewItemAtIndex:

  • Objektklassenname: SLComposeViewController

  • Selektorname: isAvailableForServiceType:

  • Objektklassenname: UIActivityViewController

  • Selektorname:

  • initWithActivityItems:applicationActivities:

  • setExcludedActivityTypes:

    • Objektklassenname: UIApplication
  • Selektorname:

    • openURL:

    • canOpenURL:

    • setApplicationIconBadgeNumber:

    • Objektklassenname: UIDocument

    • Selektorname:

    • closeWithCompletionHandler:

    • contentsForType:error:

    • Objektklassenname: UIDocumentInteractionController

    • Selektorname:

    interactionControllerWithURL:

    • setURL:

    • setDelegate:

    presentPreviewAnimated:

    presentOpenInMenuFromBarButtonItem:animated:

    • presentOpenInMenuFromRect:inView:animated:

    • presentOptionsMenuFromBarButtonItem:animated:

    presentOptionsMenuFromRect:inView:animated:

    • Objektklassenname: UIDocumentMenuViewController

    • Selektorname: initWithDocumentTypes:inMode:

Objektklassenname: UIImage

-  **Selektorname:** imageNamed:

Objektklassenname: UIImagePickerController

-  **Selektorname:** setSourceType:

takePicture

-  startVideoCapture
  • isSourceTypeAvailable:

  • isCameraDeviceAvailable:

    isFlashAvailableForCameraDevice:

  • availableCaptureModesForCameraDevice:

  • setMediaTypes

Objektklassenname: UINavigationController

  • Selektorname:

  • ctxInitWithRootViewController:

    ctxPushViewController:animated:

    ctxPopToViewController:animated:

Objektklassenname: UIPasteboard

  • Selektorname:

    generalPasteboard

    pasteboardWithName:create:

    pasteboardWithUniqueName

    setValue:forPasteboardType:

    setData:forPasteboardType:

    setItems:

    addItems:

    dataForPasteboardType:

    valueForPasteboardType:

    numberOfItems

    pasteboardTypes

    pasteboardTypesForItemSet:

    containsPasteboardTypes:

    containsPasteboardTypes:inItemSet:

    items

    itemSetWithPasteboardTypes:

    dataForPasteboardType:inItemSet:

    valuesForPasteboardType:inItemSet:

    string

    strings

    URL

    URLs

    image

    images

    color

    colors

Objektklassenname: UIPopoverController

  • Selektorname: initWithContentViewController

Objektklassenname: UIPrintInteractionController

  • Selektorname:

    isPrintingAvailable

    presentAnimated:completionHandler:

    presentFromBarButtonItem:animated:completionHandler:

    presentFromRect:inView:animated:completionHandler:

Objektklassenname: UIViewController

  • Selektorname: presentViewController:animated:completion:

Objektklassenname: UIWebView

  • Selektorname:

    loadRequest:

    setDelegate:

    UIWebViewDelegate

    webView:shouldStartLoadWithRequest:navigationType:

    webViewDidStartLoad:

    webViewDidFinishLoad:

    webView:didFailLoadWithError:

Objektklassenname: UIWindow

  • Selektorname: makeKeyAndVisible

Objektklassenname: UIApplicationDelegate

  • Selektorname:

    applicationDidFinishLaunching:

    application:didFinishLaunchingWithOptions:

    application:willFinishLaunchingWithOptions:

    applicationWillResignActive:

    applicationDidEnterBackground:

    applicationWillEnterBackground:

    applicationWillEnterBackground:

    applicationDidBecomeActive:

    applicationWillTerminate:

    application:openURL:sourceApplication:annotation:

    application:handleOpenURL:

    applicationProtectedDataWillBecomeUnavailable:

    applicationProtectedDataDidBecomeAvailable:

    application:performFetchWithCompletionHandler:

    application:handleEventsForBackgroundURLSession:completionHandler:

    application:didReceiveLocalNotification:

    application:didReceiveRemoteNotification:

    application:didReceiveRemoteNotification:fetchCompletionHandler:

    application:didRegisterForRemoteNotificationsWithDeviceToken:

    application:didFailToRegisterForRemoteNotificationsWithError:

    applicationSignificantTimeChange:

    application:shouldAllowExtensionPointIdentifier:

Objektklassenname: QLPreviewController

  • Selektorname: allocWithZone:

Kompatibilität der Datenverschlüsselung gewährleisten

Eines der Hauptmerkmale von MDX ist, dass alle persistenten Daten transparent verschlüsselt werden. Sie müssen Ihre App nicht ändern, um diese Funktionalität zu nutzen, und können sie tatsächlich nicht direkt umgehen. Der Citrix Endpoint Management-Administrator kann die Verschlüsselung selektiv oder vollständig deaktivieren, die App jedoch nicht.

Dies ist einer der gewichtigeren Aspekte von MDX und erfordert ein Verständnis der folgenden Punkte:

  • Dateiverschlüsselung ist für den gesamten nativen Code vorhanden, der in verwalteten Prozessen ausgeführt wird.

    Die Implementierung der Dateidatenverschlüsselung unterstützt den gesamten nativen Code und nicht nur Code für Apps, die die Apple-Frameworks und die Apple Objective-C-Laufzeitumgebung verwenden. Jede Dateidatenverschlüsselung, die innerhalb und ausschließlich für die Objective-C-Laufzeitumgebung implementiert wird, kann leicht untergraben werden.

  • Einige Framework-APIs, wie die Klassen AVPlayer, UIWebView und QLPreviewController, werden von iOS-Dienstprozessen in einem anderen Ausführungskontext implementiert als der verwaltete App-Prozess des Benutzers.

    Diese Dienstprozesse können MDX-verschlüsselte Dateidaten nicht entschlüsseln. Daher muss die verwaltete App dem Dienstprozess eine temporäre unverschlüsselte Kopie der Daten zur Verfügung stellen. Die Kopie wird von der verwalteten App nach 5 Sekunden gelöscht. Es ist wichtig, dass Sie sich der Einschränkung bewusst sind, wenn Sie diese Klassen verwenden. Der Grund dafür ist, dass wir aufgrund der Apple-Implementierung der spezifischen Klassen die Kontrolle über die Daten verlieren, die diesen Klassen bereitgestellt werden.

  • Speicherzuordnung ist problematisch für die Citrix Endpoint Management-Verschlüsselung, da sie darauf beruht, dass die App Dateisystemaufrufschnittstellen aufruft.

    Nachdem eine Datei speicherabgebildet wurde, werden die E/A-Anforderungen für die Datei außerhalb des Kontexts der Benutzer-App verwaltet, wodurch die Citrix Endpoint Management-Verschlüsselung umgangen wird. Alle POSIX mmap(2)-Aufrufe einer verwalteten App werden als MAP_PRIVATE und MAP_ANON abgebildet und sind keiner Dateibeschreibung zugeordnet. Es wird versucht, alle abgebildeten Daten während des mmap-Aufrufs einzulesen, wenn eine Dateibeschreibung angegeben wird, um alle Daten einzulesen, da jedes nachfolgende Paging von Daten durch das Betriebssystem zum Lesen verschlüsselter Daten führt, ohne dass diese von Citrix Endpoint Management entschlüsselt werden. Diese Technik war in allen mit Citrix Endpoint Management getesteten Apps erfolgreich, da die Menge der speicherabgebildeten Daten gering ist und keine Speicherseitenrückforderungen innerhalb der App stattfinden.

  • Verschlüsselung verursacht messbaren Overhead. Entwickler sollten die Festplatten-E/A optimieren, um eine Leistungsverschlechterung zu verhindern. Wenn Sie beispielsweise dieselben Informationen wiederholt lesen und schreiben, sollten Sie möglicherweise einen App-Level-Cache implementieren.

  • Citrix Endpoint Management verschlüsselt nur Instanzen der Apple libsqlite.dylib. Wenn die Anwendung direkt eine private Version der libsqlite.dylib verknüpft und/oder einbettet, werden die Datenbankinstanzen dieser privaten Bibliothek von Citrix Endpoint Management nicht verschlüsselt.

  • Apple SQLite-Datenbanken werden von Citrix Endpoint Management mithilfe der SQLite Virtual File System-Schicht verschlüsselt.

    Die Leistung kann ein Problem darstellen. Die Standard-Datenbank-Cache-Größe beträgt 2000 Seiten oder 8 Megabyte. Wenn Ihre Datenbank groß ist, muss ein Entwickler möglicherweise ein SQLite-Pragma angeben, um die Datenbank-Cache-Größe zu erhöhen. Im Objective-C Core Data Framework kann das SQLite-Pragma als Optionswörterbuch hinzugefügt werden, wenn das Persistent Store-Objekt zum Persistent Store Controller-Objekt hinzugefügt wird.

  • Der SQLite WAL-Modus wird nicht unterstützt, da die Bibliothek mit Dateisystem-E/A-Schnittstellen neu verknüpft wird und intern ausgiebig Speicherzuordnung verwendet.

  • NSURLCache DiskCache wird von iOS mithilfe einer SQLite-Datenbank implementiert. Citrix Endpoint Management deaktiviert den zugehörigen Disk-Cache, da diese Datenbank von nicht verwalteten iOS-Dienstprozessen referenziert wird.

  • Im Folgenden finden Sie eine Liste der fest codierten ausgeschlossenen Dateipfadnamenmuster:

    • .plist: Ausgeschlossen aufgrund des Zugriffs durch iOS-Systemprozesse außerhalb des Prozesskontexts.
    • .app: Veralteter Teilstring im Namen des Anwendungs-Bundles. Dieser Teilstring ist veraltet, da ein expliziter Anwendungs-Bundle-Pfad jetzt ausgeschlossen ist.
    • .db: Eine Datei mit dieser Endung wird nicht verschlüsselt, wenn die Datei keine SQLite-Datenbank ist.
    • /System/Library: Dateipfade, die innerhalb des App-Bundle-Sandbox-Verzeichnisses existieren, und Dateipfade außerhalb der App-Daten-Sandbox können nicht verschlüsselt werden. Unter iOS ist die installierte App schreibgeschützt und befindet sich in einem anderen Verzeichnis als die App-Datendateien, die die App während der Ausführung erstellt und speichert.
    • Library/Preferences: Dateien werden direkt von iOS aufgerufen. Normalerweise sind in diesem Verzeichnispfad nur .plist-Dateien vorhanden.
    • /com.apple.opengl/: iOS greift direkt auf die Dateien zu.
    • csdk.db: Veraltete Citrix SSLSDK SQLite-Datenbank
    • /Library/csdk.sql: Citrix SSLSDK SQLite-Datenbank
    • CtxLog_: Präfix für Citrix®-Protokolldateinamen
    • CitrixMAM.config: Interner MDX-Dateiname
    • CitrixMAM.traceLog: Veralteter interner MDX-Dateiname
    • CtxMAM.log: Interner MDX-Dateiname
    • data.999: Interner MDX-Dateiname
    • CTXWrapperPersistentData: Interner MDX-Dateiname
    • /Documents/CitrixLogs: MDX-Protokollverzeichnis
    • /Document/CitrixLogs.zip: Name des komprimierten MDX-Protokollverzeichnisses
    • Jede Datei im App-Bundle-Verzeichnispfad: Schreibgeschütztes Verzeichnis von App-Dateien
  • Citrix Endpoint Management ersetzt zur Laufzeit eine Instanz der privaten Citrix Endpoint Management SecureViewController-Klasse durch Instanzen der Apple Objective-C QLPreviewController-Objektklasse. Die Citrix Endpoint Management SecureViewController-Klasse wird von der Apple Objective-C UIWebView-Objektklasse abgeleitet. Die QLPreviewController-Objektklasse unterstützt nativ einige Dateiformate, die die UIWebView-Objektklasse nicht nativ unterstützt, wie z. B. Audio- und PDF-Typen.

  • Für optimale Leistung sollten Dateisystem-E/A-Anforderungen an Dateioffsets ausgegeben werden, die ein Vielfaches von 4096 Bytes sind, und für eine Länge ausgegeben werden, die ebenfalls ein Vielfaches von 4096 Bytes ist.

  • Das Dateimodus-Flag O_NONBLOCK wird von der Citrix Endpoint Management-Verschlüsselung nicht unterstützt. Dieses Dateimodus-Flag wird aus der Liste der Modi entfernt, wenn es von Citrix Endpoint Management verarbeitet wird.

Benutzer-Entropie für Verschlüsselung

Eine Citrix Endpoint Management-Option für die Verschlüsselung erfordert, dass der Endbenutzer eine PIN eingibt, bevor der Verschlüsselungsschlüssel generiert werden kann. Diese Option wird als Benutzer-Entropie bezeichnet. Sie kann ein bestimmtes Problem für Apps verursachen.

Insbesondere kann kein Datei- oder Datenbankzugriff durchgeführt werden, bevor der Benutzer eine PIN eingibt. Wenn eine solche E/A-Operation an einem Ort vorhanden ist, der ausgeführt wird, bevor die PIN-Benutzeroberfläche angezeigt werden kann, schlägt sie immer fehl.

Um sicherzustellen, dass dieses Problem in Ihrer App nicht auftritt, testen Sie mit aktivierter Benutzerentropie. Die Citrix Endpoint Management-Clienteigenschaft „Geheimnisse mit Passcode verschlüsseln“ fügt Benutzerentropie hinzu. Sie konfigurieren diese Clienteigenschaft, die standardmäßig deaktiviert ist, in der Citrix Endpoint Management-Konsole unter Konfigurieren > Einstellungen > Mehr > Clienteigenschaften.

Kompatibilität der Datenisolierung

  • Remote-View-Controller verfügen über keine Sicherheitsisolierung (z. B. Datenverschlüsselung; Blockierung von Richtlinien für Kopieren, Ausschneiden und Einfügen usw.), da ein Remote-View-Controller in einem anderen Prozesskontext als die MDX-verwaltete App ausgeführt wird.
  • Die Aktion „Kopieren“ ist die einzige von UIResponder unterstützte Aktion. Andere Aktionen wie „Ausschneiden“ und „Löschen“ werden nicht unterstützt.
  • AirDrop wird nur auf UI-Ebene abgefangen, nicht auf einer niedrigeren Ebene.
  • MFI und Bluetooth werden nicht abgefangen.

Unterstützung für Symboldateien

MDX-Wrapping erfordert das Vorhandensein mindestens eines Symbols, das als Startbildschirm- oder App-Symbol verwendet werden kann. App-Entwickler können ihre Symbole zum Asset Catalog hinzufügen oder die Schlüssel CFBundleIcons oder CFBundleIconFiles in Info.plist verwenden.

Das MDX Toolkit wählt den ersten Eintrag aus der Liste der bekannten plist-Speicherorte in Info.plist aus:

  • CFBundleIcons
  • CFBundlePrimaryIcon
  • CFBundleIconFiles
  • UINewsstandIcon
  • CFBundleDocumentTypes

Wenn keiner dieser Schlüssel in Info.plist gefunden wird, identifiziert das MDX Toolkit eines der folgenden Symbole im Stammordner des App-Bundles:

  • Icon.png
  • Icon-60@2x.png
  • Icon-72.png
  • Icon-76.png

Netzwerk und Micro-VPN

MDX verwaltet derzeit nur die Netzwerkaufrufe, die direkt von einer App ausgegeben werden. Einige DNS-Abfragen werden direkt vom Apple-Framework ausgegeben und daher nicht von MDX verwaltet.

Für Administratoren stehen mehrere Citrix Endpoint Management-Richtlinienoptionen für die Netzwerkverbindung zur Verfügung.

Die Richtlinie für den Netzwerkzugriff verhindert, erlaubt oder leitet die Netzwerkaktivität der App um.

Wichtig:

Die Version 18.12.0 des MDX Toolkits enthielt neue Richtlinien, die ältere Richtlinien kombinierten oder ersetzten. Die Richtlinie „Netzwerkzugriff“ kombiniert „Netzwerkzugriff“, „Bevorzugter VPN-Modus“ und „Umschalten des VPN-Modus zulassen“. Die Richtlinie „Ausschlussliste“ ersetzt die „Split-Tunnel-Ausschlussliste“. Die Richtlinie „Micro-VPN-Sitzung erforderlich“ ersetzt „Online-Sitzung erforderlich“. Weitere Informationen finden Sie unter Neuerungen in früheren Releases.

„Getunnelt – Web-SSO“ ist der Name für „Sicheres Browsen“ in den Einstellungen. Das Verhalten ist dasselbe.

Die Optionen sind wie folgt:

  • Vorherige Einstellungen verwenden: Standardmäßig werden die Werte verwendet, die Sie in den früheren Richtlinien festgelegt hatten. Wenn Sie diese Option ändern, sollten Sie nicht zu Vorherige Einstellungen verwenden zurückkehren. Beachten Sie auch, dass Änderungen an den neuen Richtlinien erst wirksam werden, wenn der Benutzer die App auf Version 18.12.0 oder höher aktualisiert.
  • Blockiert: Von Ihrer App verwendete Netzwerk-APIs schlagen fehl. Gemäß der vorherigen Richtlinie sollten Sie einen solchen Fehler elegant behandeln.
  • Uneingeschränkt: Alle Netzwerkaufrufe erfolgen direkt und werden nicht getunnelt.
  • Getunnelt – Vollständiges VPN: Der gesamte Datenverkehr von der verwalteten App wird über Citrix Gateway getunnelt.
  • Getunnelt – Web-SSO: Die HTTP/HTTPS-URL wird umgeschrieben. Diese Option ermöglicht nur das Tunneln von HTTP- und HTTPS-Datenverkehr. Ein wesentlicher Vorteil von Getunnelt – Web-SSO ist Single Sign-On (SSO) für HTTP- und HTTPS-Datenverkehr sowie die PKINIT-Authentifizierung. Unter Android hat diese Option einen geringen Einrichtungsaufwand und ist daher die bevorzugte Option für Web-Browsing-Vorgänge.
  • Getunnelt – Vollständiges VPN und Web-SSO: Ermöglicht das automatische Umschalten zwischen VPN-Modi nach Bedarf. Wenn eine Netzwerkanforderung aufgrund einer Authentifizierungsanforderung fehlschlägt, die in einem bestimmten VPN-Modus nicht verarbeitet werden kann, wird sie in einem alternativen Modus erneut versucht.

Einschränkungen

  • Benutzer können keine Videos abspielen, die auf internen Websites in iOS-gewrappten MDX-Apps gehostet werden, da die Videos in einem Mediaplayer-Prozess auf dem Gerät abgespielt werden, den MDX nicht abfängt.
  • NSURLSession-Hintergrund-Downloads (NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier) werden nicht unterstützt.
  • Wir blockieren UDP-Datenverkehr, wenn die Richtlinie für den Netzwerkzugriff auf Blockiert eingestellt ist. Wir tunneln keinen UDP-Datenverkehr, wenn die Richtlinie für den Netzwerkzugriff auf Getunnelt – Vollständiges VPN eingestellt ist.
  • MDX-gewrappte Apps können keinen Socket-Server instanziieren, der auf eingehende Verbindungen lauscht. MDX-gewrappte Apps können jedoch einen Client-Socket verwenden, um eine Verbindung zu einem Server herzustellen.

Unterstützung für Drittanbieterbibliotheken

Einige App-Frameworks weisen Kompatibilitätsprobleme mit Citrix Endpoint Management auf:

  • Apps, die mit der plattformübergreifenden Entwicklungsumgebung Xamarin entwickelt wurden, werden unterstützt. Citrix erklärt keine offizielle Unterstützung für andere plattformübergreifende Entwicklungsumgebungen aufgrund unzureichender Anwendungsbeispiele und Tests.
  • SQLCipher funktioniert nicht mit Verschlüsselung, da es Speicherzuordnung verwendet. Eine Lösung besteht darin, SQLCipher nicht zu verwenden. Eine zweite Lösung besteht darin, die Datenbankdatei mithilfe einer Richtlinie zur Verschlüsselungsausschluss von der Verschlüsselung auszuschließen. Ein Citrix Endpoint Management-Administrator muss die Richtlinie in der Citrix Endpoint Management-Konsole konfigurieren.
  • Apps und Drittanbieterbibliotheken, die direkt mit den OpenSSL-Bibliotheken libcrypto.a und libssl.a verknüpft sind, können zu einem Linkfehler aufgrund fehlender Symbole und zu Linkfehlern aufgrund mehrfacher Symboldefinition führen.
  • Apps, die Unterstützung für den Apple Push Notification Service benötigen, müssen bestimmte von Apple geforderte Schritte befolgen.
  • Citrix Endpoint Management setzt die SQLite-Datenbankversion explizit auf 1, um die Unterstützung für Write Ahead Logging (WAL)-Dateien und speicherabgebildete Dateien in SQLite-Datenbanken zu deaktivieren. Jeder Versuch, direkt auf SQLite-Schnittstellen in SQLite Version 2 oder Version 3 zuzugreifen, schlägt fehl.