SlideShare una empresa de Scribd logo
1 de 92
Descargar para leer sin conexión
Desarrollo iOS
               Creación de Aplicaciones para iPad, iPhone e iPod Touch
                   iOS100a - Jesús Mazcuñán Arnandis - Julio 2011



jueves 14 de julio de 2011
Presentación



jueves 14 de julio de 2011
Sobre Barreira Arte y Diseño...
                  Centro dedicado a la formación en materias de diseño.
                          Centro AATCe. barreira@barreira.es
                             CICLOS FORMATIVOS                APPLE
                             Grado Medio - Arte Final         Aperture
                             Grado Superior - Decoración      Final Cut
                             Grado Superior - Diseño Gráfico   iLife
                             Grado Superior - Mobiliario      iWork
                             Grado Superior - Modas           Mac OS X
                                                              Mac OS X Server
                             ADOBE                            iOS
                             Photoshop
                                                              CURSOS ESPECIALIZADOS
                             Illustrator
                             Indesign                         PRUEBA DE ACCESO
                             Dreamweaver
                             Flash                            TALLERES

                             AUTODESK                         Dibujo técnico
                                                              Dibujo artístico
                             Autocad                          Creación multimedia
                             3D Max
                             Revit


jueves 14 de julio de 2011
Sobre el docente...

          Jesús Mazcuñán Arnandis
          Formador en Barreira Arte y Diseño
          Apple Certi ed
                   •         Pro
                   •         Trainer (IT & Pro Apps)
                   •         Support Professional 10.6
                   •         Technical Coordinator 10.6
          iOS Developer


jueves 14 de julio de 2011
Cursos iOS
          * No hay cursos o ciales de iOS.


          •       iOS User Start Point (4h)
          •       iOS 100 Developer Start Point (10h)
          •       iOS 101 Developer Boot Camp (>20 h)
          •       iOS 201 Advanced Apps (>20h)
          •       iOS 300 Frameworks (4h)
          •       iOS 301 Starting Game Development with Cocos 2D




jueves 14 de julio de 2011
iOS 100a (5h)
          Tenemos 5 horas para cubrir los principales objetivos que nos
          permitirán iniciarnos en el desarrollo de aplicaciones iOS
          - Conocer el dispositivo
          - Conocer el lenguaje de desarrollo
          - Conocer la estructura del programa
          - Entender la losofía del proceso de desarrollo
          - Conocer las herramientas del SDK (XCode 3.*)
          - Introducir los principales componentes de UIKit
          - Realizar pruebas en el simulador
          El resto de contenidos se ven en iOS 100 (b)

jueves 14 de julio de 2011
iOS 100b (5h)
          Después de haber visto los contenidos de iOS 100a, podemos
          pasar a las siguientes fases de desarrollo.
          - Programa de desarrollo (Standard)
          - Generación de certi cados de desarrollo
          - Pruebas en hardware
          - Fundamentos de la distribución de aplicaciones
          - Más componentes de UIKit




jueves 14 de julio de 2011
Antes de comenzar...
          Requisitos mínimos
                   •         Saber programar en cualquier lenguaje.
                   •         Conocer los conceptos de la programación orientada a
                             objetos.
                   •         Estar registrado como desarrollador iOS en el
                             programa gratuito.
          Requisitos ideales
                   •         Saber programar en Objective-C.
                   •         Estar registrado en el Standard Program.
                   •         Disponer de un terminal para pruebas (y cable USB).

jueves 14 de julio de 2011
iOS Overview



jueves 14 de julio de 2011
iOS Overview
                                             Sistema Operativo y tecnologías que se
                                             utilizan para ejecutar aplicaciones
                                             nativas en iPad, iPhone e iPod Touch.

          Para desarrollar las aplicaciones nativas utilizamos:
                   •         iOS SDK: contiene el código, la información y las
                             herramientas necesarias para desarrollo.
                   •         XCode: proporciona las herramientas para edición,
                             compilación y depuración.
                   •         Simulador (no emulador) de iOS: es una plataforma
                             que imita los dispositivos.

jueves 14 de julio de 2011
iOS Overview
          •       iOS nos proporciona los mecanismos necesarios
                  para generar aplicaciones con independencia
                  del hardware.
          •       Aunque la aplicación no se ve afectada por los
                  cambios en el hardware hemos de ser
                  conscientes de las capacidades de los
                  dispositivos.
          •       Las versiones de iOS intentan maximizar la
                  retrocompatibilidad, pero no siempre es posible.
                  (iOS 4.3 no soporta modelos de 2ª generación)

jueves 14 de julio de 2011
iOS Overview
          •       Framework: Directorios que contiene las librerías
                  (bibliotecas) dinámicas y los recursos para
                  soportarlas.
          •       iOS proporciona un conjunto de librerías
                  dinámicas para tareas comunes.
          •       Cualquier librería de terceros ha de ser incluida
                  como librería estática.
          •       Librerías estáticas son aquellas que se copian en
                  la aplicación generando productos
                  independientes.

jueves 14 de julio de 2011
iOS Overview
          Podemos crear dos tipos de aplicaciones:
          Contenido Web
                   •         HTML5, Javascript, CSS, AJAX, SQLite...
                   •         http://www.apple.com/webapps
          Aplicaciones Nativas
                   •         C, C++, Objective-C.
                   •         App Store.
                   •         Proceso de validación.

jueves 14 de julio de 2011
Dispositivos



jueves 14 de julio de 2011
Dispositivos
          En enero de 2011 Apple anuncia que ha superado la cifra de
          160 millones de dispositivos que soportan iOS vendidos.
          Estos dispositivos incluyen diversas familias:
                             •   iPod Touch (4 generaciones)
                             •   iPhone (4 generaciones)
                             •   iPad (2 generaciones)
          Distintas capacidades entre familias e incluso dentro de la
          misma familia.




jueves 14 de julio de 2011
Caducidad de Dispositivos
          A pesar de intentar dar soporta a todos los dispositivos
          anteriores con cada versión de iOS mediante el recorte en
          prestaciones software, las diferencias de hardware obligan a
          Apple a abandonar el soporte para los modelos antiguos
          llegado cierto punto.
          Las fechas de caducidad son:
                   •         iPhone EDGE (1G) - 36 meses
                   •         iPhone 3G (2G) - 32 meses
                   •         iPod Touch (1G) - 33 meses
                   •         iPod Touch (2G) - 29 meses


jueves 14 de julio de 2011
Dispositivos
                             iPhone                     iPod Touch                   iPad

          3G                  3GS       4        2ª         3ª         4ª                    2

          2.0                 3.0      4.0      2.1.1     3.1.1       4.1      3.2          4.3

                                        A4                             A4      A4            A5
    412MHz 600MHz                              532MHz    600MHz
                                      800MHz                         800MHz   1GHz          1GHz

      128MB                  256MB    512MB    128MB      256MB      256MB    256MB     512MB


     480x320 480x320 960x640 480x320 480x320 960x640 1024x768 1024x768


      163ppi                 163ppi   326ppi   163ppi    163ppi      326ppi   132ppi    132ppi



jueves 14 de julio de 2011
Memoria RAM
          Es uno de los aspectos más críticos.
          Varia con el cambio de iPhone OS 3 a iOS 4.

                             Memoria    Memoria     Aviso de
                              RAM      Disponible   Memoria

                              128 Mb    35-40 Mb     20-25 Mb

                              256 Mb   120-150 Mb    80-90 Mb

                              512 Mb   340-370 Mb   260-300 Mb


jueves 14 de julio de 2011
Developer Program



jueves 14 de julio de 2011
Developer Program
          Programas de desarrollo
                   •         Gratuito
                   •         Standard (Individual) ($99/year)
                   •         Standard (Enterprise) ($99/year)
                   •         Enterprise ($299/year)
                   •         Universidad

          Programa de desarrollo para hardware


jueves 14 de julio de 2011
XCode + iOS SDK



jueves 14 de julio de 2011
iOS SDK
          ¿Cómo obtener el iOS SDK?
          •       Como descarga desde el portal de desarrollo.
          •       La URL es http://developer.apple.com/ios
          •       Es necesario (y gratuito) registrarse
          •       Requiere Mac OS X actualizado (>10.6.4)




jueves 14 de julio de 2011
XCode
          Actualmente el iOS SDK sólo se puede descargar en conjunto
          con el XCode.
          Hay dos versiones disponibles de XCode:
                   •         XCode 3.x
                   •         XCode 4.x
          La versión 3.x es gratuita y está disponible para cualquier
          persona registrada como desarrollador.
          La versión 4.x sólo es gratuita para desarrolladores inscritos
          en programas de pago.
          La versión 4.x puede ser adquirida por cualquiera a través del
          App Store por 3.99€

jueves 14 de julio de 2011
XCode 3

                             •   XCode: Entorno integrado de desarrollo que nos
                                 permite crear, gestionar, compilar y depurar el
                                 código de las aplicaciones.
                             •   Interface Builder: Herramienta que nos permite
                                 montar el interfaz de la aplicación de manera
                                 visual.
                             •   Instruments: Herramienta de análisis de
                                 rendimiento y depuración.


                             •   iOS Simulator


jueves 14 de julio de 2011
XCode 4
          XCode Tools
                             •   XCode 4:
                                 ‣ Entorno integrado de desarrollo que nos
                                   permite crear, gestionar, compilar y depurar
                                   el código de las aplicaciones.
                                 ‣ Integra elementos para generar la interfaz
                                   grá ca y de datos de la aplicación de
                                   manera visual.
                             •   Instruments: Herramienta de análisis de
                                 rendimiento y depuración.
                             •   iOS Simulator

jueves 14 de julio de 2011
Objective-C



jueves 14 de julio de 2011
Objective-C
          •       Lenguaje de programación orientada a objetos.
          •       Es un superset de ANSI C.
          •       Está basado en Smalltalk.
          •       Fue desarrollado en 1980.
          •       Adoptado por NEXTSTEP en 1988.
          •       En 1992 fue liberado bajo licencia GPL para GCC.
          •       Es compatible con C y con C++.
          •       Objective-C 2 es la base que utilizan Cocoa y
                  Cocoa Touch.
jueves 14 de julio de 2011
Objective-C
          De nimos archivos de encabezado y de código.
                   •         .h para los archivos de encabezado.
                   •         .m para el código en C y Objective-C
                   •         .mm para el código en C++ y Objective-C
          Las clases se de nen en dos partes: el interfaz (.h)
          y la implementación (.m)
          Soporta el uso de #import como directiva para
          incluir los archivos .h en los archivos .m y .mm

jueves 14 de julio de 2011
Objective-C
               Nombre de la clase              Nombre de la clase padre


                 @interface MyClass : NSObject
                 {
                      int count;
                      id data;                  Declaración de variables
                      NSString *name;
                 }
                 -(id)initWithString:(NSString *)aName;
                 +(MyClass *)createMyClassWithString:(NSString *)aName;
                 @end



               Declaración de métodos

jueves 14 de julio de 2011
Objective-C
          Podemos utilizar los tipos de variables de C y C++.
          La mayoría de los tipos de Objective-C se de nen
          como punteros.
          Podemos de nir tipos como id (weak typing).
          Todos los objetos son descendientes de NSObject.




jueves 14 de julio de 2011
Objective-C
                 -(void)insertObject:(id)anObject atIndex:(NSUInterger)index;



          El signo - identi ca el método como de instancia (+
          para métodos de clase).
          (void) tipo de retorno.

          insertObject:atIndex: selector del método.

          (id) y (NSUInteger) tipos de los parámetros.

          anObject y index nombres de los parámetros.


jueves 14 de julio de 2011
Objective-C
          Las llamadas a métodos se hacen a través del envío
          de mensajes a objetos.
          Los mensajes se envían entre corchetes []
                 [anObject insertObject:anotherObject atIndex:index];

          Los mensajes se pueden anidar
                 [[myObject textLabel] setText:@”¿Porqué esa @? ;)”];


          Existe una notación de puntos para propiedades y
          es totalmente equivalente
                 [myObject.textLabel setText:@”¿Porqué esa @? ;)”];


jueves 14 de julio de 2011
Objective-C
          La implementación de MyClass sería la siguiente:
                 @implementation MyClass

                 -(id)initWithString:(NSString *)aName
                 {
                   ...
                 }

                 +(MyClass *)createMyClassWithString:(NSString *)aName
                 {
                   ...
                 }

                 @end




jueves 14 de julio de 2011
Objective-C
          Las propiedades se de nen en el interfaz de la
          siguiente manera:
                 @interface MyClass : NSObject
                 {
                      NSString *name;
                 }
                 @property (nonatomic, retain) NSString *name;
                 @end

          Y en la implementación como:
                 @implementation MyClass

                 @synthesize name;

                 ...


jueves 14 de julio de 2011
Objective-C
          La síntesis de propiedades automatiza el proceso
          de creación de los métodos de acceso a las
          variables de instancia:
          Si la variable se llama myVar entonces:
                   •         El método de escritura será setMyVar:
                   •         El método de lectura será myVar
          En cualquier caso, en la notación de puntos
          accederemos como:
                 myObject.myVar = @”Supongamos una cadena”;
                 NSLog(@”%@”, myObject.myVar);

jueves 14 de julio de 2011
Objective-C
          Al declarar la propiedad hemos indicado
          parámetros que indican cómo se debe sintetizar la
          misma.
          Los más importantes son: getter=..., setter=...,
          readwrite, readonly, assing, retain, copy y
          nonatomic (atomic NO existe como parámetro).

          A la hora de usar @synthesize podemos cambiar el
          nombre de los métodos indicando:

                 @synthesize theVar = myVar;



jueves 14 de julio de 2011
Objective-C
          Los protocolos son conjuntos de funciones
          declaradas que carecen de implementación y que
          deben ser implementadas (o no) por los objetos
          delegados.
          Los protocolos se declaran como:
                 @protocol

                       -(void)requiredMethod;
                       @optional
                       -(void)optionalMethod;
                       @required
                       -(void)anotherRequiredMethod;

                 @end

jueves 14 de julio de 2011
Objective-C
          Para especi car que una clase cumple un
          protocolo, utilizamos:
                 @interface myObject:NSObject <aProtocol, bProtocol> {


          Podemos hacer que una clase cualquiera cumpla
          un protocolo usando categorías.
          Las categorías nos permiten ampliar el número de
          métodos de una clase pero no sus variables de
          instancia.



jueves 14 de julio de 2011
Objective-C
          Objective-C no tiene garbage collector.
          Funciona con un sistema de cuenta de referencias
          a objetos.
          Nunca usaremos dealloc, siempre release.
          Cuando queremos conservar un objeto,
          incrementamos su cuenta de referencias con
          retain.

          Podemos utilizar un sistema de pools para
          deshacernos de variables temporales utilizando
          autorelease.
jueves 14 de julio de 2011
Sistema Base



jueves 14 de julio de 2011
iOS Runtime Environment
          Presenta por defecto una serie de restricciones
          para optimizar el funcionamiento del equipo.
          Filosofía de usuario: Fast launch - Short Use.
          La multitarea agiliza la carga de aplicaciones.
          La memoria es limitada y puede que necesitemos
          descargar/recargar datos.




jueves 14 de julio de 2011
Sistema de Memoria Virtual
          iOS no soporta paginación al disco.
          Cuando la memoria se va terminando...
                   •         Se libera la memoria de solo lectura.
                   •         Se envían noti caciones a los programas.
          Hemos de tenerlo en cuenta a la hora de diseñar
          nuestras clases.




jueves 14 de julio de 2011
Automatic Sleep Timer
          Si el sistema no detecta actividad táctil durante un
          periodo de tiempo prolongado...
          •       Baja el brillo de la pantalla
          •       Apaga la pantalla
          •       Bloquea el dispositivo


          *Podemos deshabilitar esta opción si es necesario:
          [[UIApplication sharedApplication]
          setIdleTimerDisabled:YES];

jueves 14 de julio de 2011
Application Sandbox
          Se trata de un mecanismo de defensa para la aplicación y el
          sistema.
          Se crea un directorio único y opaco para almacenar la
          aplicación.
          Simpli ca instalaciones, backups, restauraciones y borrado.
          La aplicación sólo puede acceder a los contenidos de su
          sandbox.
          El sistema de archivos es case sensitive.
          No hay límites en el tamaño de la aplicación y de los
          documentos de la misma, hay sentido común.


jueves 14 de julio de 2011
Application Sandbox
          Backups incrementales de las carpetas en negrita:

                  <Application Home>/AppName.app
                  <Application Home>/Documents
                  <Application Home>/Library
                             <Application Home>/Library/Preferences
                             <Application Home>/Library/Caches
                  <Application Home>/tmp/


jueves 14 de julio de 2011
Patrones de Diseño
          iOS utiliza los siguientes patrones de diseño:
          •       Model-View-Controller
          •       Block Objects
          •       Delegation
          •       Target-Action
          •       Managed Memory Model
          •       Threads y Programación Concurrente
          •       Singleton

jueves 14 de julio de 2011
Interface
                             IBOutlets & IBActions




jueves 14 de julio de 2011
Window Based Template



                                     File’s Owner

         First Responder                                 Window

                                 UIApplicationDelegate


jueves 14 de julio de 2011
Window
          Las aplicaciones tienen sólo una ventana.
          La ventana proporciona un área donde dibujar el
          resto de elementos de la aplicación.
          La ventana es una subclase de vista aunque carece
          de controlador de vista. (Implicaciones más
          adelante)




jueves 14 de julio de 2011
IBOutlets & IBActions
          Los IBOutlets marcan una variable en XCode para
          que sea seleccionable en Interface Builder.
          Las IBActions marcan un método en XCode para
          que sea accesible por los elementos capaces de
          hacer llamadas a funciones en Interface Builder.
          A efectos de código son inocuos.
          Al contrario que en Cocoa, en Cocoa Touch se
          permite la asociación de varias acciones a un
          mismo evento.
          *Problema de compatibilidad entre Mac OS X e iOS
jueves 14 de julio de 2011
View Based Template



                UIApplicationDelegate         Window




                             ViewController    View


jueves 14 de julio de 2011
UIKit
                             Elementos básicos




jueves 14 de julio de 2011
UIKit
          Se trata del Framework que nos proporciona la
          base para el diseño de las aplicaciones iOS.
          Se deben utilizar desde el main thread.
          Existe un proyecto de ejemplo en el que se
          exponen los elementos y sus estilos (UICatalog).
          Principalmente trabajaremos sobre los elementos y
          las acciones que provocan o requieren.




jueves 14 de julio de 2011
UIKit
          Los distintos controles pueden ser:
          •       Elementos Activos (Active): UIButton, UISwitch ...
          •       Elementos Inactivos (Static): UITextField ...
          •       Elementos Pasivos (Pasive): UIImage, UILabel ...
          (Casi) Todos son subclases de UIControl y pueden
          actuar de cualquier de las tres maneras.




jueves 14 de julio de 2011
First Responder
          Un “responder” es un objeto que puede responder
          a eventos y manipularlos.
          El “ rst responder” se re ere en cada momento al
          elemento que tiene el foco.
          El objeto debe responder al método
          canBecomeFirstResponder.

          Desde ese momento es capaz de situarse como
          elemento que recibe los eventos de movimiento,
          control remoto, acciones y menús de edición.


jueves 14 de julio de 2011
First Responder
          En ocasiones, tendremos que forzar que una
          instancia abandone el papel de First Responder
          con resignFirstReponder.
          Podemos pasar el mensaje al siguiente elemento
          de la cadena ([self nextResponder]) de manera
          manual.
          Cabe destacar que el nextResponder de un UIView
          es su View Controller.



jueves 14 de julio de 2011
Puliendo detalles...
          iPhone 4 incluye una pantalla Retina Display.
          El tamaño en pixeles de la pantalla pasa de
          320x480 a 640x960.
          El escalado de los elementos es automático.
          Podemos incluir imágenes de alta resolución.
          Si incluimos el archivo imagen.png y el
          sistema detecta alta resolución,
          reemplazará la imagen automáticamente
          por imagen@2x.png si existe.

jueves 14 de julio de 2011
View Controllers



jueves 14 de julio de 2011
View Controller
          Nos permiten generar bloques MVC.
          Podemos reutilizar elementos:
                   •         En otras aplicaciones
                   •         En la misma aplicación
          Es conveniente de nir las interacciones entre view
          controllers mediante protocolos.




jueves 14 de julio de 2011
Rotación
                             View Controllers




jueves 14 de julio de 2011
Rotación
          Cuando rotamos el dispositivo, el sistema puede
          encargarse de rotar los componentes de nuestra
          aplicación.
          Tenemos tres opciones para gestionar este cambio:
          •       Autorotating & Autosizing
          •       Realizar los cambios programáticamente
          •       Realizar los cambios mediante un archivo NIB




jueves 14 de julio de 2011
Root Controller



jueves 14 de julio de 2011
Root Controller
          Las aplicaciones con múltiples vistas necesitarán
          un controlador de vistas que será hijo de
          UIViewController
          Ese controlador tendrá información sobre sus
          posibles vistas y funciones para intercambiar el
          valor a asignar a view por cualquiera de ellas
          Identi camos si un elemento está o no cargado
          porque si no está cargado, el valor de
          myObject.view.superview será nil.



jueves 14 de julio de 2011
Tab Bar



jueves 14 de julio de 2011
Tab Bar
          Necesitamos un UITabBarController
          [window addSubview:myTabController.view];
          Podemos gestionarlo directamente desde Interface
          Builder o a mano pero combinar las dos
          aproximaciones es bastante complicado
          myTabController.viewControllers es un Array
          de UIViewControllers




jueves 14 de julio de 2011
Tab Bar
          Podemos personalizar la imagen que utiliza con
          contactsNavController.tabBarItem.image =
          [UIImage imageNamed:@"contacts.png"];
          Podemos personalizar también el título y el Badge
          del TabBarItem de cada ViewController.
          Tiene un límite de componentes y tras excederlo se
          encarga de gestionar el exceso, la reorganización...




jueves 14 de julio de 2011
Navigation Controller



jueves 14 de julio de 2011
NavigationController
          Gestiona la navegación entre controladores de
          vista en forma de pila.
          Gestionamos un método de tipo push que inserta
          el siguiente elemento en la pila.
          Podemos gestionar un método de tipo pop para
          volver hacia atrás en la jerarquía, pero esta acción
          se suele dejar al backBarButton.
          El backBarButton es personalizable pero hay que
          entender CUANDO aparece.


jueves 14 de julio de 2011
Comunicación con el
                             Usuario
                             AlertView , ActionSheets y Vistas Modales




jueves 14 de julio de 2011
AlertView
          Permite avisar al usuario.
          Puede gestionar la respuesta del usuario mediante
          botones.
          Los pasos para utilizarlo son:
          •       Tener un delegado (si hay que realizar acciones)
          •       Generar un UIAlertView
          •       Mostrar un UIAlertView en la ventana



jueves 14 de julio de 2011
ActionSheet
          Permite consultar al usuario.
          Puede gestionar la respuesta del usuario mediante
          botones.
          Los pasos para utilizarlo son:
          •       Tener un delegado
          •       Generar un UIActionSheet
          •       Mostrar un UIActionSheet en una vista concreta
                  y que sea visible en este momento.


jueves 14 de julio de 2011
Vistas Modales
          Un UIViewController puede lanzar una vista de
          forma modal.
          Utilizamos el método:
          presentModalViewController:inView:
          El UIViewController que lanzamos, devolverá el
          control al anterior con el método
          dismissModalViewController




jueves 14 de julio de 2011
Persistencia de Datos



jueves 14 de julio de 2011
Estrategias de persistencia
          Podemos utilizar distintas estrategias de
          persistencia:
          - Uso de un archivo
          - Uso de múltiples archivos
          - Uso de bases de datos
                             •   SQLite 3
                             •   Core Data
          - Uso de las preferencias de usuario


jueves 14 de julio de 2011
Documents & tmp
                             Directorios en los que podemos escribir




jueves 14 de julio de 2011
Document Directory
          Dentro del sandbox, es el directorio en el que
          podemos guardar elementos de forma que sean
          persistente (y se haga backup de los mismos).
          Obtenemos la ruta de este directorio mediante el
          siguiente código:
          ! NSArray *paths = NSSearchPathForDirectoriesInDomains
          (NSDocumentDirectory, NSUserDomainMask, YES);
          ! NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *filePath = [documentsDirectory
          stringByAppendingPathComponent:@”myFile.ext”];




jueves 14 de julio de 2011
tmp Directory
          Directorio que también podemos utilizar para
          almacenar datos.
          No podemos garantizar su existencia ni su
          persistencia.
          Obtenemos la ruta de este directorio mediante el
          siguiente código:
          ! NSString *tempPath = NSTemporaryDirectory();
          ! NSString *tempFile = [tempPath
          stringByAppendingPathComponent:@"tempFile.ext"];




jueves 14 de julio de 2011
Application Setup
                              & User Defaults



jueves 14 de julio de 2011
Settings Bundle
          Las preferencias de usuario se acceden desde el
          menú de ajustes.
          Permiten con gurar aquellos aspectos que se
          deben establecer una vez y rara vez son
          modi cados. (Por ejemplo, nombre de la cuenta de
          usuario...)
          No todas las aplicaciones lo necesitan.




jueves 14 de julio de 2011
Settings Bundle
          Hemos de crear un settings bundle.
          Se trata de un Property List con un formato
          concreto que almacena diversos tipos de valores.
          Se copia en una localización especial y es accesible
          por el sistema desde los ajustes.
          Se accede a los datos mediante un sistema key-
          value
          ! NSUserDefaults *defaults = [NSUserDefaults
          standardUserDefaults];

          ! [defaults objectForKey:myKey];
          ! [defaults setObject:myObject forKey:myKey];

jueves 14 de julio de 2011
Data from the Web



jueves 14 de julio de 2011
Network Basics
          Descargar archivos desde internet basados en
          esquemas de URL
          Guardar los archivos en la ruta de documentos de
          la aplicación
          Recuperar los archivos de la ruta de documentos
          de la aplicación.




jueves 14 de julio de 2011
UIWebView



jueves 14 de julio de 2011
UIWebView
          Partimos de un UIWebView
          Cargamos contenido HTML (reemplaza al RTF)
          La clave es la etiqueta META siguiente:
          <meta name="viewport" content="width=320,
          user-scalable=yes">
          Podemos cargar datos HTML desde una cadena:
          NSString *html = @"<html><head></head><body><h1>Hello Web!
          </h1></body></html>";
          [web loadHTMLString:html baseURL:nil];




jueves 14 de julio de 2011
UIWebView
          Podemos cargar contenidos desde una URL de la
          siguiente manera:
          NSString *urlAddress = @"http://www.google.com";

          //Create a URL object.
          NSURL *url = [NSURL URLWithString:urlAddress];!

          //URL Requset Object
          NSURLRequest *requestObj = [NSURLRequest
          requestWithURL:url];

          //Load the request in the UIWebView.
          [web loadRequest:requestObj];




jueves 14 de julio de 2011
Handling Touch Events
                             Taps, Touches & Gestures




jueves 14 de julio de 2011
Pantallas Capacitivas
          Pantallas capacitivas vs. pantallas resistivas.
          Detección de variaciones en el campo capacitivo.
          Discriminación de ruido.
          Imposibilidad de utilizar stylus < 5mm diámetro.
          Gestión software de los eventos.




jueves 14 de julio de 2011
Recepción de Eventos
          Precisamos elementos que:
          •       Hereden de UIResponder
          •       Sean capaces de establecerse como
                  FirstResponder
          Podemos trasladar el evento al siguiente elemento
          de la cadena de respuesta.
          Las vistas pasan el evento a sus controladores.




jueves 14 de julio de 2011
Eventos Táctiles
          Poner un dedo en la pantalla: Touch
          Quitar y poner el dedo de la pantalla: Tap
          Combinación de touches/taps: Gestures
          Arrastrar un dedo:
                   •         En una dirección: Swipe o Flick (rápido)
                   •         En una ruta: Drag




jueves 14 de julio de 2011
Eventos Táctiles
          Mover dos dedos en direcciones opuestas
                   •         Separar/acercar dos dedos: Pinch open/close
                   •         Rotar: Rotate
          Mover dos dedos en paralelo: Pan
          Sacudir el dispositivo: Shake




jueves 14 de julio de 2011
Eventos Táctiles
          Las funciones que podemos controlar son:
              touchesBegan:withEvent:
              touchesMoved:withEvent:
              touchesEnded:withEvent:
              touchesCancelled:withEvent:


          iPhone e iPod soportan 5 touches en la pantalla.
          iPad soporta 10 touches en la pantalla.




jueves 14 de julio de 2011
Gestores
          Podemos gestionar los gestos mediante
          controladores.
          Todos son subclases de UIGestureRecognizer
              UITapGestureRecognizer
              UIPinchGestureRecognizer
              UIRotationGestureRecognizer
              UISwipeGestureRecognizer
              UIPanGestureRecognizer
              UILongPressGestureRecognize
          Hemos de inicializarlos, con gurarlos y asociarlos a
          una vista.


jueves 14 de julio de 2011

Más contenido relacionado

Destacado

Rankig prévio classificados polo sobral ce caixa 2014
Rankig prévio classificados polo sobral ce caixa 2014Rankig prévio classificados polo sobral ce caixa 2014
Rankig prévio classificados polo sobral ce caixa 2014Francisco Brito
 
Conferencia Desarrollo de Aplicaciones iOS (Ecuador)
Conferencia Desarrollo de Aplicaciones iOS (Ecuador)Conferencia Desarrollo de Aplicaciones iOS (Ecuador)
Conferencia Desarrollo de Aplicaciones iOS (Ecuador)Nelson Cruz Mora
 
0032 aplicaciones para_dispositivos_ios
0032 aplicaciones para_dispositivos_ios0032 aplicaciones para_dispositivos_ios
0032 aplicaciones para_dispositivos_iosGeneXus
 
iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11
iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11
iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11MobileMonday Estonia
 
desarrollo de aplicaciones para ios
desarrollo de aplicaciones para iosdesarrollo de aplicaciones para ios
desarrollo de aplicaciones para iosAlysha Nieol
 
CodeWithChris Q&A: I Have an App Idea. Where Do I Start?
CodeWithChris Q&A: I Have an App Idea. Where Do I Start?CodeWithChris Q&A: I Have an App Idea. Where Do I Start?
CodeWithChris Q&A: I Have an App Idea. Where Do I Start?Chris
 
Building second screen TV apps
Building second screen TV appsBuilding second screen TV apps
Building second screen TV appsvrt-medialab
 
Hello World Program in xcode ,IOS Development using swift
Hello World Program in xcode ,IOS Development using swiftHello World Program in xcode ,IOS Development using swift
Hello World Program in xcode ,IOS Development using swiftVikrant Arya
 
Servidor y cliente iOS en 45min
Servidor y cliente iOS en 45minServidor y cliente iOS en 45min
Servidor y cliente iOS en 45minJavier Moreno
 
iOS - Overview of Mobile Application Developement
iOS - Overview of Mobile Application Developement iOS - Overview of Mobile Application Developement
iOS - Overview of Mobile Application Developement Rohit214
 
taller ios con @javisoto en betabeers
taller ios con @javisoto en betabeerstaller ios con @javisoto en betabeers
taller ios con @javisoto en betabeersNombre Apellidos
 
End-to-end Mobile App Development (with iOS and Azure Mobile Services)
End-to-end Mobile App Development (with iOS and Azure Mobile Services)End-to-end Mobile App Development (with iOS and Azure Mobile Services)
End-to-end Mobile App Development (with iOS and Azure Mobile Services)Andri Yadi
 
Aprovechando tecnologias IOS, para Apps
Aprovechando tecnologias IOS, para AppsAprovechando tecnologias IOS, para Apps
Aprovechando tecnologias IOS, para Appseliseo ortiz
 

Destacado (20)

Ios.s2
Ios.s2Ios.s2
Ios.s2
 
Rankig prévio classificados polo sobral ce caixa 2014
Rankig prévio classificados polo sobral ce caixa 2014Rankig prévio classificados polo sobral ce caixa 2014
Rankig prévio classificados polo sobral ce caixa 2014
 
Ios.s5
Ios.s5Ios.s5
Ios.s5
 
iOS Application Development
iOS Application DevelopmentiOS Application Development
iOS Application Development
 
Conferencia Desarrollo de Aplicaciones iOS (Ecuador)
Conferencia Desarrollo de Aplicaciones iOS (Ecuador)Conferencia Desarrollo de Aplicaciones iOS (Ecuador)
Conferencia Desarrollo de Aplicaciones iOS (Ecuador)
 
I os
I osI os
I os
 
0032 aplicaciones para_dispositivos_ios
0032 aplicaciones para_dispositivos_ios0032 aplicaciones para_dispositivos_ios
0032 aplicaciones para_dispositivos_ios
 
iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11
iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11
iOS development, Ahti Liin, Mooncascade OÜ @ MoMo Tallinn 11.04.11
 
Ios.s1
Ios.s1Ios.s1
Ios.s1
 
desarrollo de aplicaciones para ios
desarrollo de aplicaciones para iosdesarrollo de aplicaciones para ios
desarrollo de aplicaciones para ios
 
CodeWithChris Q&A: I Have an App Idea. Where Do I Start?
CodeWithChris Q&A: I Have an App Idea. Where Do I Start?CodeWithChris Q&A: I Have an App Idea. Where Do I Start?
CodeWithChris Q&A: I Have an App Idea. Where Do I Start?
 
Desarrollo para iPhone y iPad con Flash CS5
Desarrollo para iPhone y iPad con Flash CS5Desarrollo para iPhone y iPad con Flash CS5
Desarrollo para iPhone y iPad con Flash CS5
 
Building second screen TV apps
Building second screen TV appsBuilding second screen TV apps
Building second screen TV apps
 
Hello World Program in xcode ,IOS Development using swift
Hello World Program in xcode ,IOS Development using swiftHello World Program in xcode ,IOS Development using swift
Hello World Program in xcode ,IOS Development using swift
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOS
 
Servidor y cliente iOS en 45min
Servidor y cliente iOS en 45minServidor y cliente iOS en 45min
Servidor y cliente iOS en 45min
 
iOS - Overview of Mobile Application Developement
iOS - Overview of Mobile Application Developement iOS - Overview of Mobile Application Developement
iOS - Overview of Mobile Application Developement
 
taller ios con @javisoto en betabeers
taller ios con @javisoto en betabeerstaller ios con @javisoto en betabeers
taller ios con @javisoto en betabeers
 
End-to-end Mobile App Development (with iOS and Azure Mobile Services)
End-to-end Mobile App Development (with iOS and Azure Mobile Services)End-to-end Mobile App Development (with iOS and Azure Mobile Services)
End-to-end Mobile App Development (with iOS and Azure Mobile Services)
 
Aprovechando tecnologias IOS, para Apps
Aprovechando tecnologias IOS, para AppsAprovechando tecnologias IOS, para Apps
Aprovechando tecnologias IOS, para Apps
 

Similar a Desarrollo de apps para iphone

Similar a Desarrollo de apps para iphone (20)

Taller de introducción a iOS development
Taller de introducción a iOS developmentTaller de introducción a iOS development
Taller de introducción a iOS development
 
Swift
SwiftSwift
Swift
 
Moviles
MovilesMoviles
Moviles
 
Moviles
MovilesMoviles
Moviles
 
Appcelerator
AppceleratorAppcelerator
Appcelerator
 
Desarrollo de apps multiplataforma Movil
Desarrollo de apps multiplataforma MovilDesarrollo de apps multiplataforma Movil
Desarrollo de apps multiplataforma Movil
 
Seminario &quot;Desarrollo para entornos móviles. Comparativas y tendencias&q...
Seminario &quot;Desarrollo para entornos móviles. Comparativas y tendencias&q...Seminario &quot;Desarrollo para entornos móviles. Comparativas y tendencias&q...
Seminario &quot;Desarrollo para entornos móviles. Comparativas y tendencias&q...
 
Share point y los dispositivos moviles
Share point y los dispositivos movilesShare point y los dispositivos moviles
Share point y los dispositivos moviles
 
Arquitectura SO Moviles
Arquitectura SO MovilesArquitectura SO Moviles
Arquitectura SO Moviles
 
Copia de sistemas opertivos
Copia de sistemas opertivosCopia de sistemas opertivos
Copia de sistemas opertivos
 
Ios
Ios Ios
Ios
 
Android e ios5
Android e ios5Android e ios5
Android e ios5
 
Adobe flash professional
Adobe  flash professionalAdobe  flash professional
Adobe flash professional
 
Estructuras sdk
Estructuras sdkEstructuras sdk
Estructuras sdk
 
iOS
iOSiOS
iOS
 
Ios
IosIos
Ios
 
AndroID
AndroIDAndroID
AndroID
 
Andropid
AndropidAndropid
Andropid
 
DAM-S4.pptx
DAM-S4.pptxDAM-S4.pptx
DAM-S4.pptx
 
Sistemas
Sistemas Sistemas
Sistemas
 

Más de E3 Futura

Astrofotografia
AstrofotografiaAstrofotografia
AstrofotografiaE3 Futura
 
Photoshop® para niños malos piel 2.0
Photoshop® para niños malos piel 2.0 Photoshop® para niños malos piel 2.0
Photoshop® para niños malos piel 2.0 E3 Futura
 
Iniciación a Kinect .ppt
Iniciación a Kinect .pptIniciación a Kinect .ppt
Iniciación a Kinect .pptE3 Futura
 
2011 07-12 presentacion astronomia
2011 07-12 presentacion astronomia2011 07-12 presentacion astronomia
2011 07-12 presentacion astronomiaE3 Futura
 
2011 07-12 adrian yanes - aalto 1
2011 07-12 adrian yanes - aalto 12011 07-12 adrian yanes - aalto 1
2011 07-12 adrian yanes - aalto 1E3 Futura
 
Report Campus Party Valencia 2010
Report Campus Party Valencia 2010Report Campus Party Valencia 2010
Report Campus Party Valencia 2010E3 Futura
 
Dossier Prensa Campus Party IberoaméRica
Dossier Prensa Campus Party IberoaméRicaDossier Prensa Campus Party IberoaméRica
Dossier Prensa Campus Party IberoaméRicaE3 Futura
 

Más de E3 Futura (7)

Astrofotografia
AstrofotografiaAstrofotografia
Astrofotografia
 
Photoshop® para niños malos piel 2.0
Photoshop® para niños malos piel 2.0 Photoshop® para niños malos piel 2.0
Photoshop® para niños malos piel 2.0
 
Iniciación a Kinect .ppt
Iniciación a Kinect .pptIniciación a Kinect .ppt
Iniciación a Kinect .ppt
 
2011 07-12 presentacion astronomia
2011 07-12 presentacion astronomia2011 07-12 presentacion astronomia
2011 07-12 presentacion astronomia
 
2011 07-12 adrian yanes - aalto 1
2011 07-12 adrian yanes - aalto 12011 07-12 adrian yanes - aalto 1
2011 07-12 adrian yanes - aalto 1
 
Report Campus Party Valencia 2010
Report Campus Party Valencia 2010Report Campus Party Valencia 2010
Report Campus Party Valencia 2010
 
Dossier Prensa Campus Party IberoaméRica
Dossier Prensa Campus Party IberoaméRicaDossier Prensa Campus Party IberoaméRica
Dossier Prensa Campus Party IberoaméRica
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (15)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Desarrollo de apps para iphone

  • 1. Desarrollo iOS Creación de Aplicaciones para iPad, iPhone e iPod Touch iOS100a - Jesús Mazcuñán Arnandis - Julio 2011 jueves 14 de julio de 2011
  • 3. Sobre Barreira Arte y Diseño... Centro dedicado a la formación en materias de diseño. Centro AATCe. barreira@barreira.es CICLOS FORMATIVOS APPLE Grado Medio - Arte Final Aperture Grado Superior - Decoración Final Cut Grado Superior - Diseño Gráfico iLife Grado Superior - Mobiliario iWork Grado Superior - Modas Mac OS X Mac OS X Server ADOBE iOS Photoshop CURSOS ESPECIALIZADOS Illustrator Indesign PRUEBA DE ACCESO Dreamweaver Flash TALLERES AUTODESK Dibujo técnico Dibujo artístico Autocad Creación multimedia 3D Max Revit jueves 14 de julio de 2011
  • 4. Sobre el docente... Jesús Mazcuñán Arnandis Formador en Barreira Arte y Diseño Apple Certi ed • Pro • Trainer (IT & Pro Apps) • Support Professional 10.6 • Technical Coordinator 10.6 iOS Developer jueves 14 de julio de 2011
  • 5. Cursos iOS * No hay cursos o ciales de iOS. • iOS User Start Point (4h) • iOS 100 Developer Start Point (10h) • iOS 101 Developer Boot Camp (>20 h) • iOS 201 Advanced Apps (>20h) • iOS 300 Frameworks (4h) • iOS 301 Starting Game Development with Cocos 2D jueves 14 de julio de 2011
  • 6. iOS 100a (5h) Tenemos 5 horas para cubrir los principales objetivos que nos permitirán iniciarnos en el desarrollo de aplicaciones iOS - Conocer el dispositivo - Conocer el lenguaje de desarrollo - Conocer la estructura del programa - Entender la losofía del proceso de desarrollo - Conocer las herramientas del SDK (XCode 3.*) - Introducir los principales componentes de UIKit - Realizar pruebas en el simulador El resto de contenidos se ven en iOS 100 (b) jueves 14 de julio de 2011
  • 7. iOS 100b (5h) Después de haber visto los contenidos de iOS 100a, podemos pasar a las siguientes fases de desarrollo. - Programa de desarrollo (Standard) - Generación de certi cados de desarrollo - Pruebas en hardware - Fundamentos de la distribución de aplicaciones - Más componentes de UIKit jueves 14 de julio de 2011
  • 8. Antes de comenzar... Requisitos mínimos • Saber programar en cualquier lenguaje. • Conocer los conceptos de la programación orientada a objetos. • Estar registrado como desarrollador iOS en el programa gratuito. Requisitos ideales • Saber programar en Objective-C. • Estar registrado en el Standard Program. • Disponer de un terminal para pruebas (y cable USB). jueves 14 de julio de 2011
  • 9. iOS Overview jueves 14 de julio de 2011
  • 10. iOS Overview Sistema Operativo y tecnologías que se utilizan para ejecutar aplicaciones nativas en iPad, iPhone e iPod Touch. Para desarrollar las aplicaciones nativas utilizamos: • iOS SDK: contiene el código, la información y las herramientas necesarias para desarrollo. • XCode: proporciona las herramientas para edición, compilación y depuración. • Simulador (no emulador) de iOS: es una plataforma que imita los dispositivos. jueves 14 de julio de 2011
  • 11. iOS Overview • iOS nos proporciona los mecanismos necesarios para generar aplicaciones con independencia del hardware. • Aunque la aplicación no se ve afectada por los cambios en el hardware hemos de ser conscientes de las capacidades de los dispositivos. • Las versiones de iOS intentan maximizar la retrocompatibilidad, pero no siempre es posible. (iOS 4.3 no soporta modelos de 2ª generación) jueves 14 de julio de 2011
  • 12. iOS Overview • Framework: Directorios que contiene las librerías (bibliotecas) dinámicas y los recursos para soportarlas. • iOS proporciona un conjunto de librerías dinámicas para tareas comunes. • Cualquier librería de terceros ha de ser incluida como librería estática. • Librerías estáticas son aquellas que se copian en la aplicación generando productos independientes. jueves 14 de julio de 2011
  • 13. iOS Overview Podemos crear dos tipos de aplicaciones: Contenido Web • HTML5, Javascript, CSS, AJAX, SQLite... • http://www.apple.com/webapps Aplicaciones Nativas • C, C++, Objective-C. • App Store. • Proceso de validación. jueves 14 de julio de 2011
  • 14. Dispositivos jueves 14 de julio de 2011
  • 15. Dispositivos En enero de 2011 Apple anuncia que ha superado la cifra de 160 millones de dispositivos que soportan iOS vendidos. Estos dispositivos incluyen diversas familias: • iPod Touch (4 generaciones) • iPhone (4 generaciones) • iPad (2 generaciones) Distintas capacidades entre familias e incluso dentro de la misma familia. jueves 14 de julio de 2011
  • 16. Caducidad de Dispositivos A pesar de intentar dar soporta a todos los dispositivos anteriores con cada versión de iOS mediante el recorte en prestaciones software, las diferencias de hardware obligan a Apple a abandonar el soporte para los modelos antiguos llegado cierto punto. Las fechas de caducidad son: • iPhone EDGE (1G) - 36 meses • iPhone 3G (2G) - 32 meses • iPod Touch (1G) - 33 meses • iPod Touch (2G) - 29 meses jueves 14 de julio de 2011
  • 17. Dispositivos iPhone iPod Touch iPad 3G 3GS 4 2ª 3ª 4ª 2 2.0 3.0 4.0 2.1.1 3.1.1 4.1 3.2 4.3 A4 A4 A4 A5 412MHz 600MHz 532MHz 600MHz 800MHz 800MHz 1GHz 1GHz 128MB 256MB 512MB 128MB 256MB 256MB 256MB 512MB 480x320 480x320 960x640 480x320 480x320 960x640 1024x768 1024x768 163ppi 163ppi 326ppi 163ppi 163ppi 326ppi 132ppi 132ppi jueves 14 de julio de 2011
  • 18. Memoria RAM Es uno de los aspectos más críticos. Varia con el cambio de iPhone OS 3 a iOS 4. Memoria Memoria Aviso de RAM Disponible Memoria 128 Mb 35-40 Mb 20-25 Mb 256 Mb 120-150 Mb 80-90 Mb 512 Mb 340-370 Mb 260-300 Mb jueves 14 de julio de 2011
  • 19. Developer Program jueves 14 de julio de 2011
  • 20. Developer Program Programas de desarrollo • Gratuito • Standard (Individual) ($99/year) • Standard (Enterprise) ($99/year) • Enterprise ($299/year) • Universidad Programa de desarrollo para hardware jueves 14 de julio de 2011
  • 21. XCode + iOS SDK jueves 14 de julio de 2011
  • 22. iOS SDK ¿Cómo obtener el iOS SDK? • Como descarga desde el portal de desarrollo. • La URL es http://developer.apple.com/ios • Es necesario (y gratuito) registrarse • Requiere Mac OS X actualizado (>10.6.4) jueves 14 de julio de 2011
  • 23. XCode Actualmente el iOS SDK sólo se puede descargar en conjunto con el XCode. Hay dos versiones disponibles de XCode: • XCode 3.x • XCode 4.x La versión 3.x es gratuita y está disponible para cualquier persona registrada como desarrollador. La versión 4.x sólo es gratuita para desarrolladores inscritos en programas de pago. La versión 4.x puede ser adquirida por cualquiera a través del App Store por 3.99€ jueves 14 de julio de 2011
  • 24. XCode 3 • XCode: Entorno integrado de desarrollo que nos permite crear, gestionar, compilar y depurar el código de las aplicaciones. • Interface Builder: Herramienta que nos permite montar el interfaz de la aplicación de manera visual. • Instruments: Herramienta de análisis de rendimiento y depuración. • iOS Simulator jueves 14 de julio de 2011
  • 25. XCode 4 XCode Tools • XCode 4: ‣ Entorno integrado de desarrollo que nos permite crear, gestionar, compilar y depurar el código de las aplicaciones. ‣ Integra elementos para generar la interfaz grá ca y de datos de la aplicación de manera visual. • Instruments: Herramienta de análisis de rendimiento y depuración. • iOS Simulator jueves 14 de julio de 2011
  • 26. Objective-C jueves 14 de julio de 2011
  • 27. Objective-C • Lenguaje de programación orientada a objetos. • Es un superset de ANSI C. • Está basado en Smalltalk. • Fue desarrollado en 1980. • Adoptado por NEXTSTEP en 1988. • En 1992 fue liberado bajo licencia GPL para GCC. • Es compatible con C y con C++. • Objective-C 2 es la base que utilizan Cocoa y Cocoa Touch. jueves 14 de julio de 2011
  • 28. Objective-C De nimos archivos de encabezado y de código. • .h para los archivos de encabezado. • .m para el código en C y Objective-C • .mm para el código en C++ y Objective-C Las clases se de nen en dos partes: el interfaz (.h) y la implementación (.m) Soporta el uso de #import como directiva para incluir los archivos .h en los archivos .m y .mm jueves 14 de julio de 2011
  • 29. Objective-C Nombre de la clase Nombre de la clase padre @interface MyClass : NSObject { int count; id data; Declaración de variables NSString *name; } -(id)initWithString:(NSString *)aName; +(MyClass *)createMyClassWithString:(NSString *)aName; @end Declaración de métodos jueves 14 de julio de 2011
  • 30. Objective-C Podemos utilizar los tipos de variables de C y C++. La mayoría de los tipos de Objective-C se de nen como punteros. Podemos de nir tipos como id (weak typing). Todos los objetos son descendientes de NSObject. jueves 14 de julio de 2011
  • 31. Objective-C -(void)insertObject:(id)anObject atIndex:(NSUInterger)index; El signo - identi ca el método como de instancia (+ para métodos de clase). (void) tipo de retorno. insertObject:atIndex: selector del método. (id) y (NSUInteger) tipos de los parámetros. anObject y index nombres de los parámetros. jueves 14 de julio de 2011
  • 32. Objective-C Las llamadas a métodos se hacen a través del envío de mensajes a objetos. Los mensajes se envían entre corchetes [] [anObject insertObject:anotherObject atIndex:index]; Los mensajes se pueden anidar [[myObject textLabel] setText:@”¿Porqué esa @? ;)”]; Existe una notación de puntos para propiedades y es totalmente equivalente [myObject.textLabel setText:@”¿Porqué esa @? ;)”]; jueves 14 de julio de 2011
  • 33. Objective-C La implementación de MyClass sería la siguiente: @implementation MyClass -(id)initWithString:(NSString *)aName { ... } +(MyClass *)createMyClassWithString:(NSString *)aName { ... } @end jueves 14 de julio de 2011
  • 34. Objective-C Las propiedades se de nen en el interfaz de la siguiente manera: @interface MyClass : NSObject { NSString *name; } @property (nonatomic, retain) NSString *name; @end Y en la implementación como: @implementation MyClass @synthesize name; ... jueves 14 de julio de 2011
  • 35. Objective-C La síntesis de propiedades automatiza el proceso de creación de los métodos de acceso a las variables de instancia: Si la variable se llama myVar entonces: • El método de escritura será setMyVar: • El método de lectura será myVar En cualquier caso, en la notación de puntos accederemos como: myObject.myVar = @”Supongamos una cadena”; NSLog(@”%@”, myObject.myVar); jueves 14 de julio de 2011
  • 36. Objective-C Al declarar la propiedad hemos indicado parámetros que indican cómo se debe sintetizar la misma. Los más importantes son: getter=..., setter=..., readwrite, readonly, assing, retain, copy y nonatomic (atomic NO existe como parámetro). A la hora de usar @synthesize podemos cambiar el nombre de los métodos indicando: @synthesize theVar = myVar; jueves 14 de julio de 2011
  • 37. Objective-C Los protocolos son conjuntos de funciones declaradas que carecen de implementación y que deben ser implementadas (o no) por los objetos delegados. Los protocolos se declaran como: @protocol -(void)requiredMethod; @optional -(void)optionalMethod; @required -(void)anotherRequiredMethod; @end jueves 14 de julio de 2011
  • 38. Objective-C Para especi car que una clase cumple un protocolo, utilizamos: @interface myObject:NSObject <aProtocol, bProtocol> { Podemos hacer que una clase cualquiera cumpla un protocolo usando categorías. Las categorías nos permiten ampliar el número de métodos de una clase pero no sus variables de instancia. jueves 14 de julio de 2011
  • 39. Objective-C Objective-C no tiene garbage collector. Funciona con un sistema de cuenta de referencias a objetos. Nunca usaremos dealloc, siempre release. Cuando queremos conservar un objeto, incrementamos su cuenta de referencias con retain. Podemos utilizar un sistema de pools para deshacernos de variables temporales utilizando autorelease. jueves 14 de julio de 2011
  • 40. Sistema Base jueves 14 de julio de 2011
  • 41. iOS Runtime Environment Presenta por defecto una serie de restricciones para optimizar el funcionamiento del equipo. Filosofía de usuario: Fast launch - Short Use. La multitarea agiliza la carga de aplicaciones. La memoria es limitada y puede que necesitemos descargar/recargar datos. jueves 14 de julio de 2011
  • 42. Sistema de Memoria Virtual iOS no soporta paginación al disco. Cuando la memoria se va terminando... • Se libera la memoria de solo lectura. • Se envían noti caciones a los programas. Hemos de tenerlo en cuenta a la hora de diseñar nuestras clases. jueves 14 de julio de 2011
  • 43. Automatic Sleep Timer Si el sistema no detecta actividad táctil durante un periodo de tiempo prolongado... • Baja el brillo de la pantalla • Apaga la pantalla • Bloquea el dispositivo *Podemos deshabilitar esta opción si es necesario: [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; jueves 14 de julio de 2011
  • 44. Application Sandbox Se trata de un mecanismo de defensa para la aplicación y el sistema. Se crea un directorio único y opaco para almacenar la aplicación. Simpli ca instalaciones, backups, restauraciones y borrado. La aplicación sólo puede acceder a los contenidos de su sandbox. El sistema de archivos es case sensitive. No hay límites en el tamaño de la aplicación y de los documentos de la misma, hay sentido común. jueves 14 de julio de 2011
  • 45. Application Sandbox Backups incrementales de las carpetas en negrita: <Application Home>/AppName.app <Application Home>/Documents <Application Home>/Library <Application Home>/Library/Preferences <Application Home>/Library/Caches <Application Home>/tmp/ jueves 14 de julio de 2011
  • 46. Patrones de Diseño iOS utiliza los siguientes patrones de diseño: • Model-View-Controller • Block Objects • Delegation • Target-Action • Managed Memory Model • Threads y Programación Concurrente • Singleton jueves 14 de julio de 2011
  • 47. Interface IBOutlets & IBActions jueves 14 de julio de 2011
  • 48. Window Based Template File’s Owner First Responder Window UIApplicationDelegate jueves 14 de julio de 2011
  • 49. Window Las aplicaciones tienen sólo una ventana. La ventana proporciona un área donde dibujar el resto de elementos de la aplicación. La ventana es una subclase de vista aunque carece de controlador de vista. (Implicaciones más adelante) jueves 14 de julio de 2011
  • 50. IBOutlets & IBActions Los IBOutlets marcan una variable en XCode para que sea seleccionable en Interface Builder. Las IBActions marcan un método en XCode para que sea accesible por los elementos capaces de hacer llamadas a funciones en Interface Builder. A efectos de código son inocuos. Al contrario que en Cocoa, en Cocoa Touch se permite la asociación de varias acciones a un mismo evento. *Problema de compatibilidad entre Mac OS X e iOS jueves 14 de julio de 2011
  • 51. View Based Template UIApplicationDelegate Window ViewController View jueves 14 de julio de 2011
  • 52. UIKit Elementos básicos jueves 14 de julio de 2011
  • 53. UIKit Se trata del Framework que nos proporciona la base para el diseño de las aplicaciones iOS. Se deben utilizar desde el main thread. Existe un proyecto de ejemplo en el que se exponen los elementos y sus estilos (UICatalog). Principalmente trabajaremos sobre los elementos y las acciones que provocan o requieren. jueves 14 de julio de 2011
  • 54. UIKit Los distintos controles pueden ser: • Elementos Activos (Active): UIButton, UISwitch ... • Elementos Inactivos (Static): UITextField ... • Elementos Pasivos (Pasive): UIImage, UILabel ... (Casi) Todos son subclases de UIControl y pueden actuar de cualquier de las tres maneras. jueves 14 de julio de 2011
  • 55. First Responder Un “responder” es un objeto que puede responder a eventos y manipularlos. El “ rst responder” se re ere en cada momento al elemento que tiene el foco. El objeto debe responder al método canBecomeFirstResponder. Desde ese momento es capaz de situarse como elemento que recibe los eventos de movimiento, control remoto, acciones y menús de edición. jueves 14 de julio de 2011
  • 56. First Responder En ocasiones, tendremos que forzar que una instancia abandone el papel de First Responder con resignFirstReponder. Podemos pasar el mensaje al siguiente elemento de la cadena ([self nextResponder]) de manera manual. Cabe destacar que el nextResponder de un UIView es su View Controller. jueves 14 de julio de 2011
  • 57. Puliendo detalles... iPhone 4 incluye una pantalla Retina Display. El tamaño en pixeles de la pantalla pasa de 320x480 a 640x960. El escalado de los elementos es automático. Podemos incluir imágenes de alta resolución. Si incluimos el archivo imagen.png y el sistema detecta alta resolución, reemplazará la imagen automáticamente por imagen@2x.png si existe. jueves 14 de julio de 2011
  • 58. View Controllers jueves 14 de julio de 2011
  • 59. View Controller Nos permiten generar bloques MVC. Podemos reutilizar elementos: • En otras aplicaciones • En la misma aplicación Es conveniente de nir las interacciones entre view controllers mediante protocolos. jueves 14 de julio de 2011
  • 60. Rotación View Controllers jueves 14 de julio de 2011
  • 61. Rotación Cuando rotamos el dispositivo, el sistema puede encargarse de rotar los componentes de nuestra aplicación. Tenemos tres opciones para gestionar este cambio: • Autorotating & Autosizing • Realizar los cambios programáticamente • Realizar los cambios mediante un archivo NIB jueves 14 de julio de 2011
  • 62. Root Controller jueves 14 de julio de 2011
  • 63. Root Controller Las aplicaciones con múltiples vistas necesitarán un controlador de vistas que será hijo de UIViewController Ese controlador tendrá información sobre sus posibles vistas y funciones para intercambiar el valor a asignar a view por cualquiera de ellas Identi camos si un elemento está o no cargado porque si no está cargado, el valor de myObject.view.superview será nil. jueves 14 de julio de 2011
  • 64. Tab Bar jueves 14 de julio de 2011
  • 65. Tab Bar Necesitamos un UITabBarController [window addSubview:myTabController.view]; Podemos gestionarlo directamente desde Interface Builder o a mano pero combinar las dos aproximaciones es bastante complicado myTabController.viewControllers es un Array de UIViewControllers jueves 14 de julio de 2011
  • 66. Tab Bar Podemos personalizar la imagen que utiliza con contactsNavController.tabBarItem.image = [UIImage imageNamed:@"contacts.png"]; Podemos personalizar también el título y el Badge del TabBarItem de cada ViewController. Tiene un límite de componentes y tras excederlo se encarga de gestionar el exceso, la reorganización... jueves 14 de julio de 2011
  • 68. NavigationController Gestiona la navegación entre controladores de vista en forma de pila. Gestionamos un método de tipo push que inserta el siguiente elemento en la pila. Podemos gestionar un método de tipo pop para volver hacia atrás en la jerarquía, pero esta acción se suele dejar al backBarButton. El backBarButton es personalizable pero hay que entender CUANDO aparece. jueves 14 de julio de 2011
  • 69. Comunicación con el Usuario AlertView , ActionSheets y Vistas Modales jueves 14 de julio de 2011
  • 70. AlertView Permite avisar al usuario. Puede gestionar la respuesta del usuario mediante botones. Los pasos para utilizarlo son: • Tener un delegado (si hay que realizar acciones) • Generar un UIAlertView • Mostrar un UIAlertView en la ventana jueves 14 de julio de 2011
  • 71. ActionSheet Permite consultar al usuario. Puede gestionar la respuesta del usuario mediante botones. Los pasos para utilizarlo son: • Tener un delegado • Generar un UIActionSheet • Mostrar un UIActionSheet en una vista concreta y que sea visible en este momento. jueves 14 de julio de 2011
  • 72. Vistas Modales Un UIViewController puede lanzar una vista de forma modal. Utilizamos el método: presentModalViewController:inView: El UIViewController que lanzamos, devolverá el control al anterior con el método dismissModalViewController jueves 14 de julio de 2011
  • 73. Persistencia de Datos jueves 14 de julio de 2011
  • 74. Estrategias de persistencia Podemos utilizar distintas estrategias de persistencia: - Uso de un archivo - Uso de múltiples archivos - Uso de bases de datos • SQLite 3 • Core Data - Uso de las preferencias de usuario jueves 14 de julio de 2011
  • 75. Documents & tmp Directorios en los que podemos escribir jueves 14 de julio de 2011
  • 76. Document Directory Dentro del sandbox, es el directorio en el que podemos guardar elementos de forma que sean persistente (y se haga backup de los mismos). Obtenemos la ruta de este directorio mediante el siguiente código: ! NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); ! NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@”myFile.ext”]; jueves 14 de julio de 2011
  • 77. tmp Directory Directorio que también podemos utilizar para almacenar datos. No podemos garantizar su existencia ni su persistencia. Obtenemos la ruta de este directorio mediante el siguiente código: ! NSString *tempPath = NSTemporaryDirectory(); ! NSString *tempFile = [tempPath stringByAppendingPathComponent:@"tempFile.ext"]; jueves 14 de julio de 2011
  • 78. Application Setup & User Defaults jueves 14 de julio de 2011
  • 79. Settings Bundle Las preferencias de usuario se acceden desde el menú de ajustes. Permiten con gurar aquellos aspectos que se deben establecer una vez y rara vez son modi cados. (Por ejemplo, nombre de la cuenta de usuario...) No todas las aplicaciones lo necesitan. jueves 14 de julio de 2011
  • 80. Settings Bundle Hemos de crear un settings bundle. Se trata de un Property List con un formato concreto que almacena diversos tipos de valores. Se copia en una localización especial y es accesible por el sistema desde los ajustes. Se accede a los datos mediante un sistema key- value ! NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; ! [defaults objectForKey:myKey]; ! [defaults setObject:myObject forKey:myKey]; jueves 14 de julio de 2011
  • 81. Data from the Web jueves 14 de julio de 2011
  • 82. Network Basics Descargar archivos desde internet basados en esquemas de URL Guardar los archivos en la ruta de documentos de la aplicación Recuperar los archivos de la ruta de documentos de la aplicación. jueves 14 de julio de 2011
  • 83. UIWebView jueves 14 de julio de 2011
  • 84. UIWebView Partimos de un UIWebView Cargamos contenido HTML (reemplaza al RTF) La clave es la etiqueta META siguiente: <meta name="viewport" content="width=320, user-scalable=yes"> Podemos cargar datos HTML desde una cadena: NSString *html = @"<html><head></head><body><h1>Hello Web! </h1></body></html>"; [web loadHTMLString:html baseURL:nil]; jueves 14 de julio de 2011
  • 85. UIWebView Podemos cargar contenidos desde una URL de la siguiente manera: NSString *urlAddress = @"http://www.google.com"; //Create a URL object. NSURL *url = [NSURL URLWithString:urlAddress];! //URL Requset Object NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; //Load the request in the UIWebView. [web loadRequest:requestObj]; jueves 14 de julio de 2011
  • 86. Handling Touch Events Taps, Touches & Gestures jueves 14 de julio de 2011
  • 87. Pantallas Capacitivas Pantallas capacitivas vs. pantallas resistivas. Detección de variaciones en el campo capacitivo. Discriminación de ruido. Imposibilidad de utilizar stylus < 5mm diámetro. Gestión software de los eventos. jueves 14 de julio de 2011
  • 88. Recepción de Eventos Precisamos elementos que: • Hereden de UIResponder • Sean capaces de establecerse como FirstResponder Podemos trasladar el evento al siguiente elemento de la cadena de respuesta. Las vistas pasan el evento a sus controladores. jueves 14 de julio de 2011
  • 89. Eventos Táctiles Poner un dedo en la pantalla: Touch Quitar y poner el dedo de la pantalla: Tap Combinación de touches/taps: Gestures Arrastrar un dedo: • En una dirección: Swipe o Flick (rápido) • En una ruta: Drag jueves 14 de julio de 2011
  • 90. Eventos Táctiles Mover dos dedos en direcciones opuestas • Separar/acercar dos dedos: Pinch open/close • Rotar: Rotate Mover dos dedos en paralelo: Pan Sacudir el dispositivo: Shake jueves 14 de julio de 2011
  • 91. Eventos Táctiles Las funciones que podemos controlar son: touchesBegan:withEvent: touchesMoved:withEvent: touchesEnded:withEvent: touchesCancelled:withEvent: iPhone e iPod soportan 5 touches en la pantalla. iPad soporta 10 touches en la pantalla. jueves 14 de julio de 2011
  • 92. Gestores Podemos gestionar los gestos mediante controladores. Todos son subclases de UIGestureRecognizer UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UISwipeGestureRecognizer UIPanGestureRecognizer UILongPressGestureRecognize Hemos de inicializarlos, con gurarlos y asociarlos a una vista. jueves 14 de julio de 2011