Collez de l'Objective-C à gauche et cliquez sur "Convertir" — on le transforme en XMLCollez du code Objective-C

Ce que fait cet outil

Si vous avez déjà dû bricoler à la main une charge XML qui colle à un modèle Objective-C — pour un vieux service SOAP, un fichier plist, une config Cocoa ou une fixture de test — vous connaissez la chanson. Vous comptez les lignes @property, vous virez les qualificatifs de type, vous essayez de vous rappeler lesquels sont des conteneurs NSArray et vous croisez les doigts pour que la forme soit correcte. Collez l'Objective-C ici et vous récupérez du XML bien formé en une passe. Un simple extrait alloc/init, un fichier d'en-tête entier avec plusieurs blocs @interface, ou un modèle profondément imbriqué — même résultat.

Ce n'est pas un remplacement de texte naïf. Le convertisseur suit la façon dont Cocoa mappe réellement vers XML. Les valeurs NSString deviennent des nœuds texte (correctement échappés). NSNumber et NSDecimalNumber perdent leur enveloppe et deviennent du texte numérique brut — donc [NSDecimalNumber decimalNumberWithString:@"249.99"] sort en 249.99. Les valeurs BOOL deviennent true / false, ou la variante YES / NO si c'est ce que votre schéma attend. NSArray<OrderItem *> devient un élément conteneur avec un enfant par item, nommé d'après le type de l'élément — la même forme que produisent les arbres NSXMLElement.

Le stockage par variable d'instance est géré aussi. Si votre @property utilise @synthesize customerName = _customerName;, l'élément s'appelle toujours customerName, pas _customerName — ce nommage d'iVar est un détail d'implémentation, pas une partie du format filaire. Les objets imbriqués (un Order avec un @property Address) sont expansés sur place, et les valeurs nil deviennent des éléments vides pour que la forme reste cohérente. Si vous collez plusieurs blocs @interface, chacun atterrit dans la sortie. Collez-le tel qu'il est dans votre fichier .h — pas de nettoyage nécessaire — et comparez le résultat à ce que produirait NSXMLDocument.

Comment l'utiliser

Trois étapes. Ça marche pareil que vous colliez une classe ou un pack d'en-têtes entier.

1

Collez votre Objective-C (ou essayez l'exemple)

Glissez votre Objective-C dans l'éditeur de gauche tel quel. Un bloc @interface, un littéral d'objet alloc/init, plusieurs classes ou des types imbriqués — tout passe. Cliquez sur Charger un exemple pour voir d'abord un exemple réaliste Order / OrderItem / Address.

Pas besoin de retirer les attributs @property, de supprimer les pragmas ou de nettoyer les imports. Laissez le code comme il apparaît dans Xcode. Le parser sait lire un vrai fichier .h ou .m.

2

Appuyez sur Convertir

Cliquez sur le bouton vert Convertir. L'outil lit l'Objective-C, conserve chaque @property, préserve les objets imbriqués et construit le XML en une passe. Un petit indicateur de chargement tourne pendant ce temps.

3

Copiez le XML

Le panneau de droite se remplit d'un XML indenté et bien formé que n'importe quel parser conforme aux standards — y compris NSXMLParser — acceptera. Copiez-le dans un plist, un corps de requête SOAP, une fixture de test ou votre documentation.

Quand ça sert vraiment

Construire des fixtures plist iOS

Vous avez un modèle Objective-C et il vous faut un Info.plist ou un plist de seed qui colle. Collez la classe, récupérez le XML, déposez-le dans votre bundle — sans écrire à la main des paires <code>&lt;dict&gt;</code> / <code>&lt;key&gt;</code>.

Fichiers de config XML Cocoa

Les vieilles apps Cocoa desktop livrent encore de la config XML. Transformez votre classe <code>Settings</code> en modèle prêt à éditer pour que la config corresponde au code qui la lit.

Clients SOAP / WCF legacy sur iOS

Si votre app iOS parle encore à un endpoint SOAP, vous pouvez coller la classe du contrat de requête et obtenir le corps de l'enveloppe XML — plus simple que de construire des arbres <code>NSXMLElement</code> à la main.

Alimenter des workflows XML Mac OS

Les vieilles intégrations AppleScript / Automator / XML-RPC attendent du XML. Collez le modèle Objective-C, récupérez le XML, donnez-le au workflow — pas de traduction manuelle.

Questions fréquentes

Puis-je coller plusieurs déclarations @interface d'un coup ?

Oui. Collez un fichier d'en-tête entier. Chaque @interface passe avec les types imbriqués expansés. Si votre @interface déclare des ivars explicitement (dans { }) ou utilise le style moderne @property uniquement, les deux fonctionnent pareil.

Comment les attributs @property sont-ils gérés ?

Les attributs comme (nonatomic, copy), (strong), (weak), (readonly) et (assign) sont des métadonnées pour le runtime — ils ne changent pas la forme sérialisée. Le nom de l'élément est le nom de la propriété. Les propriétés readonly sont émises quand même (elles ont toujours une valeur). Les propriétés calculées avec un getter custom sont traitées comme n'importe quelle autre propriété.

Et le nommage des iVar — est-ce que j'obtiens des éléments avec _underscore ?

Non. Si votre propriété est customerName et l'iVar de stockage est _customerName, l'élément XML est <customerName>. Le underscore est une convention Objective-C, pas un format filaire. Si vous voulez renommer un élément, renommez la @property elle-même et recollez.

Comment sont traités NSString, NSNumber, NSDecimalNumber, BOOL et NSDate ?

NSString devient un nœud texte avec échappement XML correct. NSNumber et NSDecimalNumber perdent leur enveloppe et deviennent du texte numérique brut. BOOL devient true / false (ou YES / NO si le code source utilise la convention plist). NSDate sort en chaîne ISO-8601. Les valeurs nil deviennent des éléments vides au lieu d'être supprimées.

Et NSArray, NSDictionary et les objets imbriqués ?

NSArray<OrderItem *> devient un élément conteneur avec un enfant par item, nommé d'après le type de l'élément : <items><OrderItem/><OrderItem/></items>. NSDictionary devient un conteneur de <entry><key/><value/></entry>. Les objets imbriqués (une propriété dont le type est une autre @interface) sont expansés sur place avec tous les champs intacts.

Mon code est-il stocké ?

Votre code est envoyé au backend pour la conversion et n'est pas persisté — on ne journalise pas la charge utile. Comme toujours avec un outil en ligne, si le code est vraiment sensible, relisez-le avant de le coller.

Autres outils qui peuvent servir

Objective-C vers XML n'est qu'une pièce du puzzle. Ces outils vont bien avec :