Cole Objective-C à esquerda e clique em "Converter" — a gente transforma em XMLCole código Objective-C

O que esta ferramenta faz

Se você já precisou montar na mão um payload XML que batesse com um modelo Objective-C — para um serviço SOAP antigo, um arquivo plist, uma config Cocoa ou uma fixture de teste — sabe o drama. Conta as linhas @property, tira os qualificadores de tipo, lembra quais são containers NSArray e reza para o formato sair certo. Cole o Objective-C aqui e recebe XML bem formado em uma passada. Um trecho alloc/init, um arquivo de cabeçalho inteiro com vários blocos @interface ou um modelo profundamente aninhado — o resultado é o mesmo.

Não é substituição boba de texto. O conversor segue como o Cocoa de fato mapeia para XML. Valores NSString viram nós de texto (devidamente escapados). NSNumber e NSDecimalNumber perdem o invólucro e viram texto numérico puro — então [NSDecimalNumber decimalNumberWithString:@"249.99"] sai como 249.99. Valores BOOL viram true / false, ou a variante YES / NO se o seu esquema pede isso. NSArray<OrderItem *> vira um elemento container com um filho por item, nomeado segundo o tipo do elemento — o mesmo formato que as árvores NSXMLElement emitem.

O armazenamento por variável de instância também é tratado. Se sua @property usa @synthesize customerName = _customerName;, o elemento continua sendo customerName, não _customerName — esse nome de iVar é detalhe de implementação, não parte do formato de wire. Objetos aninhados (um Order com uma @property Address) são expandidos no lugar, e valores nil viram elementos vazios para manter o formato consistente. Se colar vários blocos @interface, todos aparecem na saída. Cole do jeito que está no seu arquivo .h — sem limpeza prévia — e confira o resultado contra o que o NSXMLDocument produziria.

Como usar

Três passos. Funciona igual, seja colando uma classe ou um conjunto inteiro de cabeçalhos.

1

Cole seu Objective-C (ou teste o exemplo)

Jogue seu Objective-C no editor da esquerda do jeito que está. Um bloco @interface, um literal de objeto alloc/init, várias classes ou tipos aninhados — tudo serve. Clique em Carregar exemplo para ver primeiro um exemplo realista de Order / OrderItem / Address.

Não precisa tirar os atributos de @property, remover pragmas ou limpar os imports. Deixe o código como está no Xcode. O parser sabe ler um arquivo .h ou .m de verdade.

2

Aperte Converter

Clique no botão verde Converter. A ferramenta lê o Objective-C, mantém cada @property, preserva os objetos aninhados e monta o XML em uma passada. Enquanto trabalha, aparece um indicador rápido de carregamento.

3

Copie o XML

O painel da direita enche com um XML indentado e bem formado que qualquer parser que siga os padrões — inclusive o NSXMLParser — aceita. Copie para um plist, corpo de requisição SOAP, fixture de teste ou sua documentação.

Quando isso salva o seu dia

Montar fixtures plist para iOS

Você tem um modelo Objective-C e precisa de um Info.plist ou plist de seed equivalente. Cole a classe, pegue o XML, jogue no bundle — sem escrever pares <code>&lt;dict&gt;</code> / <code>&lt;key&gt;</code> na unha.

Arquivos de config XML do Cocoa

Apps Cocoa desktop antigos ainda vêm com config XML. Transforme sua classe <code>Settings</code> num modelo pronto para editar, garantindo que a config bate com o código que a lê.

Clientes SOAP / WCF legados no iOS

Se seu app iOS ainda conversa com um endpoint SOAP, dá para colar a classe do contrato de requisição e ter o corpo do envelope XML — mais fácil do que montar árvores <code>NSXMLElement</code> manualmente.

Alimentar workflows XML do Mac OS

Integrações antigas de AppleScript / Automator / XML-RPC esperam XML. Cole o modelo Objective-C, pegue o XML e jogue no workflow — sem tradução manual.

Dúvidas comuns

Dá para colar várias declarações @interface de uma vez?

Dá. Cole um arquivo de cabeçalho inteiro. Cada @interface passa com os tipos aninhados expandidos. Se a sua @interface declara ivars explicitamente (dentro de { }) ou usa o estilo moderno só com @property, ambos funcionam do mesmo jeito.

Como os atributos de @property são tratados?

Atributos como (nonatomic, copy), (strong), (weak), (readonly) e (assign) são metadados de runtime — não mudam o formato serializado. O nome do elemento é o nome da propriedade. Propriedades readonly são emitidas mesmo assim (elas ainda têm valor). Propriedades calculadas com getters customizados são tratadas como qualquer outra.

E o nome do iVar — aparecem elementos com _underscore?

Não. Se sua propriedade é customerName e o iVar de apoio é _customerName, o elemento XML é <customerName>. O underscore é convenção do Objective-C, não formato de wire. Se quiser renomear um elemento, renomeie a própria @property e cole de novo.

Como NSString, NSNumber, NSDecimalNumber, BOOL e NSDate são tratados?

NSString vira nó de texto com escape XML correto. NSNumber e NSDecimalNumber perdem o invólucro e viram texto numérico puro. BOOL vira true / false (ou YES / NO se o código-fonte usa a convenção de plist). NSDate sai como string ISO-8601. Valores nil viram elementos vazios em vez de sumirem.

E NSArray, NSDictionary e objetos aninhados?

NSArray<OrderItem *> vira um elemento container com um filho por item, nomeado segundo o tipo do elemento: <items><OrderItem/><OrderItem/></items>. NSDictionary vira um container de <entry><key/><value/></entry>. Objetos aninhados (propriedade cujo tipo é outra @interface) são expandidos no lugar com todos os campos intactos.

Meu código fica salvo?

Seu código é enviado ao backend para a conversão e não é persistido — a gente não registra o payload. Como sempre acontece com ferramenta online, se o código for mesmo sensível, dá uma olhada antes de colar.

Outras ferramentas que podem te ajudar

Objective-C para XML é só uma peça do quebra-cabeça. Estas ferramentas combinam bem com ela: