Incolla Objective-C a sinistra e clicca "Converti" — lo trasformiamo in XMLIncolla codice Objective-C

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.

1

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.

2

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.

3

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>&lt;dict&gt;</code> / <code>&lt;key&gt;</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: