Hola, Apple

1

Hablemos de iOS

2

Conozcamos XCode

3

驴Necesito un iPhone para ser iOS Developer?

Tu primera app en iOS

4

隆Hola, Mundo Apple!

5

Navegaci贸n con UINavigationController

6

Modales en la navegaci贸n

7

Utilizando controles en c贸digo

8

Autolayout vs SwiftUI

9

Autolayout

10

Listas con UITableView

11

Celdas personalizadas para nuestras listas.

12

Persistencia: UserDefaults

Manejo de dependencias

13

CocoaPods

14

Carthage

Servicios Web

15

Primeros pasos para consumir servicios

16

Afinando detalles para consumir servicios

17

Convirtiendo los JSON a modelos

18

Alamofire

Proyecto: PlatziTweets

19

Bienvenido a PlatziTweets

20

Configurando Proyecto

21

Dise帽ando vistas iniciales

22

Configuraci贸n de vistas iniciales

23

Configuraci贸n de registro

24

Descripci贸n de la API de PlatziTweets

25

Conexi贸n de la API y Autenticaci贸n

26

Registro de usuarios

27

Dise帽o del Tweet

28

Obteniendo Tweets

29

Creaci贸n de vista para publicar Tweets

30

Publicando Tweets

31

Borrando Tweets

32

Integraci贸n de la c谩mara

33

Conexi贸n con Firebase

34

Configuraci贸n de XCode para correr app

35

Subir imagen a Firebase

36

Publicar Tweet con imagen

37

Tomando Videos para el Tweet

38

Publicar Tweet con video

39

Detalles del video

40

Accediendo al GPS

41

Implementando mapas con MapsKit

42

Mostrando todos los estudiantes en el mapa

43

Retos del proyecto

En producci贸n

44

Enviar a pruebas con Firebase Distribution

45

Enviar tu aplicaci贸n a APP Store Connect

46

Distribuci贸n de tu app con TestFlight

iOS Avanzado

47

Dark Mode

48

SwiftUI

49

Terminando detalles de una vista con SwiftUI

50

Objective-C

Hola, iOS Developer

51

Felicidades

52

Expert Session: 隆nuevo espacio para resolver tus dudas sobre el desarrollo de Apps para iOS!

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Afinando detalles para consumir servicios

16/52
Recursos

Aportes 13

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Por defecto la llamada al servicio se hace en un hilo secundario por lo que para hacer actualizaciones al UI se necesita envolver el c贸digo dentro del bloque DispatchQueue para indicarle que lo haga en el hilo principal.

馃槑

Con Xcode 13 cambiaron la forma en la que funcionan las Info.plist, ahora se se completa la Info.plist al hacer el build del target y s贸lo genera un Info.plist para los cambios que queremos hacer. Ahora debemos hacer los cambios dentro del target y dirigirnos a la tab de Info, entre Resource Tags y Build Settings

https://useyourloaf.com/blog/xcode-13-missing-info.plist/

Super, solo a帽adir铆a al completion un [weak self] para evitar un retain cycle 馃槂

Hice un peque帽o reto usando este JSON que me encontre en internet. Al parecer todo bien鈥

class ViewController: UIViewController
{
    @IBOutlet weak var userIDLabel : UILabel!
    @IBOutlet weak var idLabel : UILabel!
    @IBOutlet weak var titleLabel : UILabel!
    @IBOutlet weak var completedLabel : UILabel!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    
    
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        fetchServices()
    }

    private func fetchServices()
    {
        let URLServer = "https://jsonplaceholder.typicode.com/todos/1"
        
        guard let endpoint = URL(string: URLServer) else
        {
            return
        }
        
        //Inicializacion del Loader
        activityIndicator.startAnimating()
        
        URLSession.shared.dataTask(with: endpoint)
        {
            
            (data: Data?, _, error: Error?) in
            
            //Detencion del Loader
            DispatchQueue.main.async
            {
                self.activityIndicator.stopAnimating()
            }
            
            if error != nil
            {
                print("Error. Linea hecha por mi.")
                return
            }
            
            guard let dataFromService = data, let dictionary = try? JSONSerialization.jsonObject(with: dataFromService, options: []) as? [String:Any] else
            {
                return
            }
            
            //Importante: Todos los llamados a la UI; se hacen en el main thread
            DispatchQueue.main.async
            {
                //self.userIDLabel.text = dictionary["userId"] as? String
                
                let userIdIsOne = dictionary["userId"] as? Bool ?? false
                self.userIDLabel.text = userIdIsOne ? "Contiene algun valor" : "Pues no..."
                
                
                let idIsOne = dictionary["id"] as? Bool ?? false
                self.idLabel.text = idIsOne ? "Contiene algun valor" : "Al parecer no contiene un valor"
                
                self.titleLabel.text = dictionary["title"] as? String
                
                
                let isCompleted = dictionary["completed"] as? Bool ?? false
                self.completedLabel.text = isCompleted ? "completado" : "no completado"
                
                
            }
            
            
        }.resume()
        
        
    }
    
    
    
}


Interesante clase ! Feliz 馃槃

Buen ejercicio y muy bien explicada las ambas clases

excelente clase!

      DispatchQueue.main.async {
                self.activityIndicator.hidesWhenStopped = true // para ocultarlo cuando se detiene. 
                self.activityIndicator.stopAnimating()                                
                  }

Final version

Me encanto esta clase, poder lograr entender el codigo y la explicacion me ha llenado de mucho animo para seguir.

La magia de la version Xcode 12.4 es que ya te advierte que debes mover esa linea de codigo a un main thread

Antes de que se acabe el PlatziDay, muy buen curso, muchas gracias. Excelente explicacion. Psdt: No me quiero ir Stark :<