Introducción
Introducción
Conoce a Juan Gabriel Gomila, tu instructor en Udemy
Las descripciones de las clases
Xcode 9 y requisitos necesarios para el desarrollo de apps
Como descargar Xcode 9
¿Tengo que pagar la cuenta de desarrollador de Apple?
Instalando Xcode y algunas palabras sobre la WWDC17 de Apple
La herramienta de reporte de bugs de apple
Repositorio con los proyectos del curso
Mi primera app
Xcode, Playgrounds, Tipos de Proyectos
Estructura de una app y cómo compilar en el simulador
Introducción a las imágenes y al diseño de apps
IBOutlets en una app y errores de novato
IBActions de una app
¿Cómo funciona una app para iOS?
Descarga el código fuente de la sección
Qué nos trae de nuevo de Swift 4
Lo que nos trajo Swift 3.0
De Swift 3.0 a la versión 3.1
Los string multilínea
Los strings vuelven a ser colecciones (si, de nuevo)
Rangos unilaterales en colecciones
Los diccionarios mejorado
Más sobre los diccionarios
Serialización, deserialización y los nuevos JSON
Keypath para diccionarios de clave-valor
Descarga los playgrounds de las novedades de Swift 4
S1: El lenguaje de programación de Swift, las variables y constantes
Swift 1: Introducción a Swift
¿Qué es Swift?
Variables y constantes
Nomenclatura y declaración de variables y constantes
Valores por consola y comentarios
Los números enteros
Los números decimales e inferencia de tipo de datos
Literales numéricos
Castings y conversiones numéricas
Los valores booleanos
Las tuplas
Las variables opcionales y optional binding
La gestión de los errores
Aserciones y debugging de código
Descarga los playgrounds de la sección
S2: El lenguaje de programación de Swift, operaciones básicas
Swift 2: Las operaciones básicas y terminología genera
Asignaciones de variables en Swift
Aritmética básica
Operadores de comparación
Los rangos
Los operadores lógicos
Descarga los playgrounds de la sección
S3: El lenguaje de programación de Swift, Strings y caracteres
Swift 3: Los Strings y los caracteres en Swift
Literales de String
Caracteres y concatenación de Strings
Caracteres Unicode
Contar caracteres
Acceso y modificación de Strings con índices y substrings
Comparando Strings
Descarga los playgrounds de la sección
S4: El lenguaje de programación de Swift, Tipos de Colecciones
Swift 4: Las colecciones de objetos en Swift
Los arrays
Operando con arrays
Los conjuntos
Las operaciones de conjuntos
Los diccionarios
Operaciones con diccionarios
Descarga los playground de la sección
S5 - El control de flujo en Swift
Swift 5: Las sentencias de control de flujo en Swift
Ejemplos de control de flujo en Swift
El bucle for-in en colecciones
El bucle for-in en rangos numéricos
El método stride en bucles for-in
El bucle while
El bucle repeat-while
Toma de decisiones con if y else
Las decisiones múltiples con switch y case
Switch con intervalos y tuplas
Switch con where y casos compuestos
Sentencias de transferencia de control
Sentencias nominales
Salida prematura y el uso del guard
Descarga los playgrounds de la sección
S6 - Las funciones en Swift
Swift 6: Las funciones en Swift
La estructura de una función en Swift
Parámetros de entrada de una función
Los valores de retorno de una función
Los tipos especiales de parámetros, argumentos y valores variadicos
Los parámetros de entrada y salida de una función y el uso de '&
Función como tipo de datos
Descarga los playgrounds de la sección
S7 - Los closures en Swift
Los closures en Swift
Qué es un closure y para qué sirve
La estructura de un closure
Simplificando la sintaxis de los closures
Los trailing closures
Los closures capturadores
Los escaping closures
Los autoclosures
Descarga los playgrounds de la sección
S8 - Los enumerados en Swift
Swift 7 - Los tipos enumerados
La sintaxis de los enumerados
Los switch con datos enumerados
Enumerados con valores asociados
Los raw values de un Enumerado
Enumeración recursiva
Descarga los playgrounds de la sección
S9 - Clases y estructuras en Swift
Qué son las clases y las estructuras
Declaración de clases y estructuras en Swift
Instanciación de clases y estructuras
Valores por copia en estructuras y enumerados
Valores por referencia en instancias de clases
Comparación de referencias en Swift
Cuando usar una clase o una estructura
Descarga los playgrounds de la sección
El ciclo de vida de una app
Abrir una aplicación
El ciclo de eventos de los controladores
Finalizar una aplicación
Proyecto 1 : El juego de Aim For That
Aim For That, el primer juego de Juan Gabriel
Cómo funciona un iPhone y un iPad
La lista de tareas
El proceso de compilación y la build de la app
Mi primer botón en pantalla
La vista y el controlador
El uso de los alert controllers
Cómo funciona una app
Portrait vs landscape y píxels vs puntos
Objetos, datos y métodos
Reto: Recreando la interfaz gráfica
El slider
El valor actual y bugs conocidos
Generando números aleatorios
Las rondas de la partida
Mostrar el objetivo al usuario
Calcular la puntuación de la ronda
Puntos globales y rondas jugadas
Mejoras de usabilidad y el botón de reset
Un nuevo view controller: tutorial del juego
La barra de estado del juego y el archivo Info.plist
Descarga las imágenes del proyecto Aim For That!
La carpeta del Assets Catalog
Cambiar las imágenes de la interfaz gráfica
El slider y la configuración por código
El tutorial en una UIWebView
El problema de la diversidad de resoluciones
Introducción al autolayout y las restricciones genéricas para apps
Reto: El layout de la pantalla del tutoria
Más sobre los Layouts y las Stack Views
La pantalla de carga de la app
El logo y el nombre de la app
Animaciones con Quartz Core
Compilando en tu propio dispositivo
El uso de los temporizadores con la clase Timer
La clase UserDefaults para guardar variables de una partida a otra
Descarga el código fuente de la sección
Proyecto 2: CoreML, Machine Learning para predecir el precio de venta
Proyecto 1: CoreML y Machine Learning en iOS 11
Descarga los recursos de la sección
Introducción al Machine Learning
Cómo instalar Python y las librerías para ML en tu Mac
Python y los modelos de datos de las regresiones lineales
Descarga el modelo y el script de Python de ML para tu app
Los named colors de iOS 11
Constraints y vistas multidispositivo
Las stack views y los contenedores de vistas
Los segues y la relación entre vistas y controladores
IBOutlets, IBActions y una misma acción para varios elementos
El truco del custom spacing para ítems individuales de iOS 11
La clase Number Formatter y los dígitos por pantalla
La predicción del valor de venta con CoreML
Ejercicos finales para practicar CoreML
Descarga el código fuente de la sección
Proyecto 3: ARKit y SpriteKit, a la caza de los Pokemon
Proyecto 2: AR y SpriteKit en iOS 11
Descarga el código fuente de la sección
Descarga los archivos de este proyecto
La realidad aumentada y Automator para Mac
El código de prueba de ARKit de Apple, las matrices 4x4 y las anclas
El código de prueba de SpriteKit de Apple
Los delegados de ARSKViewDelegate y la configuración de la escena
El HUD y la información del videojuego
El timer de creación de enemigos
GameplayKit, números aleatorios y matrices de rotación
Reto: La posición anclada del Pokemon
Reto: El nodo pokemon a visualizar
Pokemons aleatorios por la habitación
Cazando Pokemons con el método touches began
Cómo añadir sonidos en SpriteKit
Fin del juego
Mejoras
Proyecto 4: ARKit y CoreLocation, geoposición y realidad aumentada
Proyecto 3: ARKit y CoreLocation combinados
Descarga los archivos de la sección
El proyecto inicial de ARKit
Configurando el Core Location Manager y los permisos
El delegado de Core Location Manager y sus métodos asociados
Probando los permisos de privacidad en el dispositivo
La Wikipedia y el formato de la librería de JSON
La dirección del usuario
La estructura del JSON de la Wikipedia
Grados, Radianes y la distancia sobre la tierra
La geoposición de los objetos de la Wikipedia
La posición del ancla y las matrices de transformación
Configurando la etiqueta de los lugares
Prueba final de geoposición con realidad aumentada
Mejoras
Descarga el código fuente de la sección
Proyecto 5: Drag and Drop
El Drag And Drop en iOS 11, un avance muy novedoso
Las tablas y el UITableViewController
El diseño manual de una Split View
Reto: Los autolayouts y los constraints a nuestro gusto
Los controladores con delegados vs los table y collection view controllers
Los colores y el modelo de datos de la collection view
Las fuentes y el modelo de datos del table view controller
Core Graphics, Next Step y el formato de dibujo en iOS
La clase CGRect y las posiciones en pantalla
Los atributos para configurar texto por código
Renderizar imagen y texto con UIGraphicsImageRenderer
El uso de UICollectionViewDragDelegate
El uso de UIDropInteractionDelegate
Los tipos de datos, perform drop y Mobile Core Services
Soltar el color sobre la postal
Soltar el texto sobre la postal
Mostrar y ocultar la split view
Configurar un UITapGestureRecognizer en una Image View
El uso de UIAlertController con un text field interno
Drag and drop de Fotos a nuestra app
Drag and drop desde nuestra app a Fotos
Mejoras
Redimensionar imagen
Descarga el código fuente de la sección
Proyecto 6: Vision y CoreML, Reconocimiento de imágenes
El reconocimiento de imágenes y las redes neuronales
Descarga el código fuente de la sección
Descarga el proyecto inicial aquí
El proyecto inicial y los modelos de datos de imágenes de Apple
Cómo hacer una barra de progreso dinámica
Los métodos y delegados del AVCapturePhotoCaptureDelegate
Inicializar la cámara para tomar fotos en la app
Tomar la foto y el UIActivityIndicatorView para indicar progreso
La clase CGImage y el método didFinishProcessingPhoto
Clasificación de fotos con Vision y CoreML
Transferir información entre controladores con closures y completion handlers
Mostrar los resultados en la tabla sobrepuesta
Probando nuestro reconocedor de objetos
Proyecto 7: PDFKit y la gestión de archivos en PDF
El framework de PDFs de Apple
Descarga los archivos necesarios para la app de PDFKit
PDFKit, nuestro proyecto inicial
La tabla de libros disponibles
Autolayout y constraints por código
Cargar el PDF con la clase PDFDocument
Buscar texto en el PDF
Compartir texto con UIActivityViewController
Avanzar y retroceder páginas en el PDF
El uso de SafariViewController para incrustar páginas webs
Del pdf al texto y los márgenes de los objetos con UIEdgeInsets
Un UISegmentedControl dentro de un UIBarButtonItem
Transformar el texto de PDF a Attributed Strings
El uso de expresiones regulares con NSRegularExpression
Añadir una marca de agua a nuestro PDF
Tareas
Descargar el código fuente de la sección
Proyecto 8: Pokeradar, El buscador de Pokemons con Firebase y GeoFire
El mundo de los servidores
Los assets de los Pokemon
El diseño de la interfaz gráfica del radar
Cocoapods y el SDK de Firebase
Geofire, la librería de geoposición para Firebase y el fichero Bridging-Header
Los permisos de CLLocationManager
Configurar la imagen del usuario
La referencia y la configuración de la base de datos de Firebase
Procesar el CSV de los Pokemon en Swift
El patrón de la factoría y la fábrica de Pokemons
La clase PokemonAnnotation: MKAnnotation
Avistando un Pokemon aleatorio y notificándolo a GeoFire
Creando la MKAnnotationView del Pokemon
Los permisos de la base de dato de Firebase
Indicar la ruta hacia un destino con Mapas de Apple
La Pokedex
La clase UICollectionViewCell y las celdas personalizadas
La técnica del NotificationCenter para comunicar View Controllers
El paradigma del Modelo, la Vista y el Controlador a fondo
Descarga el código de este proyecto desde aquí
Proyecto 9: La cámara de fotos, privacidad y detección de caras
Detección de caras y difuminación
El diseño de la interfaz gráfica de usuario
Seleccionando imágenes con UIImagePickerController y sus delegados
La detección de caras con VNFaceObservation de Vision
La extensiones de las clases de Apple
Unas cuantas matemáticas con UIView e imágenes
Mostrar las caras detectadas al usuario
Probando en nuestro iPhone con nuestras fotos
Difuminando imágenes con Core Image
La selección de la cara a difuminar
Compartir la foto en redes sociales
Mejoras a nuestra app de tratamiento de imágenes
Una propuesta para las mejoras indicadas
Descarga el código fuente de la sección
Un descansito para aprender técnicas ninja de iOS 11
iOS 11, todo cambia estéticamente (si, otra vez...)
Títulos en las barras de navegación más grandes
Aplazar los gestos de sistema del borde de la pantalla
La zona segura de la vista, safeAreaLayoutGuide
La nueva gestión de los Content Insets
Proyecto 10: Apple Music, APIs externas y el procesamiento de ficheros JSON
Apple Music y los videojuegos multijugador
El proyecto de Apple Music
Los identificadores para conectar con el servicio de Apple Music
Creando el token del desarrollador por terminal con Cryptography
Como funciona una API ¿Qué podemos hacer con la API de Apple Music?
El botón Start Game y el caos de los permisos
Los permisos de Cloud Services de StoreKit
La petición de las capabilities a Apple
Las estructuras de datos de Apple Music, el protocolo Codable y la ordenación
La petición a la API y el procesamiento de JSONs
La vista de la partida
Probando el proceso completo en nuestro iPhone
La selección de canciones
La lógica general del videojuego
Reproducir música desde Apple Music con MediaPlayer
Nuestro videojuego en acción!
Muchas, pero que muchas mejoras para publicar la app
Descarga el archivo fuente del proyecto de Apple Music
Proyecto 11: Una red social con Firebase
El mundo de las redes sociales
Las librerías de proyectos de Apple
Adaptar una librería no es trabajo fácil!
La herencia entre clases
Añadir funcionalidades con la técnica del target-action
El diseño de nuestra ventana de fotos
Configurar Firebase en nuestra app con Cocoapods
Definir una estructura de datos óptima en Firebase
El diseño de la vista de login
Las clases IBEditable y IBDesignable
Reto: más botones y texfields a medida y cómo ocultar el teclado de un textfield
Los métodos de autenticación de usuarios de Firebase
Creación y login de usuarios con Firebase
La gestión de errores de registro y login de Firebase
Guardar el usuario registrado en la base de datos de Firebase
Descargar los datos de Firebase
Procesar los datos descargados de Firebase
Delegados personalizados para la toma de fotos y de vídeos
Subiendo imágenes y vídeos al Storage de Firebase
Añadiendo la referencia de los archivos subidos a nuestra base de datos
Los UISwipeGestureRecognizers
Actualizando los snaps enviados y recibidos en Firebase
Descargar los snaps del usuario
Procesando los snaps recibidos
La descarga de la imagen desde Firebase
Descarga el código fuente de nuestro proyecto de Firebase