Trabajar con Markdown en Swift (iOS/macOS): bibliotecas y ejemplos prácticos
Markdown es un lenguaje de marcado ligero, ampliamente utilizado para formatear texto en documentación, chats y aplicaciones educativas. En el ecosistema Swift (iOS/macOS) existen varias bibliotecas maduras que permiten analizar, renderizar y convertir Markdown en vistas nativas. En este artículo, analizaremos las herramientas principales: Down, Ink y SwiftMarkdown, y mostraremos ejemplos de integración en SwiftUI y UIKit.
1. Biblioteca Down (basada en cmark)
Down es la biblioteca más popular para trabajar con Markdown en Swift. Está basada en el analizador C de alto rendimiento cmark y es compatible con el estándar CommonMark. Down permite convertir Markdown a HTML, NSAttributedString, PDF e incluso a AST (árbol de sintaxis abstracta).
Instalación
Añada en Package.swift:
dependencies: [ .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.9.4")]Ejemplo: renderizar Markdown a NSAttributedString
import Down
let markdownString = "# Título
Este es texto **negrita** y *cursiva*."let down = Down(markdownString: markdownString)
do { let attributedString = try down.toAttributedString() // Úselo en UITextView o UILabel textView.attributedText = attributedString} catch { print("Error de análisis: \\(error)")}Down también admite estilos personalizados a través de 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. Biblioteca Ink (John Sundell)
Ink es un analizador Markdown ligero del autor John Sundell. No requiere dependencias externas (Swift puro) y es ideal para tareas simples: extraer títulos, listas, enlaces. Ink devuelve un árbol de elementos a nivel de bloque (block-level elements) que se puede personalizar.
Instalación a través de Swift Package Manager
dependencies: [ .package(url: "https://github.com/JohnSundell/Ink.git", from: "0.6.0")]Ejemplo: análisis y extracción de títulos
import Ink
let markdown = """# Título principal## SubtítuloTexto normal con resaltado en **negrita**."""
let parser = MarkdownParser()let result = parser.parse(markdown)
for heading in result.headings { print("Nivel \\(heading.level): \\(heading.text)")}// Salida:// Nivel 1: Título principal// Nivel 2: SubtítuloInk también admite modificadores personalizados para ampliar la sintaxis:
let modifier = Modifier(target: .inlineCode) { html, markdown in return "<span style=\\"color: red;\\">\\(html)</span>"}let parser = MarkdownParser(modifiers: [modifier])3. SwiftMarkdown (de Apple)
SwiftMarkdown es la biblioteca oficial de Apple, presentada en la WWDC 2022. Está profundamente integrada con el ecosistema SwiftUI y admite todas las extensiones de Markdown, incluyendo tablas, bloques de código con resaltado y listas anidadas. SwiftMarkdown utiliza AttributedString de Foundation, lo que simplifica la localización y las fuentes dinámicas.
Instalación
Añádala al proyecto a través de Xcode: File → Add Packages → apple/swift-markdown.
Ejemplo: mostrar Markdown en SwiftUI
import MarkdownUIimport SwiftUI
struct ContentView: View { let markdown = """ # Bienvenido Este es un **ejemplo** de uso También en la biblioteca
Procesamiento de imágenes en Java: bibliotecas, herramientas y ejemplos de código
Procesamiento y análisis de Markdown en PHP: bibliotecas y ejemplos
Bibliotecas WebSocket de Java: Guía completa para implementación en tiempo real
Envío de correo electrónico en Swift (iOS/macOS): MFMailComposeViewController y SMTP
Bull para JavaScript (Node.js): guía completa con ejemplos