AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Absturz unter iOS beim Auslesen von MDM-Parametern im NSUserDefaults-Objekt
Thema durchsuchen
Ansicht
Themen-Optionen

Absturz unter iOS beim Auslesen von MDM-Parametern im NSUserDefaults-Objekt

Ein Thema von PandaPhil · begonnen am 23. Mai 2025
Antwort Antwort
PandaPhil

Registriert seit: 23. Mai 2025
1 Beiträge
 
#1

Absturz unter iOS beim Auslesen von MDM-Parametern im NSUserDefaults-Objekt

  Alt 23. Mai 2025, 14:14
Hallo Delphi-Entwickler,

wir haben ein Problem beim Einlesen von Einstellungen, die über ein MDM an iOS- bzw. iPadOS-Geräte verteilt werden und im NSUserDefaults-Objekt liegen. Unsere Einstellungen sind einfache Schlüsselwertpaare, z.B. „skalierung“ als Integer. Abgesehen davon erwarten wir bisher nur elementare Datentypen. (Integer, String, Boolean)

Als MDM kommt ein Jamf Pro bzw. Microsoft Intune zum Einsatz. In beiden Fällen sehen wir in unserer App den erwarteten Schlüssel, unter dem die Einstellungen zu finden sind, aber beim Auslesen der konkreten Werte zwingt die App ein nicht abfangbarer Fehler zu einem sofortigen Beenden.

Unser Vorgehen ist dabei wie folgt:
Wir holen uns mit
Code:
nUserDefaults := TNSUserDefaults.Wrap(TNSUserDefaults.OCClass.standardUserDefaults)
das entsprechende Objekt im Apple-Betriebssystem und greifen mit
Code:
nUserDefaults.objectForKey(StrToNSStr('com.apple.configuration.managed'))
auf die verteilten MDM-Einstellungen zu. Bis zu diesem Punkt ist die Welt in Ordnung und obwohl die Rückgabe nur vom Datentyp Pointer ist, zeigt uns der Delphi-Debugger tatsächlich die erwartete Struktur korrekt an! (siehe Screenshot SC1, wir haben in unserem Test fünf Parameter, daher die 5 Elemente, die dort zu sehen sind)

Laut verschiedener Quellen erwarten wir an dieser Stelle ein NSDictionary mit den hinterlegten Schlüsselwertpaaren. Da der Debugger es ohne Typ korrekt darstellt wollten wir mit
Code:
nDictionaryPointer := TNSDictionary.Wrap(…)
die Rückgabe von objectForKey direkt umwandeln.

Mithilfe des Debuggers sieht man auch eine Änderung. Nach dieser Umwandlung liegt dahinter keine Struktur mehr für ihn, sondern lediglich eine Speicheradresse. Ob das nur eine Eigenart im Debugger oder tatsächlich ein entscheidender Hinweis ist, können wir nicht sicher sagen, aber es ist in jedem Fall auffällig.

Laut Delphi ist damit das Objekt in den richtigen Datentyp konvertiert und wir können mit objectForKey bzw. valueForKey auf die Daten zugreifen. Leider führt genau dieser Zugriff zum Absturz, ohne die Möglichkeit den Fehler abzufangen. Mithilfe von Auswerten sieht man die ominöse Fehlermeldung „Field not found“, was eigentlich nicht sein sollte. (siehe Screenshot SC2)
Letztlich gibt uns der Compiler den Weg vor und dennoch werden wir darauf hingewiesen, dass die Methode an dieser Stelle nicht zur Verfügung steht.

Ergänzend haben wir auch mit alternativen Möglichkeiten gespielt. Unter anderem das TNSDictionary.Wrap umgangen, indem wir aus der NSUserDefaults-Istanz direkt über dictionaryForKey anstatt objectForKey das NSDictionary laden. Das sollte die Konvertierung sparen, ändert aber leider nichts am Ergebnis.
Miniaturansicht angehängter Grafiken
sc1.jpg   sc2.jpg  
  Mit Zitat antworten Zitat
Alt 2. Jun 2025, 03:24     Erstellt von integratechimpanzee
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Alt 3. Jul 2025, 03:33     Erstellt von entirelyvarious
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz