iOS Developer Jr route: learn for free from scratch in 6 weeks
De cero a resolver tickets sencillos en un equipo real, con Swift y SwiftUI. With free videos in Spanish, plain-words explanations, hands-on challenges, quizzes and review by a teacher.
- Level: Beginner
- 6 weeks
- 58 challenges
- 35 free videos
- 48 questions
- Certificate at the end
Route content is in Spanish.
Week-by-week syllabus
Week 1 · Swift + Git
Esta semana aprendes Swift, el idioma en el que se escriben las apps de iPhone, y Git, una herramienta que guarda cada versión de tu trabajo. Piensa en Swift como las reglas de una receta: ingredientes (datos) y pasos (instrucciones) que el teléfono sigue al pie de la letra. Swift es estricto pero amable: si algo puede fallar, te avisa antes de correr el programa. Git es como las partidas guardadas de un videojuego: si algo sale mal, vuelves a un punto anterior sin perder nada. Empieza con pasos pequeños: cada programa que corre es un logro.
Mini ejemplo: let saldo = 100 no se puede cambiar; var intentos = 0 sí. Y let nombre: String? = nil te obliga a decidir qué hacer si no hay nombre.
Error típico de principiante: usar ! para forzar un opcional. Si es nil, la app se cierra; mejor if let, guard let o ??.
Week 1 topics
- Constantes y variables (
let/var), tipos (String,Int,Double,Bool), inferencia de tipos - Opcionales:
?,if let,guard let,??y por qué evitar el! - Funciones, etiquetas de parámetros, valores por defecto, extensiones (
extension) struct,classyenum(con valores asociados); cuándo usarstructswitchexhaustivo,ifcomo expresión- Colecciones:
Array,Dictionary,Set;map,filter,reduce,sorted,Dictionary(grouping:by:) - Closures y funciones que reciben funciones
- Git:
clone,branch,commit,push,pull, Pull Request, resolver un conflicto simple,.gitignorepara Xcode
Cursos: "Un recorrido por Swift" (Apple) + videos de Swift de MoureDev, Sergio Becerril y Victor Roldan Dev + Git con midulive en YouTube.
Recommended free videos
10 challenges · 8-question quiz
Week 2 · SwiftUI básico
Esta semana vas a dibujar tus primeras pantallas de iPhone con SwiftUI, la herramienta de Apple para armar lo que la persona ve y toca. Es como armar con bloques de LEGO: una pila vertical aquí (VStack), una fila allá (HStack), un botón encima, y juntas piezas simples hasta tener una pantalla completa. Lo mejor: el canvas de Xcode te muestra el resultado mientras escribes, sin correr la app. Ver tu propia pantalla funcionando en el simulador es de lo más motivador: disfrútalo.
Mini ejemplo: VStack { Text("Hola"); Button("Entrar") { } } ya es una pantalla: un texto con un botón debajo.
Error típico de principiante: cambiar el orden de los modificadores sin mirar. .padding().background(.yellow) y .background(.yellow).padding() se ven distintos.
Week 2 topics
- Crear un proyecto App en Xcode, estructura (
App,ContentView), simulador y#Preview - Vistas y modificadores:
.padding,.font,.foregroundStyle,.frame,.background,.clipShape - Layout:
VStack,HStack,ZStack,Spacer,ScrollView Text,Image, SF Symbols,Label,Button,TextField,SecureFieldList,ForEach,Section,Identifiable@State(introducción) y modo claro/oscuro
Cursos: "Develop in Swift Tutorials" (Apple) + videos de SwiftUI de MoureDev, SwiftBeta y Victor Roldan Dev.
Recommended free videos
- ¿Cómo crear una APP en tu IPAD? (Swift Playgrounds 4 + programa una APP en un iPad en SWIFTUI) — SwiftBeta
9 challenges · 8-question quiz
Week 3 · Estado, flujo de datos y navegación
Esta semana aprendes a que tu app "recuerde" cosas y a pasarlas de una pantalla a otra. @State es la memoria de una vista, @Binding es un control remoto que le prestas a otra vista para que cambie ese dato, y un ViewModel con @Observable es como el mesero de un restaurante: toma los pedidos, aplica las reglas y le avisa a la pantalla cuando algo cambió. La navegación funciona como los pasillos de un centro comercial: entras a una tienda y puedes volver atrás. Si al principio se siente raro, es normal; con la práctica encaja solo.
Mini ejemplo: en un contador, @State var cuenta = 0 es el dato y el botón hace cuenta += 1; si una vista hija necesita cambiarlo, recibe $cuenta como @Binding.
Error típico de principiante: tener un @State separado para el mismo dato en dos vistas. Se desincronizan; un solo dueño y los demás lo piden prestado.
Week 3 topics
- Fuente única de verdad:
@State(dueño del dato) y@Binding(préstamo del dato) @Observablepara ViewModels,@Bindabley.environment(...)para compartir un modelo- Código que vas a encontrar en equipos reales:
ObservableObject,@Published,@StateObject(saber leerlo) - Validación de formularios en el ViewModel
NavigationStack,NavigationLink(value:),.navigationDestination(for:),NavigationPath.sheet,.alert,.confirmationDialog,@Environment(\.dismiss)yTabView
Cursos: "SwiftUI Tutorials" de Apple (Handling user input, Building lists and navigation) + videos de SwiftBeta, Raquel Aranda y Victor Roldan Dev.
Recommended free videos
- Masterclass SwiftUI iOS 17, nuevo patrón @Observable, Clean Architecture orientado a protocolos. — Apple Coding Academy
9 challenges · 8-question quiz
Week 4 · Red con async/await y Codable
Esta semana tu app deja de usar datos inventados y empieza a pedirlos a internet, como hace cualquier app real. Una API es una ventanilla: tu app hace un pedido y recibe una respuesta en JSON, que es como una ficha de datos. Codable traduce ese JSON a tus struct automáticamente, y async/await permite esperar la respuesta sin congelar la pantalla, como cuando pides delivery y sigues con tus cosas hasta que suena el timbre. También aprendes a mostrar "cargando" y "algo salió mal", que es lo que separa una app de juguete de una app de verdad.
Mini ejemplo: let (data, _) = try await URLSession.shared.data(from: url) espera sin congelar la pantalla; luego JSONDecoder().decode(Pokemon.self, from: data) lo convierte en un struct.
Error típico de principiante: olvidar el estado de error. Sin internet la pantalla queda en blanco; piensa siempre en cargando, éxito y error.
Week 4 topics
- JSON y
Codable(Decodable),CodingKeys,keyDecodingStrategy = .convertFromSnakeCase async/await,Task,.task { },async letpara tareas en paraleloURLSession.shared.data(from:), códigos HTTP,throwsydo/try/catch- DTO (lo que manda la API) vs. modelo de la app (lo que muestra la pantalla)
- Estados de pantalla con un
enum: cargando, éxito, vacío, error AsyncImage,.refreshable,ContentUnavailableView,@MainActor
Cursos: "Concurrency" del libro de Swift (Apple) + videos de SwiftBeta y Victor Roldan Dev.
Recommended free videos
10 challenges · 8-question quiz
Week 5 · Arquitectura MVVM y persistencia
Esta semana ordenas tu código como lo hace un equipo profesional y haces que la app recuerde cosas aunque la cierres. MVVM es como un restaurante bien organizado: el salón (la vista) solo atiende, el mesero (el ViewModel) toma pedidos y la cocina (el repositorio) prepara lo que se pide, sin que nadie se meta en el trabajo del otro. Con @AppStorage guardas preferencias chiquitas, como "ocultar saldo", y con SwiftData guardas listas completas, como tus Pokémon favoritos. Así tu app funciona incluso sin internet.
Mini ejemplo: @AppStorage("ocultarSaldo") var ocultar = false recuerda tu preferencia; los 500 movimientos van en SwiftData con @Model.
Error típico de principiante: guardar el token o la contraseña en UserDefaults. No está cifrado; para secretos usa el Keychain.
Week 5 topics
- MVVM: View, ViewModel, Repository, Service, Model; qué hace cada capa
- Protocolos para definir contratos (
protocol PokemonRepository) - Inyección de dependencias por
inity repositorios falsos (Fake) para previews y tests UserDefaultsy@AppStoragepara preferencias (y por qué nunca guardar contraseñas ahí: para eso está el Keychain)- SwiftData:
@Model,.modelContainer,ModelContext,@Query,#Predicate - Caché offline y organización del proyecto en carpetas
Cursos: documentación de SwiftData (Apple) + videos de SwiftBeta y Victor Roldan Dev.
9 challenges · 8-question quiz
Week 6 · Simulación de trabajo real
Esta semana practicas cómo se trabaja en un equipo real: escribir pruebas (tests), encontrar errores (bugs) con el debugger y pedir revisión de tu código. Un test es como revisar la mochila antes de salir de casa: una lista que confirma que todo está donde debe. El debugger es como pausar una película para mirar cada detalle de la escena. Un Pull Request es como entregar una tarea para que alguien la revise antes de publicarla, y los comentarios que recibas son para mejorar, no para juzgarte. Llegaste hasta aquí: ya piensas como alguien que programa de verdad.
Mini ejemplo: @Test func sumaGastos() { #expect(total([10, 20]) == 30) }; si alguien rompe total, el test se pone en rojo antes de publicar.
Error típico de principiante: leer un crash de abajo hacia arriba o mandar un PR gigante. Busca la primera línea de tu código y manda cambios pequeños.
Week 6 topics
- Swift Testing (
import Testing,@Test,#expect, tests con argumentos) y XCTest (XCTestCase,XCTAssertEqual) - Tests de ViewModel con un repositorio falso y funciones
async - Leer un crash: consola, Debug Navigator y la primera línea de tu código
- Debugger: breakpoints,
poen la consola LLDB, breakpoints condicionales - Schemes y configuraciones (Debug / Release),
#if DEBUG, Bundle Identifier, versión y build - Instalar en un iPhone real con el Personal Team gratuito
- Buenas prácticas de PR: commits pequeños, descripción, capturas; cómo recibir un code review
Cursos: documentación de Swift Testing y XCTest (Apple) + videos de Victor Roldan Dev, José Caballero Martínez, Ausias BM y codigofacilito.
Recommended free videos
11 challenges · 8-question quiz
Portfolio projects
Cuando buscas tu primer trabajo, casi nadie te va a pedir un título: te van a pedir ver algo que hayas construido, y tener proyectos propios en GitHub demuestra que sabes programar mejor que cualquier certificado. Sube capturas del simulador en el README: en iOS, las capturas venden.
1. Mi Playlist (tu mini Apple Music)
- Qué construyes: una app para crear playlists, agregar canciones con portada, artista y duración, marcarlas como favoritas y ver el detalle de cada una.
- Qué practicas: Swift, vistas con SwiftUI,
List,@State,@Observabley navegación conNavigationStackentre la lista y el detalle (semanas 1 a 3). - Súbele el nivel: guarda tus playlists con SwiftData para que no se borren al cerrar la app.
2. La Mesada (tracker de gastos)
- Qué construyes: una app donde anotas lo que recibes y lo que gastas (comida, pasajes, videojuegos), con el saldo del mes y un resumen por categoría.
- Qué practicas: SwiftUI, formularios con validación, MVVM, SwiftData para guardar los movimientos y tests de la lógica que calcula el saldo (semanas 2 a 6).
- Súbele el nivel: agrega una meta de ahorro con un
ProgressViewque avance según lo que no gastas, y un gráfico por categoría con Swift Charts.
3. Pokédex
- Qué construyes: una app que muestra la lista de Pokémon con su imagen y tipos, con buscador y una pantalla de detalle con sus estadísticas, usando la API pública y gratuita PokéAPI.
- Qué practicas:
URLSessionconasync/await,Codable, manejo de carga y errores de red,AsyncImage, navegación, SwiftData como caché y tests (semanas 4 a 6). - Súbele el nivel: agrega un equipo favorito de 6 Pokémon que se guarde en el teléfono y funcione sin internet.
iOS Developer Jr glossary in plain words
| Palabra | Qué significa |
|---|---|
Variable (var) |
Una caja con nombre donde guardas un dato que puede cambiar, como el marcador de un partido. |
Constante (let) |
Una caja que, una vez llena, ya no cambia, como tu fecha de nacimiento. |
Opcional (?) |
Una caja que puede tener algo o estar vacía (nil), como el campo "segundo nombre" de un formulario. |
| Función | Un conjunto de pasos con nombre que puedes repetir cuando quieras, como la receta "hacer tostadas". |
| Struct | Un molde para crear datos que se copian al pasarlos, como una fotocopia de un formulario: si la rayas, el original no cambia. |
| Clase | Un molde para crear objetos que se comparten, como un documento de Google Docs: todos ven los mismos cambios. |
| Enum | Una lista cerrada de opciones posibles, como los tamaños de un café: chico, mediano o grande. |
| Closure | Un pedacito de código que puedes pasar como si fuera un dato, como dejarle instrucciones escritas a alguien para que las siga después. |
| Git | Un programa que guarda el historial de tu código, como las partidas guardadas de un videojuego. |
| Commit | Una foto guardada de tu trabajo en un momento, con una nota de qué cambiaste. |
| Rama (branch) | Una copia paralela del proyecto para probar cambios sin romper la versión principal, como un borrador. |
| Pull Request (PR) | Una solicitud para que otra persona revise tus cambios antes de juntarlos con el proyecto, como entregar una tarea al profe. |
| Xcode | El programa de Apple donde escribes, pruebas y publicas apps para iPhone. |
| Simulador | Un iPhone de mentira que corre dentro de tu Mac para probar la app. |
| Vista (View) | Una pieza de pantalla (un texto, un botón, una tarjeta) que combinas como bloques de LEGO. |
| Modificador | Un ajuste que le pones a una vista, como .padding() o .font(.title), igual que ponerle un filtro a una foto. |
Estado (@State) |
Lo que la pantalla recuerda en este momento, como si el interruptor de la luz está prendido o apagado. |
Binding (@Binding) |
Un control remoto que le prestas a otra vista para que pueda cambiar un dato que no es suyo. |
| ViewModel | El encargado de los datos y las reglas de una pantalla, como un mesero que toma tu pedido y le avisa a la cocina. |
| API | Una ventanilla por la que tu app pide datos a otro sistema y recibe una respuesta, como pedir en un restaurante. |
| JSON | Un formato de texto ordenado para enviar datos, como una ficha con campos: nombre, edad, ciudad. |
| Codable | La forma en que Swift convierte un JSON en tus structs (y al revés), como un traductor automático. |
| async/await | Una forma de esperar tareas que tardan (como descargar datos) sin congelar la pantalla, como pedir delivery y seguir haciendo tus cosas hasta que toquen el timbre. |
| SwiftData | La herramienta de Apple para guardar datos dentro del teléfono, como un cuaderno que la app no olvida al cerrarse. |
| Test | Un pequeño programa que revisa automáticamente que tu código haga lo que debe, como un corrector de exámenes. |
| Bug | Un error en el programa que hace que algo funcione mal, como una página faltante en un libro. |
| Crash | Cuando la app se cierra de golpe por un error, como un juego que se congela y te saca al menú. |
Ready to start?
Free, no card and no prior experience. Sign in with Google or without an account.
Start iOS Developer Jr for free