Inicio a la programacion en iOS, Hola Mundo
Es un hecho que los teléfonos móviles son cada vez menos “teléfonos” y no es raro encontrar personas que utilizan más sus terminales para acceder a sus aplicaciones o navegar por internet que para realizar llamadas. De hecho, con la llegada al mercado de las tablets se abandona por completo esa funcionalidad a cambio de unas mejores prestaciones y una pantalla más adecuada para navegar.
Los usuarios se han acostumbrado a manejar aplicaciones desde su teléfono móvil y cada vez más las demandan por sus beneficios como son el poder acceder cuando y donde sea o el poder ejecutarlas desde un “simple” teléfono y no necesitar un equipo de sobremesa o un ordenador portátil (que no todo el mundo tiene).
En la situación actual los dos grandes sistemas operativos para terminales portátiles son Android desarrollado por Google e iOS para los terminales de Apple.
Ya hemos hecho varios tutoriales sobre Android asà que hoy empezamos con los de iOS.
Requisitos para empezar a programar:
- IDE: XCode con el SDK de iOS,Última Version Gratuita* 3.2.6
- S.O: De momento solo es posible desarrollar desde Mac OS X con una versión compatible con XCode, en nuestro caso Mac OS X Snow Leopard version 10.6.6
Es MUY recomendable tener nociones de:
- Programación Orientada a Objetos.
- Patron MVC.
- C (sÃ… punteros).
*(Es necesario estar registrado como un Apple Developer, lo cual también es gratuito si no nos incluimos en ninguno de los programas de pago para desarrolladores).
Un poco de teorÃa.
Lo primero que necesitamos saber para empezar a programar en una nueva plataforma es qué lenguaje de programación debemos usar. En nuestro caso el lenguaje nativo de iOS (y de Mac OS X) es Objective-C. Objetive-C es un lenguaje de programación orientado a objetos que fue creado como un estricto superconjunto de C ¿Y esto que implica? Pues que es posible compilar cualquier programa escrito en C con un compilador de Objective-C, y también, que puede incluirse libremente código escrito en C dentro de una clase de Objective-C. Además, en el caso concreto de iOS existe una API para interactuar con el sistema operativo que se llama Cocoa Touch.
Generando la estructura del Proyecto.
Lo primero que tenemos que hacer es abrir el Xcode para acto seguido crear un nuevo proyecto mediante File -> New Project. Lo que nos mostrará una ventana de este estilo:
Seleccionamos la opción de “Window-based Application” asegurándonos de que estamos creando un proyecto de iOS y que seleccionamos el producto para el que vamos a desarrollar, por ejemplo, iPhone. No es necesario activar el Core Data Storage ya que en este proyecto no vamos a utilizarlo.
Por último le ponemos un nombre a nuestro proyecto y le indicamos la ruta donde queremos que se guarde.
Con esto se nos crearán las clases básicas del proyecto.
Podemos ver una clase main.m que es la primera que se ejecutará. Esta clase generará una instancia de UIApplication e inspeccionará el fichero info.plist en busca del “Main nib file base” para hacer que sea este el que se ejecute al cargar el UIApplication. Por defecto es el MainWindow.xib que se nos crea automáticamente y que ya está asociado al AppDelegate que se crea con el proyecto.
Este AppDelegate es el encargado de “escuchar” los cambios de estado de la aplicación (por ejemplo, como veremos más adelante, escucha cuando la aplicación se ha cargado completamente para poder cargar la interfaz de usuario ).
Ya podemos darle al botón de “Build and Run” para ver como el emulador ejecuta nuestra preciosa aplicación (siempre que te guste el color blanco).
Creando la vista de nuestro Hola Mundo.
La aplicación se ejecuta sin ningún problema, pero no hace nada en absoluto (pues nada hemos programado).
Es el momento de añadir un ViewController para poder controlar los eventos que ocurren en nuestra ventana (ese elemento Window que podréis ver en el MainWindow.xib).
Para ello vamos al menú File -> New File -> Cocoa Touch Class y seleccionamos UIViewController Subclass y seleccionamos la opción with XIB for user interface. Le damos a siguiente y le ponemos un nombre y una ruta.
Si no nos habÃamos fijado todavÃa, vemos que se nos habrán creado 3 ficheros con el mismo nombre pero distinta extensión, uno con extension .h , otro con extension .m y (ya que se lo hemos indicado) un último fichero con extensión .xib. De forma similar a otros lenguajes basados en C, los ficheros .h son los “header” en los que se detallan las caracterÃsticas de la clase, sus métodos públicos, sus atributos, sus herencias… mientras que el .m contiene la implementación de los métodos. Los ficheros .xib son los que se utilizan para crear la interfaz de usuario mediante el interface builder que nos provee Xcode.
El siguiente paso es registrar nuestro ViewController en la clase NombreProyetoAppDelegate, para ello accedemos al fichero .h del AppDelegate y primero declaramos que va a hacer uso de nuestra clase ViewControler escribiendo la siguiente linea justo después de los #import:
@class NombreViewController;
Después, tenemos que declarar un atributo de tipo NombreViewController dentro de AppDelegate, para ello escribimos la siguiente linea tras el cierre de llave y antes de “@end”:
@property (nonatomic, retain) NombreViewController *myViewController;
En este momento ya tenemos nuestro ViewController en el AppDelegate y tendremos una clase similar a esta:
#import <UIKit/UIKit.h>
@class NombreViewController;
@interface NombreProyectoAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) NombreViewController *myViewController;
@end
Con esto ya tenemos nuestro AppDelegate.h, ahora vamos a por el .m.
Lo primero es importar nuestro ViewController con la siguiente linea (escrita junto resto de imports).
#import "NombreViewController.h"
Lo siguiente es añadir los métodos getter y setter mediante el tag @syntetice con la siguiente lÃnea (escrita tras la linea de @implementation):
@synthesize myViewController;
Y por último debemos encontrar el método “application: didFinishLaunchingWithOptions:” que será llamado cuando la aplicación esté preparada para cargar la interfaz de usuario y añadir las siguientes lÃneas antes de [window makeKeyAndVisible]; :
NombreViewController *aViewController = [[NombreViewController alloc] initWithNibName:@"NombreViewController" bundle:[NSBundle mainBundle]]; [self setMyViewController:aViewController]; [aViewController release]; self.window.rootViewController = self.myViewController;
con estas 4 lÃneas hemos:
- Instanciado un objeto de tipo NombreViewController, Lo hemos inicializado con su archivo .xib (ficheros de interfaz builder)
- Hemos establecido que la variable myViewController sea igual a este nuevo NombreViewController
- Dado que hemos hecho un alloc, hemos “liberado el espacio en memoria” (en realidad decrementa el contador de uso… eso para otro post si acaso) de la variable que acabamos de crear.
- Hemos indicado que el ViewController inicial de la ventana será esteViewController que acabamos de crear.
El programa deberÃa ejecutarse sin problemas pero aún no mostrarÃa nada, asà que vamos a editar el fichero .xib para mostrar el siempre clásico “HOLA MUNDO“. Para ello hacemos doble clic sobre el fichero NombreViewController.xib y se nos abrirá el interface builder, buscamos el elemento Label de la “Library” y lo arrastramos hasta la superficie de la View (si no ves la ventana de librerÃa pulsa comand+shift+l desde el interface builder, si no ves el “lienzo” de la view haz doble clic sobre el elemento “View” de la ventana NombreViewController.xib). Para modificar el texto hacemos doble clic sobre la label y escribimos, “HOLA MUNDO”.
Guardamos los cambios en el .xib, ejecutamos y …
Conclusiones.
Hasta ahora hemos visto como generar un nuevo proyecto, como crear un nuevo ViewControler, donde y como añadir un ViewControler a un elemento Window y como añadir y editar un label a un fichero .xib.
Hasta el momento ¿que os ha parecido más complicado Android o iOS?
En próximos post profundizaremos más en las posibilidades que nos ofrece iOS como los distintos elementos del interfaz de usuario, acceso al GPS, conexiones http etc.




