Procesamiento de Markdown en Swift para iOS y macOS: bibliotecas y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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ítulo


Ink 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

Recommendations