Travailler avec Markdown en Swift (iOS/macOS) : bibliothèques et exemples pratiques
Markdown est un langage de balisage léger, largement utilisé pour formater du texte dans la documentation, les chats et les applications éducatives. Dans l'écosystème Swift (iOS/macOS), il existe plusieurs bibliothèques matures qui permettent d'analyser, de rendre et de convertir le Markdown en vues natives. Dans cet article, nous examinerons les principaux outils : Down, Ink et SwiftMarkdown, et montrerons des exemples d'intégration dans SwiftUI et UIKit.
1. Bibliothèque Down (basée sur cmark)
Down est la bibliothèque la plus populaire pour travailler avec Markdown en Swift. Elle est basée sur l'analyseur C haute performance cmark et prend en charge la norme CommonMark. Down permet de convertir le Markdown en HTML, NSAttributedString, PDF et même en AST (arbre syntaxique abstrait).
Installation
Ajoutez dans Package.swift :
dependencies: [ .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.9.4")]Exemple : rendu Markdown en NSAttributedString
import Down
let markdownString = "# Titre
Ceci est du texte **gras** et *italique*."let down = Down(markdownString: markdownString)
do { let attributedString = try down.toAttributedString() // Utilisez dans UITextView ou UILabel textView.attributedText = attributedString} catch { print("Erreur d'analyse : \\(error)")}Down prend également en charge les styles personnalisés via DownStyler :
let styler = DownStyler(configuration: DownStylerConfiguration( fonts: FontCollection( heading1: .boldSystemFont(ofSize: 24), body: .systemFont(ofSize: 16) ), colors: ColorCollection( heading1: .systemBlue, body: .label )))let attributedString = try down.toAttributedString(styler: styler)2. Bibliothèque Ink (John Sundell)
Ink est un analyseur Markdown léger de l'auteur John Sundell. Il ne nécessite pas de dépendances externes (Swift pur) et est idéal pour les tâches simples : extraction de titres, listes, liens. Ink renvoie un arbre de blocs (éléments de niveau bloc) qui peut être personnalisé.
Installation via Swift Package Manager
dependencies: [ .package(url: "https://github.com/JohnSundell/Ink.git", from: "0.6.0")]Exemple : analyse et extraction de titres
import Ink
let markdown = """# Titre principal## Sous-titreTexte normal avec mise en évidence **gras**."""
let parser = MarkdownParser()let result = parser.parse(markdown)
for heading in result.headings { print("Niveau \\(heading.level) : \\(heading.text)")}// Sortie :// Niveau 1 : Titre principal// Niveau 2 : Sous-titreInk prend également en charge les modificateurs personnalisés pour étendre la syntaxe :
let modifier = Modifier(target: .inlineCode) { html, markdown in return "<span style=\\"color: red;\\">\\(html)</span>"}let parser = MarkdownParser(modifiers: [modifier])3. SwiftMarkdown (par Apple)
SwiftMarkdown est la bibliothèque officielle d'Apple, présentée à la WWDC 2022. Elle est profondément intégrée à l'écosystème SwiftUI et prend en charge toutes les extensions Markdown, y compris les tableaux, les blocs de code avec coloration syntaxique et les listes imbriquées. SwiftMarkdown utilise AttributedString de Foundation, ce qui simplifie la localisation et les polices dynamiques.
Installation
Ajoutez au projet via Xcode : File → Add Packages → apple/swift-markdown.
Exemple : affichage Markdown dans SwiftUI
import MarkdownUIimport SwiftUI
struct ContentView: View { let markdown = """ # Bienvenue Ceci est un **exemple** d'utilisat Aussi dans la bibliothèque
Travailler avec les archives ZIP en TypeScript : la bibliothèque JSZip et les utilitaires
Twig pour PHP : guide complet avec exemples
Configuration des applications Go (Golang) : bibliothèques et outils