Trabalhando com Markdown em Swift (iOS/macOS): bibliotecas e exemplos práticos
Markdown é uma linguagem de marcação leve, amplamente utilizada para formatar texto em documentação, chats e aplicativos educacionais. No ecossistema Swift (iOS/macOS), existem várias bibliotecas maduras que permitem analisar, renderizar e converter Markdown em visualizações nativas. Neste artigo, abordaremos as principais ferramentas: Down, Ink e SwiftMarkdown, além de mostrar exemplos de integração em SwiftUI e UIKit.
1. Biblioteca Down (baseada em cmark)
Down é a biblioteca mais popular para trabalhar com Markdown em Swift. Ela é baseada no analisador C de alto desempenho cmark e suporta o padrão CommonMark. Down permite converter Markdown em HTML, NSAttributedString, PDF e até mesmo em AST (árvore sintática abstrata).
Instalação
Adicione em Package.swift:
dependencies: [ .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.9.4")]Exemplo: renderizando Markdown em NSAttributedString
import Down
let markdownString = "# Título
Este é um texto **negrito** e *itálico*."let down = Down(markdownString: markdownString)
do { let attributedString = try down.toAttributedString() // Use em UITextView ou UILabel textView.attributedText = attributedString} catch { print("Erro de análise: \\(error)")}Down também suporta estilos personalizados através do 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 é um analisador Markdown leve do autor John Sundell. Ele não requer dependências externas (Swift puro) e é ideal para tarefas simples: extrair títulos, listas, links. Ink retorna uma árvore de blocos (elementos de nível de bloco) que pode ser personalizada.
Instalação via Swift Package Manager
dependencies: [ .package(url: "https://github.com/JohnSundell/Ink.git", from: "0.6.0")]Exemplo: análise e extração de títulos
import Ink
let markdown = """# Título Principal## SubtítuloTexto normal com destaque **negrito**."""
let parser = MarkdownParser()let result = parser.parse(markdown)
for heading in result.headings { print("Nível \\(heading.level): \\(heading.text)")}// Saída:// Nível 1: Título Principal// Nível 2: SubtítuloInk também suporta modificadores personalizados para estender a sintaxe:
let modifier = Modifier(target: .inlineCode) { html, markdown in return "<span style=\\"color: red;\\">\\(html)</span>"}let parser = MarkdownParser(modifiers: [modifier])3. SwiftMarkdown (da Apple)
SwiftMarkdown é a biblioteca oficial da Apple, apresentada na WWDC 2022. Ela é profundamente integrada ao ecossistema SwiftUI e suporta todas as extensões Markdown, incluindo tabelas, blocos de código com destaque e listas aninhadas. SwiftMarkdown usa AttributedString do Foundation, simplificando localização e fontes dinâmicas.
Instalação
Adicione ao projeto via Xcode: File → Add Packages → apple/swift-markdown.
Exemplo: exibindo Markdown em SwiftUI
import MarkdownUIimport SwiftUI
struct ContentView: View { let markdown = """ # Bem-vindo Este é um **exemplo** usado Também na biblioteca
WireMock.Net para C# (.NET): guia completo com exemplos
Envio de SMS em Swift (iOS/macOS): API da biblioteca MessageUI
NetworkExtension Swift: Guia completo com exemplos práticos
Puppeteer para JavaScript (Node.js): guia completo com exemplos
SwiftLint para Swift: guia completo com exemplos práticos