Travailler avec YAML en Swift (iOS/macOS) : bibliothèque Yams
\n\nYAML (YAML Ain't Markup Language) est un format pratique de sérialisation de données, souvent utilisé pour les fichiers de configuration, la description des dépendances (par exemple, docker-compose.yml), ainsi que dans les projets nécessitant une structure de données lisible et concise. Dans l'écosystème Apple, plusieurs bibliothèques existent pour travailler avec YAML en Swift, mais la plus populaire et la plus stable est Yams — une bibliothèque rapide et simple d'utilisation, écrite en Swift pur.
Qu'est-ce que Yams ?
\n\nYams est une bibliothèque open source qui offre un support complet pour le parsing et la sérialisation de YAML en Swift. Elle est compatible avec iOS, macOS, tvOS et watchOS. Yams prend en charge la spécification YAML 1.2 et permet de convertir des chaînes YAML en structures Swift (dictionnaires, tableaux, chaînes, nombres, booléens) et inversement.
\n\nPrincipales fonctionnalités de Yams :
\n- \n
- Parsing d'une chaîne YAML en
Any(généralement[String: Any]ou[Any]). \n - Sérialisation d'objets Swift en YAML. \n
- Support des structures imbriquées, des tableaux, des documents multiples. \n
- Gestion des erreurs avec des messages détaillés. \n
- Entièrement compatible avec Swift Package Manager (SPM) et CocoaPods. \n
Installation de Yams dans le projet
\n\nVous pouvez installer Yams via Swift Package Manager (recommandé) ou CocoaPods.
\n\nVia Swift Package Manager
\n\n- \n
- Dans Xcode, sélectionnez File → Add Packages. \n
- Collez l'URL du dépôt :
https://github.com/jpsim/Yams.git\n - Choisissez la version (la dernière version stable est recommandée) et cliquez sur Add Package. \n
Ou ajoutez la dépendance dans Package.swift :
// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n name: "MyProject",\n dependencies: [\n .package(url: "https://github.com/jpsim/Yams.git", from: "5.0.0")\n ],\n targets: [\n .target(\n name: "MyProject",\n dependencies: ["Yams"])\n ]\n)\n\nVia CocoaPods
\n\nAjoutez la ligne dans votre Podfile :
pod 'Yams', '~> 5.0'\n\nExécutez ensuite pod install.
Utilisation de base : parsing YAML
\n\nAprès l'installation, importez la bibliothèque et utilisez Yams.load(yaml:) pour analyser une chaîne.
import Yams\n\nlet yamlString = """\nname: Swift\ntype: language\nversions:\n - 5.5\n - 5.6\n - 5.7\nfeatures:\n protocol_oriented: true\n value_semantics: true\n"""\n\ndo {\n if let data = try Yams.load(yaml: yamlString) as? [String: Any] {\n print("Name: \\(data["name"] ?? "")")\n print("Versions: \\(data["versions"] ?? [])")\n if let features = data["features"] as? [String: Bool] {\n print("Protocol oriented: \\(features["protocol_oriented"] ?? false)")\n }\n }\n} catch {\n print("Erreur de parsing YAML : \\(error.localizedDescription)")\n}\n\nRésultat de l'exécution :
\nName: Swift\nVersions: [5.5, 5.6, 5.7]\nProtocol oriented: true\n\nSérialisation d'objets Swift en YAML
\n\nPour la conversion inverse, utilisez Yams.dump(object:) :
import Yams\n\nlet dictionary: [String: Any] = [\n "app": "MyApp",\n "version": 2.0,\n "features": ["dark_mode", "notifications"],\n "settings": [\n "autosave": true,\n "timeout": 30\n ]\n]\n\ndo {\n let yamlString = try Yams.dump(object: dictionary)\n print(yamlString)\n} catch {\n print("Erreur de sérialisation : \\(error.localizedDescription)")\n}\n\nSortie :
\napp: MyApp\nfeatures:\n - dark_mode\n - notifications\nsettings:\n autosave: true\n timeout: 30\n