Programación para iPhone  Campus de Verano EPSG Miguel Rebollo (@mrebollo)
¿por qué es interesante                   desarrollar aplicaciones                   móviles?                             ...
85.000 desarrolladores
el 80% gratuitas(fuente: Gartner)
si alguien quieredescargarse todas lasaplicaciones para iPhonenecesitaría7 Tb$891.982
275 días núm. 112 mill vendidas ($0,99)30 mill gratuitas$1.000.000/mes publicidad
10 apps a vigilar1. Servicios basados en la localización2. Redes sociales3. Búsquedas móviles4. Comercio móvil5. Pago móvi...
pero no todo está    decidido
¿Apps nativas omultiplataforma?
0                            5000                                   10000                                           15000 ...
108.624.000
0                               100                                     200                                           300 ...
Precios1000800600400200  0       0   11,99 23,99 35,99 47,99 99,99 219,99
Coste de una app    ($1,49)            1%      15%                       Desarrollador14%                    Apple        ...
iPhone      iPhone 3G   iPhone 3GS       iPhone 4                                         AMRprocesador       ARM 620 MHz ...
1 Mhz de velocidad1 KB de memoria RAM12 KB de memoria ROM1 programa en ejecución
Objective-C
Ppio. diseño recursivo1. Todo son objetos2. Los objetos se hacen peticiones de uno a otro   mediante paso de mensajes.3. C...
VentajasDesarrollo rápidoMejora calidad y legibilidad del códigoMejora la mantenibilidadNiveles de abstracciónReusabilidad...
¿qué es una clase?Patrón que define atributos y métodoscomunes a los objetos de un tipoClase: teléfono móvilatributos: marc...
EncapsulamientoComportamiento de “caja negra”Los “usuarios” de la clase ignoran susdetalles de implementaciónInterfaz de u...
HerenciaEstructura jerárquica de las clasesUna clase hereda la estructura de suclase padreLas clases pueden ampliar o refin...
vehículo      con motor              sin motor coche      moto         bici       velero  cocheeléctrico
MensajesLos objetos se comunican mediantemensajesLos mensajes invocan los métodos deuna claseEn el mensaje se indica:objet...
Clases en Objective-Cformada por @interface (.h) e @implementation (.m)en la interface se define la estructura de la clase ...
Declaración@interface NombreClase : NombreSuperclase<NombreProtocolo1,...> {  // Zona de declaración de variables de insta...
Tipos de variablesPueden ser de 3 tipos@private: sólo visible para la clase (no se hereda)@protected: sólo visible para la...
Tipos de datosBásicos       Clasesvoid          NSString/NSMutableStringchar          NSArray/NSMutableArrayint           ...
MétodosDe clase…+(tipo)NombreMétodo:(tipo)argumentoDe instancia…-(tipo)NombreMétodo:(tipo)argumentoArgumentos adicionales ...
Implementación#import “NombreDeLaClase.h”@implementation NombreDeLaClase// No es preciso repetir superclase y protocolos-(...
Mensajería[<variable|clase> <nombre_método>];[<variable|clase> <método>:<valor param>];[<variable|clase> <método>:<valor1>...
Bifurcaciones (I)if (<condición>){   <código si cierto>;}else{    <código si falso>;}if( [username compare:@”Pedro”] ){   ...
Bifurcaciones (II)switch (<expr_numérica>){   switch (num%2){  case <valor>:               case 0:     <código>;          ...
Bucles (I)Con guarda inicial (puede no ejecutarse nunca)while (<condición>){    …;}
Bucles (II)Con guarda al final (se ejecuta al menos una vez)do{ ...;}while (<condición>);
Bucles (III)for( <inicialización>; <paso>; <condición>){   …;}Ejemplo:int i;for( i = 0; i < 50; i++ ){ <código>; }Es un bu...
Gestión de memoriaPara liberar la memoria de un objeto:[<variable> release];Cuando son atributos de una instancia, debe ha...
Archivo: ListaDeAlimentos.h#import <Foundation/Foundation.h>@interface ListaDeAlimentos : NSObject {  NSMutableDictionary ...
Fíjate…• la clase tiene un único atributo (una lista  dinámica)• se define como un puntero• se ha definido una propiedad par...
Archivo: ListaDeAlimentos.m#import "ListaDeAlimentos.h"@implementation ListaDeAlimentos@synthesize lista;-(id)init {    [s...
Fíjate…• “synthesize” como pareja de la propiedad• en “init” se reserva la memoria de la lista• “registrar” añade un nuevo...
Archivo: Calorimetro.m#import <Foundation/Foundation.h>#import "ListaDeAlimentos.h"int main (int argc, const char * argv[]...
Fíjate…• #import para utilizar la clase ListaDeAlimentos• definición de ListaAlmacenada como iterador• uso de @”” para defin...
Objective-CMiguel Rebollo (@mrebollo)
ExcepcionesUna excepción es una circunstancia queinterrumpe el flujo normal del programaClases para manejarlas:NSExceptionN...
Control de ejecución@try encierra el bloque que puede lanzaruna excepción@catch contiene la lógica para tratar laexcepción...
DefiniciónNSException *exception =  [NSException    exceptionWithName: @"HotTeaException"    reason: @"The tea is too hot" ...
Ejemplo excepciónCup *cup = [[Cup alloc] init];@try {   [cup fill];}@catch (NSException *exception) {   NSLog(@"main: Caugh...
Test unitariosCasos de test: comprueban elfuncionamiento del código (ej., clase)Conjuntos de tests: conjunto de casos dete...
Test-driven devel.El desarrollo por tests es un estilo deprogramación• Primero se escriben los tests• Después de escribe e...
Tests lógicosComprueban que el código funcionacorrectamente fuera de la aplicación.Se emplea para comprobar métodos,clases...
Configurar test lóg1.añadir un unit-test bundle como  Target al proyecto2.marca el target como activo3.crea un grupo Test p...
Tests de aplicaciónComprueban que el código funcionacorrectamente fuera de la aplicación.Se emplea para comprobar métodos,...
Configurar test app1. duplica el target de la aplicación y añade “Testing”   como sufijo2. añadir un unit-test bundle como t...
Escribir testsComprobación mediante assertsSTFail provoca fallo incondicionalSTAssertEqualObjects falla si obj distintosST...
Ejemplo- (void) testEntryAmount {   // entry se crea en un método setUp   [entry setAmountInPennies:123];   STAssertEquals...
LecturasDel centro de desarrollo de Apple...Object-Oriented Programming withObjective-CThe Objective-C Programming Languag...
Cocoa Touch
Capas de iOS      Cocoa Touch         Media      Core services        Core OS
Capas de iOS               Proporciona la funcionalidadCocoa Touch    principal               UIKit: control de la interfa...
Capas de iOS               Funcionalidades multimediaCocoa Touch               Audio ToolBox: reproducción y              ...
Capas de iOS                Servicios del OS a bajo nivelCocoa Touch                Foundation: envoltorio a Objective-C  ...
Capas de iOS                Servicios de bajo nivel (casi hw)Cocoa Touch                CFNetwork: sockets BSD    Media   ...
Ciclo de vida         UIKit                Nuestro programa  El usuario pulsa el icono            main()   UIApplicationMa...
Clases del núcleoNSObjectEs la clase base de la que dependentodas las demás. Proporciona losmétodos de alloc, init y dealloc
Clases del núcleoUIApplicationTodas las aplicaciones de iPhone son deeste tipo. Gestiona su ciclo de vida, suconfiguración ...
Clases del núcleoUIWindowEs el contenedor que almacenará lasvistas de la aplicación. Una aplicacióntendrá una única ventan...
Clases del núcleoUIViewDefine un área rectangular en lapantalla del iPhone que gestiona todo loque aparece en ella y sucomp...
Clases del núcleoUIResponderLos respondedores son los objetos quepueden responder a eventos. El controlactivo que va a rec...
Clases del núcleoUIControlEs la superclase de la que heredan sucomportamiento todos los controles denuestas aplicaciones. ...
Clases del núcleoUIViewControllerGestionan el contenido de las vistas. Lasusaremos para asignar elcomportamiento asociado ...
Clases de interfazUILabelEtiquetas que muestran texto estáticoUITextField/UITextViewCampos de texto para recibir entradasd...
Clases de interfazUIButtonBotones para hacer click en ellosUISwitchInterruptores de dos posiciones: ON/OFFUISegmentedContr...
ModeloVista-Controlador                     ControladorAcción de usuario                     Actualizar Vista             ...
ControladoresIBOutletControlador de salidaLee el estado de los controles definidosen la vista (uno por cada control)Es una ...
ControladoresPropiedades con @property y @synthesizeUsados para facilitar el acceso a IBOutletAcceso directo a las variabl...
ControladoresEjemplo:@interface NombreClase:UIViewControler{  IBOutlet UILabel *miEtiqueta;}@property (retain, nonatomic) ...
ControladoresIBActionDefine el método al que se debe llamarcomo resultado de un eventoEs un método de la claseEjemplo:-(IBA...
Hola mundo personalizadodefinir outlet y accionessobreescribir dealloccrear interfazenlazar con controles(2 etiquetas + 1 b...
Cuentacuentosdefinir outlet y accionessobreescribir dealloccrear interfazenlazar con controlespersonalización controles det...
Catálogo de florescrear interfaz (outlet/acciones, propiedades,enlazarlo, dealloc)uso de segment y switch.Conexión a Value ...
Sistema solaraplicación de navegadoruso de UITableView: definirsecciones, rellenar celdasinclusión de vista dedetalles (out...
LecturasDel centro de desarrollo de Apple...Cocoa Application TutorialiOS Development GuideiPhone Application Programming ...
LecturasOtros libros…iPhone & iPad Apps for AbosoluteBeginners (Ed. APRESS)Desrrollo de aplicaciones para iPhone(Ed. Anaya...
Curso programación iPhone
Upcoming SlideShare
Loading in …5
×

Curso programación iPhone

8,817 views

Published on

Curso de programación de aplicaciones para iPhone. Cursos de veranos de la EPS de Gandía (actualizado julio 2011)

Published in: Technology, Business
2 Comments
4 Likes
Statistics
Notes
  • @programacioniphone hola fernando, la verdad yo estoy comenzando en el mundo de la programacion para ios y tienes razon, encontrar info o tutoriales en español esta dificil. Afortunadamente personas como tu estan dispuestas a ayudarnos con estos textos e informacion.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hola, Soy Fernando Rodríguez, desarrollador y formador de iOS y autor del blog sobre programación para dispositivos de Apple: www.cocoamental.com. Estoy en esos días participando en los EEUU de un curso intensivo de formación avanzada iOS con los máximos gurús del tema en El 'Big Nerd Ranch'.Estoy relatando paso a paso la experiencia de este español con Aaron Hillegass y sus discípulos en mi blog: http://www.cocoaosx.com/category/big-nerd-ranch/

    Por lo visto tener un español por aquí es algo rarísimo. Por eso creo que es una experiencia muy interesante para ser compartidas con otros amantes nacionales de la programación iOS, Objective C, Cocoa, etc.

    Un saludo,

    Fernando
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
8,817
On SlideShare
0
From Embeds
0
Number of Embeds
5,301
Actions
Shares
0
Downloads
143
Comments
2
Likes
4
Embeds 0
No embeds

No notes for slide

Curso programación iPhone

  1. 1. Programación para iPhone Campus de Verano EPSG Miguel Rebollo (@mrebollo)
  2. 2. ¿por qué es interesante desarrollar aplicaciones móviles? 5050403020 15,110 5,2 4,1 0,50 2008 2009 2010 2011 2012 billones de $
  3. 3. 85.000 desarrolladores
  4. 4. el 80% gratuitas(fuente: Gartner)
  5. 5. si alguien quieredescargarse todas lasaplicaciones para iPhonenecesitaría7 Tb$891.982
  6. 6. 275 días núm. 112 mill vendidas ($0,99)30 mill gratuitas$1.000.000/mes publicidad
  7. 7. 10 apps a vigilar1. Servicios basados en la localización2. Redes sociales3. Búsquedas móviles4. Comercio móvil5. Pago móvil6. Servicios context-aware7. Reconocimiento de objetos8. Mensajería instantánea móvil9. eMail móvil10. Vídeo móvil (fuente: Gartner)
  8. 8. pero no todo está decidido
  9. 9. ¿Apps nativas omultiplataforma?
  10. 10. 0 5000 10000 15000 20000miles de ud Q3 2007 Q4 2007 Q1 2008 Q2 2008 Q3 2008 Q4 2008 3G Q1 2009 Q2 2009 Q3 2009 Q4 2009 ventas iPhone 3GS Q1 2010 Q2 2010 Q3 2010 4 Q4 2010 Q1 2011 Q2 2011
  11. 11. 108.624.000
  12. 12. 0 100 200 300 400 500 Unknown 2008-08 2008-10 2008-12 2009-02 2009-04 2009-06 2009-08 2009-10 2009-12 2010-02 2010-04 2010-06 2010-08 2010-10 Apps disponibles 2010-12 2011-02 2011-04miles de apps 2011-06
  13. 13. Precios1000800600400200 0 0 11,99 23,99 35,99 47,99 99,99 219,99
  14. 14. Coste de una app ($1,49) 1% 15% Desarrollador14% Apple Comisión tarjeta Procesamiento 70%
  15. 15. iPhone iPhone 3G iPhone 3GS iPhone 4 AMRprocesador ARM 620 MHz A4 800 MHz 600 MHz RAM 128 MB 256 MB 512 MBcapacidad 4,8,16 GB 8, 16 GB 8, 16, 32 GB 16, 32 GB 960x640resolución 480x320 (retina disp) 5 Mpx cámara 2 Mpx 3 Mpx + frontal (0,3) vídeo no no si, VGA si, HD 720 otros 3G brújula giroscopio
  16. 16. 1 Mhz de velocidad1 KB de memoria RAM12 KB de memoria ROM1 programa en ejecución
  17. 17. Objective-C
  18. 18. Ppio. diseño recursivo1. Todo son objetos2. Los objetos se hacen peticiones de uno a otro mediante paso de mensajes.3. Cada objeto tiene su propia memoria, que consta de otros objetos.4. Cada objeto es una instancia de una clase. Una clase agrupa objetos similares.5. La clase es el repositorio del comportamiento asociado con un objeto.6. Las clases están organizadas en una estructura arbórea que se denomina jerarquía de herencia.
  19. 19. VentajasDesarrollo rápidoMejora calidad y legibilidad del códigoMejora la mantenibilidadNiveles de abstracciónReusabilidad, encapsulamiento
  20. 20. ¿qué es una clase?Patrón que define atributos y métodoscomunes a los objetos de un tipoClase: teléfono móvilatributos: marca, modelo, númerooperaciones: encender, apagar, llamarInstancia: teléfono de Miguelatributos: marca=iPhone, modelo=3G,número=657 432 564
  21. 21. EncapsulamientoComportamiento de “caja negra”Los “usuarios” de la clase ignoran susdetalles de implementaciónInterfaz de uso a través de sus métodos
  22. 22. HerenciaEstructura jerárquica de las clasesUna clase hereda la estructura de suclase padreLas clases pueden ampliar o refinar elcomportamiento heredado
  23. 23. vehículo con motor sin motor coche moto bici velero cocheeléctrico
  24. 24. MensajesLos objetos se comunican mediantemensajesLos mensajes invocan los métodos deuna claseEn el mensaje se indica:objeto, método, parámetros (si hay)
  25. 25. Clases en Objective-Cformada por @interface (.h) e @implementation (.m)en la interface se define la estructura de la clase atributos + métodos de accesoen la implementación se define su comportamiento
  26. 26. Declaración@interface NombreClase : NombreSuperclase<NombreProtocolo1,...> { // Zona de declaración de variables de instancia tipo_1 variableDeInstancia_1; tipo_N variableDeInstancia_N;}// Zona de declaración de métodos+(tipo) metodoDeClase; ...-(tipo) metodoDeInstancia:(tipo)argumento etiqueta:(tipo)otroArgumento;
  27. 27. Tipos de variablesPueden ser de 3 tipos@private: sólo visible para la clase (no se hereda)@protected: sólo visible para la clase y sus subclases@public: visible para todos (no se recomienda)Por defecto, todas son @protected.
  28. 28. Tipos de datosBásicos Clasesvoid NSString/NSMutableStringchar NSArray/NSMutableArrayint NSDictionary/ NSMutableDictionaryfloat/double NSDateBOOL NSURLid NSObject
  29. 29. MétodosDe clase…+(tipo)NombreMétodo:(tipo)argumentoDe instancia…-(tipo)NombreMétodo:(tipo)argumentoArgumentos adicionales etiqueta:(tipo)argumentotres métodos importantes: alloc, init y dealloc
  30. 30. Implementación#import “NombreDeLaClase.h”@implementation NombreDeLaClase// No es preciso repetir superclase y protocolos-(id) init { [super init]; //Aquí se añaden instrucciones de inicialización return self;}-(tipo)nombreDeMetodo { …;}@end
  31. 31. Mensajería[<variable|clase> <nombre_método>];[<variable|clase> <método>:<valor param>];[<variable|clase> <método>:<valor1> <arg2>:<valor2> …];Ejemplo:[userName compare:@”Pedro” options:NSCaseSensitive][[NSURL alloc] initWithString:@”http://www.upv.es”];
  32. 32. Bifurcaciones (I)if (<condición>){ <código si cierto>;}else{ <código si falso>;}if( [username compare:@”Pedro”] ){ usermsg = @”Hola, Pedro”;else usermsg = @”Tú no eres Pedro”;
  33. 33. Bifurcaciones (II)switch (<expr_numérica>){ switch (num%2){ case <valor>: case 0: <código>; msg=@”es par”; break; break; case <valor>: case 1: …; msg=@”es impar”; otherwise: break; …; otherwise:} msg=@”error”; }
  34. 34. Bucles (I)Con guarda inicial (puede no ejecutarse nunca)while (<condición>){ …;}
  35. 35. Bucles (II)Con guarda al final (se ejecuta al menos una vez)do{ ...;}while (<condición>);
  36. 36. Bucles (III)for( <inicialización>; <paso>; <condición>){ …;}Ejemplo:int i;for( i = 0; i < 50; i++ ){ <código>; }Es un bucle que se ejecuta 50 veces
  37. 37. Gestión de memoriaPara liberar la memoria de un objeto:[<variable> release];Cuando son atributos de una instancia, debe hacerseen el método dealloc:-(void)dealloc{ [myLabel release]; [super dealloc]; //liberación de la clase padre}
  38. 38. Archivo: ListaDeAlimentos.h#import <Foundation/Foundation.h>@interface ListaDeAlimentos : NSObject { NSMutableDictionary * lista;}@property(readonly) NSMutableDictionary * lista;-(id)init;-(float)caloriasPorCienGramosDe:(NSString*)alimento;-(void)registrar:(NSString*)alimento caloriasPorCienGramos:(float)valor;-(void)eliminar:(NSString*)alimento;@end
  39. 39. Fíjate…• la clase tiene un único atributo (una lista dinámica)• se define como un puntero• se ha definido una propiedad para acceso directo al atributo• se declara el método init para inicialización• el método “registrar” tiene 2 argumentos
  40. 40. Archivo: ListaDeAlimentos.m#import "ListaDeAlimentos.h"@implementation ListaDeAlimentos@synthesize lista;-(id)init { [super init]; lista = [[NSMutableDictionary alloc] init]; return self;}-(float)caloriasPorCienGramosDe:(NSString*)alimento { NSString * calorias = [lista objectForKey:alimento]; return calorias ? [calorias floatValue] : -1.0;}-(void)registrar:(NSString*)alimento caloriasPorCienGramos:(float)valor{ NSString * copia = [alimento copy]; [lista setObject:[NSNumber numberWithFloat:valor] forKey:copia];}-(void)eliminar:(NSString*)alimento { if (alimento) [lista removeObjectForKey:alimento]; else NSBeep();}@end
  41. 41. Fíjate…• “synthesize” como pareja de la propiedad• en “init” se reserva la memoria de la lista• “registrar” añade un nuevo alimento• “eliminar” eliminar un alimento existente• “caloriasPorCienGramosDe” consulta la información nutricional de un alimento• observa los métodos para manipular el diccionario• ¡OJO! no hay dealloc: hay que vaciar la lista antes de terminar el programa
  42. 42. Archivo: Calorimetro.m#import <Foundation/Foundation.h>#import "ListaDeAlimentos.h"int main (int argc, const char * argv[]) { ListaDeAlimentos * p = [[ListaDeAlimentos alloc] init]; NSMutableDictionary * listaAlmacenada = p.lista; //Se añaden 2 alimentos [p registrar:@"Fresas" caloriasPorCienGramos:35.0]; [p registrar:@"Moras" caloriasPorCienGramos:59.0]; //Se muestra la información nutricional almacenada for(id alimento in listaAlmacenada) { printf("Alimento: %-10s ---> Calorías: %5.1fn", [alimento UTF8String], [[listaAlmacenada objectForKey:alimento] floatValue]); [p eliminar:alimento]; } return 0;}
  43. 43. Fíjate…• #import para utilizar la clase ListaDeAlimentos• definición de ListaAlmacenada como iterador• uso de @”” para definir cadenas constantes (en lugar de NSString)• bucle for optimizado para iterar en colecciones• printf para escribir en pantalla (otra alternativa: NSLog)• ¡OJO! no hay dealloc: hay que vaciar la lista antes de terminar el programa
  44. 44. Objective-CMiguel Rebollo (@mrebollo)
  45. 45. ExcepcionesUna excepción es una circunstancia queinterrumpe el flujo normal del programaClases para manejarlas:NSExceptionNSErrorClase definida por el usuario
  46. 46. Control de ejecución@try encierra el bloque que puede lanzaruna excepción@catch contiene la lógica para tratar laexcepción que se produce en @try@finally se ejecuta siempre@throw lanza una exepción
  47. 47. DefiniciónNSException *exception = [NSException exceptionWithName: @"HotTeaException" reason: @"The tea is too hot" userInfo: nil];@throw exception;
  48. 48. Ejemplo excepciónCup *cup = [[Cup alloc] init];@try { [cup fill];}@catch (NSException *exception) { NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);} @finally { [cup release];}
  49. 49. Test unitariosCasos de test: comprueban elfuncionamiento del código (ej., clase)Conjuntos de tests: conjunto de casos detest que comprueban una aplicaciónCada vez que se hace un cambio, debenlanzarse todos los tests para comprobarque todo sigue funcionando
  50. 50. Test-driven devel.El desarrollo por tests es un estilo deprogramación• Primero se escriben los tests• Después de escribe el código para pasar los tests.Pero no es necesario usarlo para poderemplear los tests unitarios
  51. 51. Tests lógicosComprueban que el código funcionacorrectamente fuera de la aplicación.Se emplea para comprobar métodos,clases completas o conjuntos de clases.
  52. 52. Configurar test lóg1.añadir un unit-test bundle como Target al proyecto2.marca el target como activo3.crea un grupo Test para los archivos4.crea una clase para el test del tipo “Objective-C test case class” -> caso de test
  53. 53. Tests de aplicaciónComprueban que el código funcionacorrectamente fuera de la aplicación.Se emplea para comprobar métodos,clases completas o conjuntos de clases.
  54. 54. Configurar test app1. duplica el target de la aplicación y añade “Testing” como sufijo2. añadir un unit-test bundle como target al proyecto; llámalo <app>Tests3. arrastra el bundle sobre la aplicación4. enlaza ambos bundles: arrastra el producto <app>Tests.octest sobre el mismo bundle dentro de Copy Bundle resources del de la app5. crea una clase para el test del tipo “Objective-C test case class” -> conjunto de tests
  55. 55. Escribir testsComprobación mediante assertsSTFail provoca fallo incondicionalSTAssertEqualObjects falla si obj distintosSTAssertEquals falla si valores distintosSTAssertNil/STAssertNotNil falla si no nulo/nuloSTAssertTrue/STAssertFalse falla si falso/ciertoSTAssertThrows falla si no se lanza una excepción
  56. 56. Ejemplo- (void) testEntryAmount { // entry se crea en un método setUp [entry setAmountInPennies:123]; STAssertEquals(123L, [entry amountInPennies], @"bad amount; 123 != %ld", [entry amountInPennies]); STAssertEquals((float)1.23, [entry amount], @"bad amount; 1.23 != %f", [entry amount]);} ver más en iOS Development Guide
  57. 57. LecturasDel centro de desarrollo de Apple...Object-Oriented Programming withObjective-CThe Objective-C Programming LanguageOtros libros…S.G. Kochan: Programming in Objective-C 2.0.- Addison-Wesley, 3ª Ed. (2011)
  58. 58. Cocoa Touch
  59. 59. Capas de iOS Cocoa Touch Media Core services Core OS
  60. 60. Capas de iOS Proporciona la funcionalidadCocoa Touch principal UIKit: control de la interfaz Media Map Kit: vistas de Google MapsCore services Message Kit: envío de emails AddressBook Kit: acceso a la agenda Core OS
  61. 61. Capas de iOS Funcionalidades multimediaCocoa Touch Audio ToolBox: reproducción y grabación de sonido Media OpenGL ES: Animación 2D y 3DCore services Media player: reproductor de medios Core Graphics: Dibujo en 2D Core OS Quartz Core: Animaciones
  62. 62. Capas de iOS Servicios del OS a bajo nivelCocoa Touch Foundation: envoltorio a Objective-C Media Core Foundation: Fundation sobre C Core Location: servicio deCore services geoposicionamiento Core Data: modelo de datos SQLite Core OS Store Kit: compras dentro de las apps System Configuration: conf. red
  63. 63. Capas de iOS Servicios de bajo nivel (casi hw)Cocoa Touch CFNetwork: sockets BSD Media External Accesory: interfaces a accesorios conectados por bluetoothCore services Security: criptografía y acceso a llavero Core OS System: herramientas típicas de un framework de Unix
  64. 64. Ciclo de vida UIKit Nuestro programa El usuario pulsa el icono main() UIApplicationMain() applicationDidFinishLaunching bucle eventos Tratamiento de los eventos Stma. solicita finalizar applicationWillTerminate Aplicación finaliza
  65. 65. Clases del núcleoNSObjectEs la clase base de la que dependentodas las demás. Proporciona losmétodos de alloc, init y dealloc
  66. 66. Clases del núcleoUIApplicationTodas las aplicaciones de iPhone son deeste tipo. Gestiona su ciclo de vida, suconfiguración y también las insignias(ej. e-mails recibidos)
  67. 67. Clases del núcleoUIWindowEs el contenedor que almacenará lasvistas de la aplicación. Una aplicacióntendrá una única ventana que se creaautomáticamente en los proyectos queusaremos
  68. 68. Clases del núcleoUIViewDefine un área rectangular en lapantalla del iPhone que gestiona todo loque aparece en ella y sucomportamiento. Los controles heredande las vistas (las consideraremossubvistas).
  69. 69. Clases del núcleoUIResponderLos respondedores son los objetos quepueden responder a eventos. El controlactivo que va a recibir el evento es elprimer respondedor
  70. 70. Clases del núcleoUIControlEs la superclase de la que heredan sucomportamiento todos los controles denuestas aplicaciones. Es la responsablede ejecutar el comportamiento asociadoa cada control (veremos como se enlazaa través de Interface Builder)
  71. 71. Clases del núcleoUIViewControllerGestionan el contenido de las vistas. Lasusaremos para asignar elcomportamiento asociado a un control(recuerda que un control es tambiénuna vista)
  72. 72. Clases de interfazUILabelEtiquetas que muestran texto estáticoUITextField/UITextViewCampos de texto para recibir entradasdel usuario (activan el teclado)UIWebViewContiene una página web (identifica loslinks) o documentos (PDF y otros)
  73. 73. Clases de interfazUIButtonBotones para hacer click en ellosUISwitchInterruptores de dos posiciones: ON/OFFUISegmentedControlBarra táctil alargada con variasopciones
  74. 74. ModeloVista-Controlador ControladorAcción de usuario Actualizar Vista Modelo Actualizar Datos
  75. 75. ControladoresIBOutletControlador de salidaLee el estado de los controles definidosen la vista (uno por cada control)Es una variable de instanciaEjemplo:IBOutlet UILabel *miEtiqueta;
  76. 76. ControladoresPropiedades con @property y @synthesizeUsados para facilitar el acceso a IBOutletAcceso directo a las variables (inst.outlet) enlugar de emplear mensajes@property se emplea en @interface@synthesize se emplea en @implementation
  77. 77. ControladoresEjemplo:@interface NombreClase:UIViewControler{ IBOutlet UILabel *miEtiqueta;}@property (retain, nonatomic) UILabel* miEtiqueta;[…]@end@implementation NombreClase@synthesize miEtiqueta;[…]@end
  78. 78. ControladoresIBActionDefine el método al que se debe llamarcomo resultado de un eventoEs un método de la claseEjemplo:-(IBAction)doCalculation:(id)sender;
  79. 79. Hola mundo personalizadodefinir outlet y accionessobreescribir dealloccrear interfazenlazar con controles(2 etiquetas + 1 botón)etiquetas: arrastra FileOwner sobre etiquetabotón: arrastra “Touch UpInside” sobre File Ownercódigo para la acción
  80. 80. Cuentacuentosdefinir outlet y accionessobreescribir dealloccrear interfazenlazar con controlespersonalización controles detextoFirst responder y ocultacióndel teclado (asociado a Did Endon Exit)Reemplazar texto
  81. 81. Catálogo de florescrear interfaz (outlet/acciones, propiedades,enlazarlo, dealloc)uso de segment y switch.Conexión a Value Changedacceso a web con NSURL,NSURLRegister yrequestWithURLocultar vistascarga rápida viewDidLoad
  82. 82. Sistema solaraplicación de navegadoruso de UITableView: definirsecciones, rellenar celdasinclusión de vista dedetalles (outlet/acciones,propiedades, enlazarlo,dealloc)crear la vista de detallespor código
  83. 83. LecturasDel centro de desarrollo de Apple...Cocoa Application TutorialiOS Development GuideiPhone Application Programming GuideView Programming Guide for iOS
  84. 84. LecturasOtros libros…iPhone & iPad Apps for AbosoluteBeginners (Ed. APRESS)Desrrollo de aplicaciones para iPhone(Ed. Anaya)The iPhone Developers Cookbook (Ed.Addison-Wesley)iOS Programming: The Big Nerd Ranch

×