Objective-C zu XML Konverter
Objective-C-Interfaces oder -Objekte einfügen. Sauberes XML zurückbekommen.
Was dieses Tool macht
Wer schon mal von Hand ein XML-Payload zusammengebaut hat, das zu einem Objective-C-Modell passt — für einen alten SOAP-Service, eine plist-Datei, eine Cocoa-Config oder ein Test-Fixture — kennt das Spiel. Man zählt die @property-Zeilen, streicht die Typ-Qualifier, merkt sich, welche NSArray-Container sind, und hofft, dass die Form stimmt. Objective-C hier reinkippen und man bekommt wohlgeformtes XML in einem Rutsch zurück. Ein einzelnes alloc/init-Snippet, eine komplette Header-Datei mit mehreren @interface-Blöcken oder ein tief verschachteltes Modell — gleiches Ergebnis.
Kein naives Text-Ersetzen. Der Konverter folgt dem, wie Cocoa tatsächlich auf XML abbildet. NSString-Werte werden zu Text-Knoten (sauber escaped). NSNumber und NSDecimalNumber verlieren ihren Wrapper und werden zu reinem numerischem Text — also kommt [NSDecimalNumber decimalNumberWithString:@"249.99"] als 249.99 raus. BOOL-Werte werden zu true / false oder zur Variante YES / NO, wenn dein Schema das verlangt. NSArray<OrderItem *> wird zu einem Container-Element mit einem Kind pro Eintrag, benannt nach dem Elementtyp — die gleiche Form, die NSXMLElement-Bäume ausgeben.
Die Instanzvariablen-Hinterlegung wird auch abgedeckt. Wenn deine @property @synthesize customerName = _customerName; nutzt, heißt das Element weiterhin customerName, nicht _customerName — das iVar-Naming ist ein Implementierungsdetail, kein Wire-Format. Verschachtelte Objekte (ein Order mit einer Address-@property) werden an Ort und Stelle ausgeklappt, und nil-Werte werden zu leeren Elementen, damit die Form konsistent bleibt. Mehrere @interface-Blöcke eingefügt? Alle landen in der Ausgabe. Füg es so ein, wie es in deiner .h-Datei steht — kein Aufräumen nötig — und vergleich das Ergebnis mit dem, was NSXMLDocument produzieren würde.
Anwendung
Drei Schritte. Funktioniert genauso, egal ob du eine Klasse oder ein ganzes Header-Paket einfügst.
Objective-C einfügen (oder das Beispiel ausprobieren)
Objective-C einfach in den linken Editor kippen. Ein @interface-Block, ein alloc/init-Objektliteral, mehrere Klassen oder verschachtelte Typen — alles kein Problem. Klick auf Beispiel laden, um zuerst ein realistisches Order / OrderItem / Address-Beispiel zu sehen.
@property-Attribute, Pragmas oder Import-Zeilen musst du nicht entfernen. Lass den Code so, wie er in Xcode aussieht. Der Parser weiß, wie er eine echte .h- oder .m-Datei liest.
Auf Konvertieren drücken
Klick auf den grünen Konvertieren-Button. Das Tool liest das Objective-C, behält jede @property, bewahrt verschachtelte Objekte und baut das XML in einem Durchgang. Währenddessen läuft kurz ein Ladeindikator.
XML kopieren
Das rechte Panel füllt sich mit eingerücktem, wohlgeformtem XML, das jeder standardkonforme Parser — auch NSXMLParser — annimmt. Kopier es in ein plist, in einen SOAP-Request-Body, in ein Test-Fixture oder in deine Doku.
Wann das wirklich hilft
iOS-plist-Fixtures bauen
Du hast ein Objective-C-Modell und brauchst ein passendes Info.plist oder Seed-plist. Klasse einfügen, XML holen, ins Bundle ziehen — kein manuelles Tippen von <code><dict></code> / <code><key></code>-Paaren.
Cocoa-XML-Konfigurationsdateien
Alte Desktop-Cocoa-Apps liefern noch XML-Config aus. Mach deine <code>Settings</code>-Klasse zu einer fertig editierbaren Vorlage, damit die Config zum Code passt, der sie liest.
Alte SOAP- / WCF-Clients auf iOS
Wenn deine iOS-App noch mit einem SOAP-Endpoint spricht, kannst du die Request-Contract-Klasse einfügen und kriegst den XML-Envelope-Body — leichter, als <code>NSXMLElement</code>-Bäume von Hand zu bauen.
XML-Workflows unter Mac OS füttern
Alte AppleScript- / Automator- / XML-RPC-Integrationen erwarten XML. Objective-C-Modell einfügen, XML holen, in den Workflow schieben — keine manuelle Übersetzung.
Häufige Fragen
Kann ich mehrere @interface-Deklarationen auf einmal einfügen?
Ja. Kipp eine ganze Header-Datei rein. Jedes @interface kommt mit aufgeklappten verschachtelten Typen durch. Egal ob dein @interface ivars explizit deklariert (innerhalb { }) oder im modernen, reinen @property-Stil geschrieben ist — beides funktioniert gleich.
Wie werden @property-Attribute behandelt?
Attribute wie (nonatomic, copy), (strong), (weak), (readonly) und (assign) sind Metadaten für die Runtime — sie ändern die serialisierte Form nicht. Der Elementname ist der Property-Name. readonly-Properties werden trotzdem ausgegeben (sie haben ja einen Wert). Berechnete Properties mit Custom-Gettern werden wie jede andere Property behandelt.
Und die iVar-Namen — bekomme ich _Underscore-Elemente?
Nein. Wenn deine Property customerName heißt und die zugrunde liegende iVar _customerName ist, heißt das XML-Element <customerName>. Der Unterstrich ist eine Objective-C-Konvention, kein Wire-Format. Wenn du ein Element umbenennen willst, benenn die @property selbst um und füg es neu ein.
Wie werden NSString, NSNumber, NSDecimalNumber, BOOL und NSDate behandelt?
NSString wird zum Text-Knoten mit korrektem XML-Escaping. NSNumber und NSDecimalNumber verlieren den Wrapper und werden zu purem numerischem Text. BOOL wird zu true / false (oder YES / NO, wenn der Quellcode plist-Konvention nutzt). NSDate kommt als ISO-8601-String raus. nil-Werte werden zu leeren Elementen, statt einfach zu verschwinden.
Was ist mit NSArray, NSDictionary und verschachtelten Objekten?
NSArray<OrderItem *> wird zu einem Container-Element mit einem Kind pro Eintrag, benannt nach dem Elementtyp: <items><OrderItem/><OrderItem/></items>. NSDictionary wird zu einem Container aus <entry><key/><value/></entry>. Verschachtelte Objekte (eine Property, deren Typ ein anderes @interface ist) werden an Ort und Stelle mit allen Feldern ausgeklappt.
Wird mein Code gespeichert?
Dein Code geht zum Backend zur Konvertierung und wird nicht persistiert — wir loggen das Payload nicht. Wie immer bei Online-Tools: wenn der Code wirklich sensibel ist, schau vor dem Einfügen drauf.
Weitere passende Tools
Objective-C zu XML ist nur ein Puzzleteil. Diese Tools passen gut dazu: