Curso programación iPhone

85
Programación para iPhone Campus de Verano EPSG Miguel Rebollo (@mrebollo)

description

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

Transcript of Curso programación iPhone

  • 1. Programacin para iPhoneCampus de Verano EPSG Miguel Rebollo (@mrebollo)

2. por qu es interesante desarrollar aplicaciones mviles?505040302015,1105,2 4,10,50 2008 2009 2010 2011 2012 billones de $ 3. 85.000 desarrolladores 4. el 80% gratuitas(fuente: Gartner) 5. si alguien quieredescargarse todas lasaplicaciones para iPhonenecesitara7 Tb$891.982 6. 275 das nm. 112 mill vendidas ($0,99)30 mill gratuitas$1.000.000/mes publicidad 7. 10 apps a vigilar1. Servicios basados en la localizacin2. Redes sociales3. Bsquedas mviles4. Comercio mvil5. Pago mvil6. Servicios context-aware7. Reconocimiento de objetos8. Mensajera instantnea mvil9. eMail mvil10. Vdeo mvil(fuente: Gartner) 8. pero no todo estdecidido 9. Apps nativas omultiplataforma? 10. 05000 10000 15000 20000miles de udQ3 2007Q4 2007Q1 2008Q2 2008Q3 2008Q4 2008 3GQ1 2009Q2 2009Q3 2009Q4 2009 ventas iPhone 3GSQ1 2010Q2 2010Q3 2010 4Q4 2010Q1 2011Q2 2011 11. 108.624.000 12. 0 100 200 300 400 500Unknown2008-082008-102008-122009-022009-042009-062009-082009-102009-122010-022010-042010-062010-08 2010-10 Apps disponibles2010-122011-022011-04miles de apps2011-06 13. Precios10008006004002000 0 11,99 23,99 35,99 47,99 99,99 219,99 14. Coste de una app($1,49)1%15% Desarrollador14%Apple Comisin tarjeta Procesamiento 70% 15. iPhoneiPhone 3G iPhone 3GS iPhone 4 AMRprocesador ARM 620 MHz A4 800 MHz 600 MHzRAM128 MB 256 MB512 MBcapacidad4,8,16 GB 8, 16 GB 8, 16, 32 GB 16, 32 GB 960x640resolucin 480x320 (retina disp) 5 Mpx cmara2 Mpx3 Mpx + frontal (0,3)vdeo no no si, VGA si, HD 720otros3G brjulagiroscopio 16. 1 Mhz de velocidad1 KB de memoria RAM12 KB de memoria ROM1 programa en ejecucin 17. Objective-C 18. Ppio. diseo 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 estn organizadas en una estructura arbrea que se denomina jerarqua de herencia. 19. VentajasDesarrollo rpidoMejora calidad y legibilidad del cdigoMejora la mantenibilidadNiveles de abstraccinReusabilidad, encapsulamiento 20. qu es una clase?Patrn que dene atributos y mtodoscomunes a los objetos de un tipoClase: telfono mvilatributos: marca, modelo, nmerooperaciones: encender, apagar, llamarInstancia: telfono de Miguelatributos: marca=iPhone, modelo=3G,nmero=657 432 564 21. EncapsulamientoComportamiento de caja negraLos usuarios de la clase ignoran susdetalles de implementacinInterfaz de uso a travs de sus mtodos 22. HerenciaEstructura jerrquica de las clasesUna clase hereda la estructura de suclase padreLas clases pueden ampliar o renar elcomportamiento heredado 23. vehculocon motorsin motor cochemoto bici velerococheelctrico 24. MensajesLos objetos se comunican mediantemensajesLos mensajes invocan los mtodos deuna claseEn el mensaje se indica:objeto, mtodo, parmetros (si hay) 25. Clases en Objective-Cformada por @interface (.h) e @implementation (.m)en la interface se dene la estructura de la clase atributos + mtodos de accesoen la implementacin se dene su comportamiento 26. Declaracin@interface NombreClase : NombreSuperclase {// Zona de declaracin de variables de instanciatipo_1 variableDeInstancia_1;tipo_N variableDeInstancia_N;}// Zona de declaracin de mtodos+(tipo) metodoDeClase; ...-(tipo) metodoDeInstancia:(tipo)argumento etiqueta:(tipo)otroArgumento; 27. Tipos de variablesPueden ser de 3 tipos@private: slo visible para la clase (no se hereda)@protected: slo visible para la clase y sus subclases@public: visible para todos (no se recomienda)Por defecto, todas son @protected. 28. Tipos de datosBsicos ClasesvoidNSString/NSMutableStringcharNSArray/NSMutableArrayint NSDictionary/NSMutableDictionaryoat/doubleNSDateBOOLNSURLidNSObject 29. MtodosDe clase+(tipo)NombreMtodo:(tipo)argumentoDe instancia-(tipo)NombreMtodo:(tipo)argumentoArgumentos adicionales etiqueta:(tipo)argumentotres mtodos importantes: alloc, init y dealloc 30. Implementacin#import NombreDeLaClase.h@implementation NombreDeLaClase// No es preciso repetir superclase y protocolos-(id) init {[super init];//Aqu se aaden instrucciones de inicializacin return self;}-(tipo)nombreDeMetodo {;}@end 31. Mensajera[];[:];[:: ];Ejemplo:[userName compare:@Pedro options:NSCaseSensitive][[NSURL alloc] initWithString:@http://www.upv.es]; 32. Bifurcaciones (I)if (){ ;}else{;}if( [username compare:@Pedro] ){usermsg = @Hola, Pedro;elseusermsg = @T no eres Pedro; 33. Bifurcaciones (II)switch (){ switch (num%2){case : case 0: ; msg=@es par; break;break;case : case 1:; msg=@es impar;otherwise: break;;otherwise:}msg=@error;} 34. Bucles (I)Con guarda inicial (puede no ejecutarse nunca)while (){;} 35. Bucles (II)Con guarda al nal (se ejecuta al menos una vez)do{ ...;}while (); 36. Bucles (III)for( ; ; ){ ;}Ejemplo:int i;for( i = 0; i < 50; i++ ){ ; }Es un bucle que se ejecuta 50 veces 37. Gestin de memoriaPara liberar la memoria de un objeto:[ release];Cuando son atributos de una instancia, debe hacerseen el mtodo dealloc:-(void)dealloc{ [myLabel release]; [super dealloc]; //liberacin de la clase padre} 38. Archivo: ListaDeAlimentos.h#import @interface ListaDeAlimentos : NSObject {NSMutableDictionary * lista;}@property(readonly) NSMutableDictionary * lista;-(id)init;-(oat)caloriasPorCienGramosDe:(NSString*)alimento;-(void)registrar:(NSString*)alimento caloriasPorCienGramos:(oat)valor;-(void)eliminar:(NSString*)alimento;@end 39. Fjate la clase tiene un nico atributo (una listadinmica) se dene como un puntero se ha denido una propiedad para accesodirecto al atributo se declara el mtodo init para inicializacin el mtodo registrar tiene 2 argumentos 40. Archivo: ListaDeAlimentos.m#import "ListaDeAlimentos.h"@implementation ListaDeAlimentos@synthesize lista;-(id)init {[super init];lista = [[NSMutableDictionary alloc] init];return self;}-(oat)caloriasPorCienGramosDe:(NSString*)alimento {NSString * calorias = [lista objectForKey:alimento];return calorias ? [calorias oatValue] : -1.0;}-(void)registrar:(NSString*)alimento caloriasPorCienGramos:(oat)valor{NSString * copia = [alimento copy]; [lista setObject:[NSNumber numberWithFloat:valor] forKey:copia];}-(void)eliminar:(NSString*)alimento {if (alimento)[lista removeObjectForKey:alimento];elseNSBeep();}@end 41. Fjate synthesize como pareja de la propiedad en init se reserva la memoria de la lista registrar aade un nuevo alimento eliminar eliminar un alimento existente caloriasPorCienGramosDe consulta lainformacin nutricional de un alimento observa los mtodos para manipular eldiccionario OJO! no hay dealloc: hay que vaciar la listaantes de terminar el programa 42. Archivo: Calorimetro.m#import #import "ListaDeAlimentos.h"int main (int argc, const char * argv[]) { ListaDeAlimentos * p = [[ListaDeAlimentos alloc] init]; NSMutableDictionary * listaAlmacenada = p.lista;//Se aaden 2 alimentos[p registrar:@"Fresas" caloriasPorCienGramos:35.0];[p registrar:@"Moras" caloriasPorCienGramos:59.0];//Se muestra la informacin nutricional almacenadafor(id alimento in listaAlmacenada) { printf("Alimento: %-10s ---> Caloras: %5.1fn",[alimento UTF8String],[[listaAlmacenada objectForKey:alimento] oatValue]); [p eliminar:alimento];}return 0;} 43. Fjate #import para utilizar la clase ListaDeAlimentos denicin de ListaAlmacenada como iterador uso de @ para denir 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 antesde terminar el programa 44. Objective-CMiguel Rebollo (@mrebollo) 45. ExcepcionesUna excepcin es una circunstancia queinterrumpe el ujo normal del programaClases para manejarlas:NSExceptionNSErrorClase denida por el usuario 46. Control de ejecucin@try encierra el bloque que puede lanzaruna excepcin@catch contiene la lgica para tratar laexcepcin que se produce en @try@nally se ejecuta siempre@throw lanza una exepcin 47. DenicinNSException *exception =[NSExceptionexceptionWithName: @"HotTeaException"reason: @"The tea is too hot"userInfo: nil];@throw exception; 48. Ejemplo excepcinCup *cup = [[Cup alloc] init];@try { [cup ll];}@catch (NSException *exception) { NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);} @nally { [cup release];} 49. Test unitariosCasos de test: comprueban elfuncionamiento del cdigo (ej., clase)Conjuntos de tests: conjunto de casos detest que comprueban una aplicacinCada vez que se hace un cambio, debenlanzarse todos los tests para comprobarque todo sigue funcionando 50. Test-driven devel.El desarrollo por tests es un estilo deprogramacin Primero se escriben los tests Despus de escribe el cdigo parapasar los tests.Pero no es necesario usarlo para poderemplear los tests unitarios 51. Tests lgicosComprueban que el cdigo funcionacorrectamente fuera de la aplicacin.Se emplea para comprobar mtodos,clases completas o conjuntos de clases. 52. Congurar test lg1.aadir un unit-test bundle comoTarget al proyecto2.marca el target como activo3.crea un grupo Test para los archivos4.crea una clase para el test del tipoObjective-C test case class-> caso de test 53. Tests de aplicacinComprueban que el cdigo funcionacorrectamente fuera de la aplicacin.Se emplea para comprobar mtodos,clases completas o conjuntos de clases. 54. Congurar test app1. duplica el target de la aplicacin y aade Testing como sujo2. aadir un unit-test bundle como target al proyecto; llmalo Tests3. arrastra el bundle sobre la aplicacin4. enlaza ambos bundles: arrastra el producto 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. Escribir testsComprobacin 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 excepcin 56. Ejemplo- (void) testEntryAmount { // entry se crea en un mtodo setUp [entry setAmountInPennies:123]; STAssertEquals(123L, [entry amountInPennies], @"bad amount; 123 != %ld", [entry amountInPennies]); STAssertEquals((oat)1.23, [entry amount], @"bad amount; 1.23 != %f", [entry amount]);}ver ms en iOS Development Guide 57. LecturasDel centro de desarrollo de Apple...Object-Oriented Programming withObjective-CThe Objective-C Programming LanguageOtros librosS.G. Kochan: Programming in Objective-C 2.0.- Addison-Wesley, 3 Ed. (2011) 58. Cocoa Touch 59. Capas de iOSCocoa Touch MediaCore servicesCore OS 60. Capas de iOS Proporciona la funcionalidadCocoa Touchprincipal UIKit: control de la interfaz Media Map Kit: vistas de Google MapsCore services Message Kit: envo de emails AddressBook Kit: acceso a la agendaCore OS 61. Capas de iOS Funcionalidades multimediaCocoa Touch Audio ToolBox: reproduccin y grabacin de sonido Media OpenGL ES: Animacin 2D y 3DCore services Media player: reproductor de medios Core Graphics: Dibujo en 2DCore OS Quartz Core: Animaciones 62. Capas de iOSServicios del OS a bajo nivelCocoa TouchFoundation: envoltorio a Objective-C MediaCore Foundation: Fundation sobre CCore Location: servicio deCore services geoposicionamientoCore Data: modelo de datos SQLite Core OSStore Kit: compras dentro de las appsSystem Conguration: conf. red 63. Capas de iOSServicios de bajo nivel (casi hw)Cocoa TouchCFNetwork: sockets BSDMedia External Accesory: interfaces aaccesorios conectados por bluetoothCore services Security: criptografa y acceso allavero Core OSSystem: herramientas tpicas de unframework de Unix 64. Ciclo de vida UIKitNuestro programaEl usuario pulsa el iconomain() UIApplicationMain()applicationDidFinishLaunching bucleeventos Tratamiento de los eventosStma. solicita nalizar applicationWillTerminate Aplicacin naliza 65. Clases del ncleoNSObjectEs la clase base de la que dependentodas las dems. Proporciona losmtodos de alloc, init y dealloc 66. Clases del ncleoUIApplicationTodas las aplicaciones de iPhone son deeste tipo. Gestiona su ciclo de vida, suconguracin y tambin las insignias(ej. e-mails recibidos) 67. Clases del ncleoUIWindowEs el contenedor que almacenar lasvistas de la aplicacin. Una aplicacintendr una nica ventana que se creaautomticamente en los proyectos queusaremos 68. Clases del ncleoUIViewDene un rea rectangular en lapantalla del iPhone que gestiona todo loque aparece en ella y sucomportamiento. Los controles heredande las vistas (las consideraremossubvistas). 69. Clases del ncleoUIResponderLos respondedores son los objetos quepueden responder a eventos. El controlactivo que va a recibir el evento es elprimer respondedor 70. Clases del ncleoUIControlEs 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 travs de Interface Builder) 71. Clases del ncleoUIViewControllerGestionan el contenido de las vistas. Lasusaremos para asignar elcomportamiento asociado a un control(recuerda que un control es tambinuna vista) 72. Clases de interfazUILabelEtiquetas que muestran texto estticoUITextField/UITextViewCampos de texto para recibir entradasdel usuario (activan el teclado)UIWebViewContiene una pgina web (identica loslinks) o documentos (PDF y otros) 73. Clases de interfazUIButtonBotones para hacer click en ellosUISwitchInterruptores de dos posiciones: ON/OFFUISegmentedControlBarra tctil alargada con variasopciones 74. ModeloVista-Controlador ControladorAccin de usuario Actualizar Vista Modelo Actualizar Datos 75. ControladoresIBOutletControlador de salidaLee el estado de los controles denidosen la vista (uno por cada control)Es una variable de instanciaEjemplo:IBOutlet UILabel *miEtiqueta; 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. ControladoresEjemplo:@interface NombreClase:UIViewControler{IBOutlet UILabel *miEtiqueta;}@property (retain, nonatomic) UILabel* miEtiqueta;[]@end@implementation NombreClase@synthesize miEtiqueta;[]@end 78. ControladoresIBActionDene el mtodo al que se debe llamarcomo resultado de un eventoEs un mtodo de la claseEjemplo:-(IBAction)doCalculation:(id)sender; 79. Hola mundo personalizadodenir outlet y accionessobreescribir dealloccrear interfazenlazar con controles(2 etiquetas + 1 botn)etiquetas: arrastra FileOwner sobre etiquetabotn: arrastra Touch UpInside sobre File Ownercdigo para la accin 80. Cuentacuentosdenir outlet y accionessobreescribir dealloccrear interfazenlazar con controlespersonalizacin controles detextoFirst responder y ocultacindel teclado (asociado a Did Endon Exit)Reemplazar texto 81. Catlogo de orescrear interfaz (outlet/acciones, propiedades,enlazarlo, dealloc)uso de segment y switch.Conexin a Value Changedacceso a web con NSURL,NSURLRegister yrequestWithURLocultar vistascarga rpida viewDidLoad 82. Sistema solaraplicacin de navegadoruso de UITableView: denirsecciones, rellenar celdasinclusin de vista dedetalles (outlet/acciones,propiedades, enlazarlo,dealloc)crear la vista de detallespor cdigo 83. LecturasDel centro de desarrollo de Apple...Cocoa Application TutorialiOS Development GuideiPhone Application Programming GuideView Programming Guide for iOS 84. LecturasOtros librosiPhone & 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