Convertitore Objective-C in XML
Incolla interfacce o oggetti Objective-C. Ottieni XML pulito.
Cosa fa questo strumento
Se ti è mai toccato costruire a mano un payload XML che combaciasse con un modello Objective-C — per un vecchio servizio SOAP, un file plist, una config Cocoa o una fixture di test — conosci la solfa. Conti le righe @property, togli i qualificatori di tipo, cerchi di ricordare quali sono container NSArray e speri che la forma torni. Incolla qui l'Objective-C e ti ritrovi con XML ben formato in una sola passata. Un singolo frammento alloc/init, un header file intero con diversi blocchi @interface, o un modello profondamente annidato — stesso risultato.
Non è una sostituzione testuale ingenua. Il convertitore segue il modo in cui Cocoa mappa davvero verso XML. I valori NSString diventano nodi di testo (correttamente escapati). NSNumber e NSDecimalNumber perdono il wrapper e diventano testo numerico semplice — quindi [NSDecimalNumber decimalNumberWithString:@"249.99"] esce come 249.99. I valori BOOL diventano true / false, o la variante YES / NO se il tuo schema la richiede. NSArray<OrderItem *> diventa un elemento container con un figlio per voce, chiamato come il tipo dell'elemento — la stessa forma che emettono gli alberi NSXMLElement.
Anche il backing con variabili di istanza è coperto. Se la tua @property usa @synthesize customerName = _customerName;, l'elemento resta comunque customerName, non _customerName — il nome dell'iVar è un dettaglio implementativo, non parte del formato sul filo. Gli oggetti annidati (un Order con una @property Address) vengono espansi sul posto, e i valori nil diventano elementi vuoti per mantenere coerente la forma. Se incolli più blocchi @interface, finiscono tutti nell'output. Incollalo come sta nel tuo file .h — senza pulizia preventiva — e confronta il risultato con ciò che produrrebbe NSXMLDocument.
Come si usa
Tre passi. Funziona allo stesso modo sia con una singola classe sia con un intero blocco di header.
Incolla il tuo Objective-C (o prova l'esempio)
Butta il tuo Objective-C nell'editor di sinistra così com'è. Un blocco @interface, un literal di oggetto alloc/init, più classi o tipi annidati — tutto ok. Clicca Carica esempio per vedere prima un esempio realistico di Order / OrderItem / Address.
Non serve togliere gli attributi @property, rimuovere pragma o ripulire le import. Lascia il codice com'è in Xcode. Il parser sa leggere un vero file .h o .m.
Premi Converti
Clicca il bottone verde Converti. Lo strumento legge l'Objective-C, tiene tutte le @property, conserva gli oggetti annidati e costruisce l'XML in una passata. Durante l'elaborazione gira un breve indicatore di caricamento.
Copia l'XML
Il pannello di destra si riempie di XML indentato e ben formato che qualsiasi parser conforme agli standard — incluso NSXMLParser — accetta. Copialo in un plist, nel body di una richiesta SOAP, in una fixture di test o nella documentazione.
Quando serve davvero
Costruire fixture plist per iOS
Hai un modello Objective-C e ti serve un Info.plist o un plist di seed che combaci. Incolla la classe, prendi l'XML, mettilo nel bundle — niente coppie <code><dict></code> / <code><key></code> scritte a mano.
File di configurazione XML di Cocoa
Le vecchie app Cocoa desktop usano ancora config XML. Trasforma la tua classe <code>Settings</code> in un template pronto da modificare, così la config combacia con il codice che la legge.
Client SOAP / WCF legacy su iOS
Se la tua app iOS parla ancora con un endpoint SOAP, puoi incollare la classe di contratto della richiesta e ottenere il body dell'envelope XML — più semplice che costruire alberi <code>NSXMLElement</code> a mano.
Alimentare workflow XML su Mac OS
Le vecchie integrazioni AppleScript / Automator / XML-RPC si aspettano XML. Incolla il modello Objective-C, prendi l'XML, passalo al workflow — niente traduzione manuale.
Domande frequenti
Posso incollare più dichiarazioni @interface insieme?
Sì. Incolla un header file intero. Ogni @interface passa con i tipi annidati espansi. Se la tua @interface dichiara esplicitamente gli ivar (dentro { }) o usa lo stile moderno con solo @property, entrambi funzionano allo stesso modo.
Come vengono gestiti gli attributi di @property?
Attributi come (nonatomic, copy), (strong), (weak), (readonly) e (assign) sono metadati per il runtime — non cambiano la forma serializzata. Il nome dell'elemento è il nome della property. Le property readonly vengono comunque emesse (hanno comunque un valore). Le property calcolate con getter custom sono trattate come qualunque altra property.
E i nomi degli iVar — mi escono elementi con _underscore?
No. Se la tua property è customerName e l'iVar di backing è _customerName, l'elemento XML è <customerName>. L'underscore è una convenzione Objective-C, non un formato sul filo. Se vuoi rinominare un elemento, rinomina la @property stessa e reincollala.
Come sono trattati NSString, NSNumber, NSDecimalNumber, BOOL e NSDate?
NSString diventa un nodo di testo con escape XML corretto. NSNumber e NSDecimalNumber perdono il wrapper e diventano testo numerico semplice. BOOL diventa true / false (o YES / NO se il codice sorgente usa la convenzione plist). NSDate esce come stringa ISO-8601. I valori nil diventano elementi vuoti invece di sparire.
E NSArray, NSDictionary e oggetti annidati?
NSArray<OrderItem *> diventa un elemento container con un figlio per voce, chiamato come il tipo dell'elemento: <items><OrderItem/><OrderItem/></items>. NSDictionary diventa un container di <entry><key/><value/></entry>. Gli oggetti annidati (una property il cui tipo è un'altra @interface) vengono espansi sul posto con tutti i campi intatti.
Il mio codice viene salvato?
Il tuo codice viene inviato al backend per la conversione e non viene persistito — non logghiamo il payload. Come sempre con gli strumenti online, se il codice è davvero sensibile dagli un'occhiata prima di incollarlo.
Altri strumenti che potrebbero servire
Objective-C in XML è solo un pezzo del puzzle. Questi strumenti ci stanno bene insieme: