Aquí tienes todos los enlaces a posts, vídeos, repositorios y demás para aprender a programar en Swift.
No siguen un orden establecido, puedes ir avanzando por cualquiera de ellos.

Los emojis que te indicarán el idioma ( 🇬🇧 🇪🇸 ) y nivel (🐣 🐥 🐔).

Pensados para personas que, como yo, tienen el objetivo de aprender a programar en Swift sin tener conocimientos previos del mundo de la programación.

Foundation

🇬🇧🐥 Post Guía Interactiva de Git
🇬🇧🐣 Post 3 errores a evitar con los opcionales
🇬🇧🐥 Post Protocolo Equatable para comparar objetos
🇬🇧🐣 Post Swift fileprivate y private
🇬🇧🐥 Post 3 errores a evitar con los closures y los retain cycles
🇬🇧🐣 Post Cuando deberías usar una propiedad calculada y cuando un método
🇬🇧🐣 Post Operador ternario (?:)
🇬🇧🐥 Post La guía de estilo de Swift para Kodeko
🇬🇧🐣 Diferentes formatos de fechas y horas
🇬🇧🐣 Operador % Remanente
🇬🇧 🐣 Cuando deberíamos usar navigation y cuando present
🇬🇧 🐣 Convenciones en swift para denominar variables, funciones y protocolos
🇪🇸 🐣 Conceptos Básicos en 3 horas
🇬🇧 🐣 Bucles For-In
🇬🇧 🐥 Atributos de estilos en cadenas con AttributedString
🇬🇧 🐥 Obtén la url de archivos del sistema

UIKit

🇬🇧🐣 Video Testing, refactoring Singleton, ViewControllers
🇬🇧🐥 Post Usar diferentes constraints en función del clase de tamaño del dispositivo
🇬🇧🐣 Post Guía de uso de los storyboards
🇬🇧🐥 Post Como usar SwiftUI con UIViewController en Storyboard
🇬🇧🐣 Post Usando una view de SwiftUI en UIKit como una UIView
🇬🇧🐣 Tutorial de recordatorios
🇪🇸 🐥 Crea carpetas y archivos con FileManager
🇪🇸🐣Usar childViewControllers
🇬🇧🐥CollectionViews. Secciones con scrollView Horizontal y listado de ítems Vertical
🇬🇧🐥Inyección de dependencias. La manera correcta de compartir el estado entre ViewControllers
🇬🇧 🐥 Introducción a los test unitarios
🇬🇧🐥Tutoriales: Calendario Semanal, Eventos
🇪🇸🐣Persistencia de datos con UserDefaults
🇪🇸 🐥 Crea CollectionViews con UICollectionView, UICollectionViewCompositionalLayout y Diffable
🇪🇸 🐣 Navegación con UINavigationController Push
🇪🇸 🐣 Navegación con UISheetPresentationController
🇬🇧 🐔 Construyendo una UICollectionView Organizable
🇬🇧🐣Diffable data source para table view
🇬🇧🐥Tutorial refactorizando de MVC a MVVM. OneView app. Weather
🇬🇧🐣Cómo crear botones redondeados
🇬🇧 🐣 Vídeo corto sobre URL Session Get y Post
🇬🇧 🐣 Probando image rendering mode
🇬🇧 🐣 Cómo cambiar el color de UIImage
🇬🇧 🐣 Como posicionar una imagen del lado derecho en un UIButton
🇬🇧 🐣 Cómo cambiar el color de una UIImage
🇬🇧 🐣 Implementando el UITableViewController
🇬🇧 🐣 Tutorial de Configuración de UIButton
🇬🇧 🐣 Tutorial Construyendo una UICollectionView Organizable
🇬🇧 🐣 Implementando el UITableViewController
🇬🇧 🐥 Utiliza UIDragPreview para arrastrar ítems en TableViews
🇬🇧 🐥 Cómo hacer transparente la barra de navegación Navigation Bar

SwiftUI

🇬🇧🐔 Post Picture in Picture Cheat Sheet
🇬🇧🐣 Post Formas y Estilo de botones
🇪🇸 🐔 Post Componentes Personalizados
🇬🇧 🐣 Post LabeledContent: Sus variantes
🇬🇧🐣 Post Crear viewModifiers personalizados
🇬🇧🐥 Post Cómo solicitar a tus usuarios una reseña de la app
🇬🇧🐥 Post 7 formas de evitar código duplicado
🇬🇧🐣 Post Animar SF Symbols con symbolEffect
🇬🇧🐣 Post Presentando contenido en Páginas
🇬🇧🐥 Post Como abrir una webpage dentro de la app con WebKit
🇬🇧🐣 Post TextField expandibles
🇬🇧🐥 Post Guía rápida sobre las Tables
🇬🇧🐣 Post Añadir una launch screen
🇬🇧🐥 Post Compartir contenido con ShareLink
🇬🇧🐥 Post Menús contextuales para tablas
🇬🇧🐥 Post Contenedores de vistas personalizados
🇪🇸🐣 Post View Modifiers
🇬🇧🐣 Post Mostrar mensajes de confirmación
🇬🇧🐣 Post Estilos de PickerView
🇬🇧🐥 Post Inyectando dependencias a través de EnvironmentObject (Necesita registro)
🇪🇸🐣 Video NavigationBar con Buttons y background
🇬🇧🐣 Post ProgressView
🇬🇧🐣 Post Modificador de vista onContinuousHover
🇬🇧🐣 Post Toolbar personalizadas en el iPad
🇪🇸🐣 Video Modificador de vista Overlay
🇬🇧🐣 Post Componentes de estilo. Buttons, Sliders
🇬🇧🐥 Post Cancelar una tarea en background con Async-Await
🇬🇧🐣 Post Probando animation y withAnimation
🇪🇸🐣 Video Modificador de vista: mask
🇪🇸🐣 VídeoModificadores: redacted
🇬🇧🐣 Post Como ocultar la navigationBar
🇬🇧🐣 Post Crear polígonos y estrellas con Shape
🇬🇧🐣 Post Text Modifiers
🇬🇧🐣 Post Añadir acciones personalizadas a la barra de navegación
🇬🇧🐣 Post Cambiar el tamaño del botón
🇬🇧🐣 Crear botones reutilizables
🇬🇧 🐣 Guía de inicio a los buttons
🇬🇧🐣 Los 5 estilos de buttons en iOS
🇬🇧🐣 Modificadores de vista: ClipShapes
🇬🇧🐥 Presentación de Sheets con ejemplos
🇬🇧🐣 Ocultar el teclado
🇬🇧🐣 Seleccionar múltiples filas de una Lista
🇬🇧🐣 Presentar sheets de diferentes alturas
🇬🇧🐣 Implementando un videoPlayer
🇬🇧🐣 Usa ForEach para crear Listas
🇬🇧🐣 Charts con degradados
🇬🇧🐣 ProgressView. Descontando Segundos
🇬🇧🐥 Refactorizando Sound Cloud a SwiftUI
🇬🇧🐣 Como cambiar el color de la TabView
🇬🇧🐣 Practicando Grids (lo equivalente a UICollectionView)
🇬🇧🐣 Como añadir atajos de teclado
🇬🇧🐣 Cómo personalizar la alineación de una vista
🇬🇧🐥 Layouts condicionales
🇬🇧🐣 Ejemplos con Grid Layout
🇬🇧🐣 Personaliza los container layout con backslash y sizeThatFits
🇬🇧🐣 Personalizar la toolbar
🇬🇧 🐣 Configuración del SplitView
🇬🇧 🐣 Alertas y los diálogos que puedes incluir
🇬🇧 🐣 Como cambiar el color de la barra de navegación en iOS16
🇬🇧 🐣 Implementa un Vídeo Player con AVKit
🇬🇧 🐣 Oculta el teclado en un scrollView con scrollDismissesKeyboard
🇬🇧 🐣 Establece el número de líneas en una vista de texto con lineLimit
🇬🇧 🐣 Añade textFields multilínea
🇪🇸🐣 PhotosPicker
🇪🇸🐣 Sheets
🇪🇸🐣 MultidatePicker y ShareLink
🇪🇸🐣 Grids
🇪🇸🐣 NavigationStack
🇪🇸 🐣 LongPress Gesture
🇪🇸 🐣 Usar Regex y RegexBuilder
🇪🇸 🐣 Selecciona fechas y comparte enlaces con MultidatePicker y ShareLink
🇪🇸 🐣 Presenta vistas a altura variable con Sheets
🇪🇸 🐣 Vista de Grids
🇪🇸 🐣 Crea gráficas de barras
🇪🇸 🐣 Gráficas Gauge
🇪🇸 🐣 Permite una selección de fotos con PhotosPicker
🇪🇸 🐣 Añade diferentes idiomas a tu app
🇪🇸 🐥 Crear gráficos de barras
🇪🇸 🐥 Gráfico y Acelerómetro
🇪🇸 🐥 Aprende a guardar, modificar y eliminar datos en Cloud Firestore de Firebase
🇬🇧 🐣 Que es una variant en SF Symbols
🇬🇧 🐣 Crear una app desde SwiftPlaygrounds
🇬🇧 🐣 Botones de igual tamaño en un VStack
🇬🇧 🐣 Aplicando la vista Gauge
🇬🇧 🐣 Añadir una alerta con TextFields
🇬🇧 🐣 Reemplaza GeometryReader por ViewThatFits
🇬🇧 🐣 Como cambiar el color de la barra de estado (status bar color)
🇬🇧 🐣 Oculta el teclado al hacer scroll con scrollDismissesKeyboardscrollDismissesKeyboard
🇬🇧 🐣 Label: una manera estándar de identificar ítems de la interfaz
🇬🇧 🐥 DragGesture for fullScreenCover
🇬🇧 🐥 Utilizando el ViewBuilder
🇬🇧 🐥 Usar View Modifiers para mostrar un Empty State
🇬🇧 🐥 Transactions and Animations
🇬🇧 🐥 Gráfica de pastel
🇬🇧 🐥 Tutorial Crea tu primera App
🇬🇧 🐥 Cómo crear el diseño de fotos de perfiles hexagonales
🇬🇧 🐥 Label: una manera estándar de identificar ítems de la interface
🇬🇧 🐥 Animaciones Materiales para descargar

Swift

🇬🇧 🐥 Post Define errores personalizados con su descripción
🇬🇧 🐔 Post Encapsular librerías de terceros en clases
🇬🇧 🐥 Post Extensiones: Cuándo y Cómo
🇬🇧🐣 Post Mejor usar guard let en lugar de if let
🇬🇧🐥 Post Map en diccionarios
🇬🇧🐥 Video Descubre el diseño de la navegación en iOS
🇬🇧🐥 Post Crea gráficas de pastel o circulares con Charts
🇬🇧🐥 Post SwiftData by Example
🇬🇧🐥 Post Animando vistas con PhaseAnimator
🇪🇸🐣 Video  DarkMode Varios iconos, SplashScreen Vibración háptica, Usar FaceId, Pedir valoraciones
🇬🇧🐣 Video Aprende SwiftUI (de pago, desde 1€)
🇪🇸🐣 Post Vibración háptica
🇬🇧🐥 Post 3 tips para escribir código más legible
🇬🇧🐥 Post Como funciona @MainActorAuthor
🇬🇧🐥 Post Guía para usar Timer
🇬🇧🐔 Post Diferencias entre closures y protocolosTony Hoare, 
🇬🇧🐥 Post Generando colores arbitrarios
🇬🇧🐔 Post Crear el thumbnail de una imagen programáticamente
🇬🇧🐔 Post Guardar el valor de un enum en CoreData
🇬🇧🐥 Vídeo Protocolo Equatable
🇬🇧🐥 Post Algoritmo explicado: Cómo eliminar elementos duplicados de un array
🇬🇧🐥 Post Conteo Automático de Referencias. Automatic Reference Counting (ARC)
🇬🇧🐥 Video Embracing Algortimos (WWDC 2015)
🇬🇧🐥 Video Programación Orientada a Protocolos (WWDC 2015)
🇬🇧🐣 Post Método prefix en arrays
🇬🇧🐥 Post Guardar y leer un array en UserDefaults
🇬🇧🐣 Post Métodos join y ListFormatter
🇬🇧🐥 Post Los enums en profundidad
🇪🇸🐣 Aprende Swift en Y minutos
🇬🇧🐣 Variables calculadas
🇬🇧🐣 Post Guía rápida de stride (rangos incrementales secuenciales)
🇬🇧🐣 Enums con nombres de valores
🇬🇧🐥 Post Que es lo que hace THROW en las funciones
🇬🇧🐥 Post Criterios para hacer buenos test: FIRST
🇬🇧🐥 Estructura de los test unitarios
🇬🇧🐥 Hacer tests con throws y errores
🇬🇧🐣 Parámetros InOut en funciones
🇪🇸 🐥 The Swift Programming Language en Español (en proceso de traducción)
🇬🇧🐥 Usando la concurrencia en Swift usando completion handlers
🇬🇧🐥 Buscar y reemplazar en XCode usando Regex
🇬🇧 🐥 Cómo guardar un enum con un valor asociado en UserDefaults y en un plist
🇬🇧 🐥 Los closures explicados con ejemplos
🇬🇧 🐥 Asegúrate de que se cumplen las condiciones requeridas con allSatisfy
🇬🇧 🐥 Cómo retrasar una tarea asíncrona con sleep
🇬🇧 🐔 Básicos de Regex (expresiones regulares)
🇬🇧 🐔 Dando formato a tipos propios (ISBN)
🇬🇧 🐔 Guía para principiantes sobre genéricos
🇬🇧 🐔 Guía para principiantes sobre genéricos
🇬🇧 🐔 Diferencias entre Non-Fatal Errors y Fatal Crashes
🇬🇧 🐔 Tutorial para aprender a hacer TDD (Test-Driven Development) Desarrollo conducido por prueba
🇬🇧 🐔 Diferencias Structs vs class en swift explicado
🇬🇧 🐔 Cuando usar guard o if en swift

Arquitectura

🇬🇧🐣 Post Patrones de Navegación en iOS
🇪🇸🐣 Post Arquitectura MVP
🇪🇸🐥 Video Arquitectura MVVM, UIKit y Combine
🇪🇸🐥 Post Arquitectura VIPER – Parte 1
🇪🇸🐥 Post Arquitectura VIPER – Parte 2
🇪🇸🐥 Post Patrones de diseño: Delegación (Delegate)
🇪🇸🐥 Post Patrones de Diseño en Swift. Catálogo de Ejemplos
🇪🇸🐥 Video Model-View-Controller con coordinators
🇬🇧🐥 Patrones de diseño. Tipos, Características
🇬🇧 🐥 VIPER View Interactor Presenter Entity Router
🇪🇸 🐥 TCA: The Composable Architecture
🇬🇧 🐣 MVC: Model View Controller
🇬🇧 🐥 VIP: View, Interactor, Presenter
🇬🇧 🐥 MVVM: Model View ViewModel
🇬🇧 🐥 VIPER: View, Interactor, Presenter, Entity y Router
🇬🇧 🐥 VIP: View, Interactor, Presenter

Xcode

🇬🇧🐥 Video Source Control en XCode
🇬🇧🐥 Post Descubre las funciones avanzadas de los breakpoints en Xcode
🇬🇧🐥 Post Lo que necesitas saber sobre las API
🇪🇸🐣 Post Usar diferentes iconos para la app
🇬🇧🐣 Post Atajos de Xcode
🇬🇧🐥 Post Archivo Info.plist e info tab
🇬🇧🐥 Post Añadir y quitar dependencias de paquetes con Swift Package Manager
🇬🇧🐣Tips y atajos de Xcode
🇬🇧🐣Diferentes tipos de print en la consola
🇬🇧 🐣 Editar múltiples Constraints
🇬🇧 🐣 Tips de Xcode y Swift
🇬🇧 🐥 Atajos en Xcode
🇬🇧 🐥 Reemplaza código en tu proyecto con regular expressions
🇬🇧 🐔 30 tips que te harán mejor desarrollador iOS
🇬🇧 🐔 Diferencias entre Non-Fatal Errors y Fatal Crashes

API

🇬🇧🐥 Post Respuestas a dudas sobre Git
🇬🇧🐥 Post Primeros pasos con Create ML
🇪🇸🐥 Post Combine. Operador retry
🇬🇧🐥 Post HomeKit: Añadiendo casas y  habitaciones
🇪🇸🐥 Video Combine: operador try
🇬🇧🐣 Post Como utilizar los filtros integrados de CoreImage
🇬🇧🐣 Post Listado de los filtros integrados en Core Images

Extras

🇬🇧🐣 Video Como hacer que tu app parezca como si hubieras contratado a un diseñador 
🇬🇧🐥 Post WWDC 2023 Viewing Guide
🇬🇧🐣 Video Cómo iniciar con un prototipo de lo que podría ser tu app
🇪🇸🐥 Libro Resumen de El libro negro del programador
🇪🇸🐔 Libro Curso: Introducción a Docker
🇬🇧🐣 Libro iOS Tutorial Book From Beginner to Pro Jonathan Rasmusson
🇬🇧🐥 Libro Introducción a las Ciencias de la Computación CS50x David J. Malan (Harvard)
🇬🇧🐣 Libro iOS Succinctly (2014)
🇬🇧🐣 Libro Aprende Swift: un recorrido vertiginoso por el lenguaje de programación Swift (2015)
🇬🇧🐣 Libro iOS Accessibility Handbook PDF (2016)
🇬🇧🐣 Libro iOS Developer notes for professionals PDF (2018)
🇬🇧🐣 Libro Swift: a quick reference guide (2019)
🇬🇧🐣 Libro Swift Tutorial
🇬🇧🐣 Libro Hacking with Swift
🇬🇧🐣 Libro 100 Dias iOS SwiftUi Edition
🇬🇧🐣 Post Side Projects: Consejos para llevarlos con éxito
🇬🇧🐣 App Developer Videos y Novedades sobre Swift
🇬🇧🐣 Unwrap App pea aprender a programar Paul Hudson Hacking with Swift
🇬🇧🐣 App para aprender a programar en SwiftUI por Swiftlyrush
🇬🇧🐥 Entendiendo el código Legado
🇪🇸🐣 Podcast sobre gestión de proyectos8187379
🇬🇧🐣 Añade colaboradores a tu proyecto con GitHub y Xcode
🇬🇧🐥 Algoritmo: Subcadena más larga sin repetirse explicado
🇬🇧🐣 Avatares aleatorios para pruebas
🇬🇧🐣 Podcast. Tu no eres el mismo de hace diez años ni serás el mismo dentro de diez
🇬🇧🐣 GitHub desde 0
🇬🇧🐣 Porcentaje de adopción de las versiones de iOS en iPhone y iPad
🇬🇧🐥 RapidAPI. Listado de Apis
🇬🇧 🐣 Tamaños de pantalla del iPhone 14
🇬🇧 🐣 Ejemplo de cómo mostrar tus proyectos
🇬🇧 🐣 App para aprender Swift iPhone, iPad
🇬🇧 🐣 App iPhone y iPad para aprender SwiftUI
🇪🇸 Infografía, pregúntate lo siguiente sobre tu app
🇪🇸 Personas ocupadas vs personas productivas
🇪🇸 UI, UX, CX ¿Que significan?
🇪🇸 🐲 Aprende Ciencias de la computación
🇬🇧 50 cosas que me hubiera gustado saber en mi primer empleo como desarrollador (Parte 1)
🇬🇧 50 cosas que me hubiera gustado saber en mi primer empleo como desarrollador (Parte 2)
🇬🇧 🐣 Como convertirse en desarrollador iOS (parte 1)
🇬🇧 🐥 Algoritmos en imágenes
🇬🇧 🐲Estructura e interpretación de programas informáticos. MIT. Harold Abelson, Gerald Jay Sussman

SoftSkills

🇪🇸 ¿Podemos mejorar nuestros hábitos? Por Ramón Nogueras – Ted en Español
🇬🇧 🐣 8 consejos que deberías seguir si quieres iniciarte como programador
🇬🇧 🐣 5 errores comunes de programadores en sus proyectos y cómo evitarlos

Librerías de terceros

🇬🇧🐔 Post Frameworks para swift de lado servidor
🇬🇧🐥 Swift Package Index. Un listado de librerías de terceros compatibles con Swift Package Manager (SPM)
🇪🇸 🐣 Tutorial CocaPods
🇪🇸 🐣 Tutorial de Introducción a AlamoFire
🇪🇸 🐣 Como integrar Firebase a tu proyecto de Xcode con Swift Package Manager
🇪🇸 🐥 Crea una BD en Firebase para usarla desde tu app
🇪🇸 🐥 Integrar Firebase para autenticación con email y password
🇪🇸 🐥 Autenticación con Firebase vinculados con diferentes proveedores (Google, Facebook, Twitter)
🇪🇸 🐔 Integrar Firebase para autenticación con email y password
🇪🇸 🐲 Crea eventos para tu app con Firebase Analyics

Recursos

🇪🇸🐣 Post Recursos de SwiftBeta para aprender a programar
🇪🇸🐥 Libro El programador pragmático. Resumen 
🇪🇸🐥 Post Leyes, principios y patrones
🇬🇧🐣 Post Generador de campos falsos tipo json
🇬🇧🐥 Enlace Dummy / Fake datos JSON para pruebas GET, POST, PUT, PATCH, DELETE

Tutoriales

🇬🇧🐥 Video Crea una app de recordatorios con SwiftUI y Firebase
🇬🇧🐣 Post Aplicación de temporizador en SwiftUI
🇬🇧🐥 Post Cómo descargar y mostrar imágenes en un widget
🇬🇧🐣 Video Tres en Raya SwiftUI
🇪🇸🐥 Video Crea una mini app para editar images con IA

Inicio