Introducción
Compartir contenido es una de las funciones más importantes de cualquier aplicación moderna. Desde enviar una imagen por WhatsApp, hasta compartir un enlace en Twitter o guardar un archivo en iCloud, los usuarios esperan que una app les permita distribuir su contenido de forma sencilla y nativa.
Apple ofrece una solución elegante y potente para esta tarea en SwiftUI: ShareLink. Introducido a partir de iOS 16, macOS 13 y versiones posteriores, ShareLink permite integrar la hoja de compartir del sistema en pocas líneas de código, respetando la experiencia de usuario del ecosistema Apple.
En este tutorial aprenderás paso a paso cómo usar ShareLink en SwiftUI para compartir texto, URLs, imágenes, archivos y contenido personalizado desde una app creada con Xcode. También veremos buenas prácticas, casos reales y cómo personalizar la experiencia de compartición.
¿Qué es ShareLink?
ShareLink es una vista nativa de SwiftUI que muestra el share sheet del sistema (la misma hoja que aparece cuando pulsas el botón “Compartir” en Safari o Fotos). Permite al usuario enviar contenido a:
- AirDrop
- Mensajes
- WhatsApp, Telegram, etc.
- Guardar en Archivos
- Redes sociales
- Apps de terceros
La gran ventaja de ShareLink es que:
- No necesitas usar UIKit
- Se integra de forma natural con SwiftUI
- Respeta accesibilidad, iPad, macOS y multiplataforma
- Funciona con cualquier tipo de contenido
Requisitos del proyecto
Antes de comenzar, asegúrate de tener:
- Xcode 14 o superior
- iOS 16+, macOS 13+, iPadOS 16+
- Un proyecto SwiftUI
Para crear un proyecto nuevo:
- Abre Xcode
- Pulsa File → New → Project
- Selecciona App
- Interfaz: SwiftUI
- Lenguaje: Swift
Compartir texto con ShareLink
El caso más básico es compartir un texto.
import SwiftUI
struct ContentView: View {
let texto = "Hola, esto es un texto compartido desde mi app SwiftUI"
var body: some View {
VStack {
ShareLink(item: texto) {
Label("Compartir texto", systemImage: "square.and.arrow.up")
}
.padding()
}
}
}Cuando el usuario pulsa el botón, se abre el panel de compartir del sistema con ese texto listo para enviarse.
Esto funciona automáticamente porque String cumple el protocolo Transferable.
Compartir enlaces (URLs)
Uno de los usos más comunes es compartir enlaces.
let url = URL(string: "https://www.apple.com")!
ShareLink(item: url) {
Label("Compartir enlace", systemImage: "link")
}El sistema reconocerá que es una URL y mostrará opciones como abrir en Safari, enviar por mensajes o copiar.
Compartir imágenes
Para compartir imágenes usamos Image o UIImage.
if let image = UIImage(named: "foto") {
ShareLink(item: image) {
Label("Compartir imagen", systemImage: "photo")
}
}Esto permite que el usuario:
- Guarde la imagen
- La envíe por AirDrop
- La comparta en redes sociales
Compartir múltiples elementos
Puedes compartir varios elementos a la vez.
let texto = "Mira esta imagen"
let url = URL(string: "https://www.apple.com")!
ShareLink(items: [texto, url]) {
Label("Compartir todo", systemImage: "square.and.arrow.up")
}El usuario recibirá ambos elementos en una sola operación.
Personalizar el título del contenido compartido
Puedes añadir un título descriptivo:
ShareLink(item: url, subject: Text("Web recomendada")) {
Label("Compartir", systemImage: "square.and.arrow.up")
}Esto aparece en Mail y apps compatibles.
Compartir archivos (PDF, imágenes, vídeos, etc.)
Para compartir archivos debes usar una URL local.
Ejemplo: compartir un PDF que está en el bundle:
if let pdfURL = Bundle.main.url(forResource: "manual", withExtension: "pdf") {
ShareLink(item: pdfURL) {
Label("Compartir PDF", systemImage: "doc")
}
}También puedes compartir archivos creados dinámicamente (por ejemplo, exportar un informe).
Crear contenido personalizado con Transferable
Si tienes un tipo de dato propio, puedes hacerlo compatible con ShareLink.
Ejemplo: un modelo Articulo.
struct Articulo: Transferable {
let titulo: String
let contenido: String
static var transferRepresentation: some TransferRepresentation {
ProxyRepresentation { articulo in
"\(articulo.titulo)\n\n\(articulo.contenido)"
}
}
}Luego:
let articulo = Articulo(titulo: "SwiftUI", contenido: "ShareLink es increíble")
ShareLink(item: articulo) {
Label("Compartir artículo", systemImage: "doc.text")
}El sistema enviará el texto generado.
Usar ShareLink dentro de listas
List(articulos) { articulo in
HStack {
Text(articulo.titulo)
Spacer()
ShareLink(item: articulo) {
Image(systemName: "square.and.arrow.up")
}
}
}
Esto es ideal para apps de notas, noticias o archivos.
Integrar ShareLink en una app real
Supongamos una app de notas:
struct Nota: Identifiable, Transferable {
let id = UUID()
let texto: String
static var transferRepresentation: some TransferRepresentation {
ProxyRepresentation { nota in
nota.texto
}
}
}Vista:
struct ContentView: View {
let notas = [
Nota(texto: "Comprar leche"),
Nota(texto: "Llamar al médico")
]
var body: some View {
List(notas) { nota in
HStack {
Text(nota.texto)
Spacer()
ShareLink(item: nota) {
Image(systemName: "square.and.arrow.up")
}
}
}
}
}Personalizar la vista del botón
Puedes diseñar cualquier interfaz:
ShareLink(item: url) {
HStack {
Image(systemName: "paperplane.fill")
Text("Enviar")
}
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}Soporte para iPad y macOS
ShareLink funciona automáticamente en:
- iPhone
- iPad
- Mac
En iPad se muestra como popover, en macOS como menú contextual.
Accesibilidad
ShareLink respeta:
- VoiceOver
- Dynamic Type
- Contraste
- Idiomas del sistema
No necesitas implementar nada extra.
Errores comunes
1. Usar tipos que no cumplen Transferable
Solución: convierte el objeto a String, URL, Data o implementa Transferable.
2. Intentar compartir rutas remotas
Solo se pueden compartir archivos locales.
3. No probar en dispositivo real
Algunas apps no aparecen en el simulador.
Buenas prácticas
- Usa iconos del sistema
- No fuerces formatos raros
- Permite compartir el contenido más útil
- Usa títulos descriptivos
- Prueba AirDrop, Mail y Mensajes
Conclusión
ShareLink es una de las mejores APIs modernas de SwiftUI. Permite integrar el sistema de compartir de Apple en solo unas líneas, con soporte multiplataforma, accesibilidad y compatibilidad con apps del sistema y de terceros.
Implementar compartir contenido en tu app mejora enormemente la experiencia de usuario, aumenta la viralidad y hace que tu aplicación se sienta profesional y bien integrada en el ecosistema Apple.
Si estás desarrollando una app en SwiftUI, ShareLink debería ser una herramienta obligatoria en tu caja de herramientas.
Si tienes cualquier duda sobre este artículo, contacta conmigo y estaré encantado de ayudarte 🙂. Puedes contactar conmigo en mi perfil de X o en mi perfil de Instagram








