Crear la primera aplicación de iPhone

Ahora vamos a crear una aplicación de vista simple (aplicación en blanco) que se ejecute en el simulador de iOS.

Los pasos son los siguientes:

1. Abre Xcode y elige crear un nuevo proyecto de Xcode.

XcodeWelcomePage

2. Luego selecciona Aplicación de vista única.

CreateProject

3. A continuación, ingresa el nombre del producto (es decir, el nombre de la aplicación), el nombre de la organización y el identificador de la empresa.

NewProjectCreateOptions

4. Asegúrate de haber seleccionado Automatic Reference Counting (recuento automático de referencias) para liberar automáticamente los recursos que quedan fuera de alcance. Haz clic en Siguiente.

5. Elige el directorio del proyecto y selecciona Crear.

CreateProjectSelectFolder

6. Verás una página como la que se muestra a continuación.

XcodeProjectPage

En la parte superior de la pantalla se pueden configurar la orientación, la compilación y el lanzamiento. Hay un Deployment Target; el dispositivo admite objetivos de implementación desde la versión 4.3 en adelante. Estas opciones no son obligatorias; por ahora, solo concéntrate en ejecutar la aplicación.

7. En el menú desplegable, selecciona iPhone Simulator y ejecútalo.

runProject

8. Si ejecutas correctamente la primera aplicación, obtendrás una salida como la que se muestra a continuación.

iPhoneSimulator1

Para cambiar el color de fondo, comienza con Interface Builder. Selecciona ViewController.xib. En el lado derecho, selecciona la opción Background, cambia el color y ejecuta.

InterfaceBuilder1

En el proyecto anterior, de forma predeterminada, el Deployment Target se ha establecido en iOS 6.0 y Auto Layout estará habilitado.

Para asegurar que la aplicación funcione correctamente en dispositivos iOS 4.3, ya modificamos el Deployment Target al comenzar a crear la aplicación, pero no deshabilitamos Auto Layout. Para desactivar Auto Layout, necesitamos desmarcar la casilla de verificación de Auto Layout en el Inspector de archivos (File Inspector) de cada archivo nib, es decir, el archivo xib.

Las distintas partes del IDE del proyecto Xcode se muestran a continuación (documentación de usuario de Apple Xcode 4).

Xcode4Workspace

En la barra de selección de inspectores (Inspector Selector Bar) que se muestra arriba se puede encontrar el File Inspector, y se puede deseleccionar Auto Layout. Cuando el objetivo solo sean dispositivos con iOS 6.0, puedes usar Auto Layout.

Por supuesto, también se pueden usar nuevas funciones, como Passbook al actualizar a iOS 6. Ahora, usa iOS 4.3 como Deployment Target.



Profundizando en el código de la primera aplicación de iOS

La aplicación se genera a partir de 5 archivos diferentes, como se muestra a continuación.
  • AppDelegate.h
  • AppDelegate.m
  • ViewController.h
  • ViewController.m
  • ViewController.xib

Usamos comentarios de una sola línea (//) para explicar el código simple. El código importante del proyecto se explica debajo del código.

AppDelegate.h

// Header File that provides all UI related items. 
#import <UIKit/UIKit.h> 

 // Forward declaration (Used when class will be defined /imported in future)
@class ViewController;  

 // Interface for Appdelegate
@interface AppDelegate : UIResponder <UIApplicationDelegate>

// Property window 
@property (strong, nonatomic) UIWindow *window; 

 // Property Viewcontroller

 @property (strong, nonatomic) ViewController *viewController;
//this marks end of interface 
@end  
Explicación del código
  • AppDelegate llama a UIResponder para manejar los eventos de iOS.
  • Implementa los comandos de UIApplication y proporciona eventos clave de la aplicación, como la finalización del inicio, la terminación, etc.
  • En la pantalla del dispositivo iOS, se usa el objeto UIWindow para gestionar y coordinar las vistas. Es como la vista base que carga otras vistas. Normalmente, una aplicación tiene una sola ventana.
  • UIViewController maneja el flujo de pantallas.

AppDelegate.m

// Imports the class Appdelegate's interface
import "AppDelegate.h" 

// Imports the viewcontroller to be loaded
#import "ViewController.h" 

// Class definition starts here
@implementation AppDelegate 

// Following method intimates us the application launched  successfully 
- (BOOL)application:(UIApplication *)application 
 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    self.window = [[UIWindow alloc] initWithFrame:
    [[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] 
     initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    /* Sent when the application is about to move from active to inactive state.
    This can occur for certain types of temporary interruptions
    (such as an incoming phone call or SMS message)
    or when the user quits the application and it begins the transition to the 
    background state. Use this method to pause ongoing tasks, disable timers, 
    and throttle down OpenGL ES frame rates. Games should use this method 
    to pause the game.*/
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /* Use this method to release shared resources, save user data, invalidate 
    timers, and store enough application state information    to restore your
    application to its current state in case it is terminated later. If your 
    application supports background execution, this method is called instead 
    of applicationWillTerminate: when the user quits.*/
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    /* Called as part of the transition from the background to the inactive state;
    here you can undo many of the changes made on entering the background.*/
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    /* Restart any tasks that were paused (or not yet started) while the
    application was inactive. If the application was previously in the background, 
    optionally refresh the user interface.*/
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    /* Called when the application is about to terminate. Save data if appropriate.
    See also applicationDidEnterBackground:. */
}

@end
Explicación del código
  • Aquí se define UIApplication. Todos los métodos definidos anteriormente son invocados por la interfaz de la aplicación y no contienen ningún método definido por el usuario.
  • El objeto UIWindow se asigna para almacenar los objetos asignados por la aplicación.
  • UIController actúa como el controlador de vista inicial de la ventana.
  • Llamar a makeKeyAndVisible hace que la ventana sea visible.

ViewController.h

#import  

// Interface for class ViewController
@interface ViewController : UIViewController 

@end
Explicación del código
  • La clase ViewController hereda de UIViewController, lo que proporciona el modelo básico de gestión de vistas para aplicaciones iOS.

ViewController.m

#import "ViewController.h"

// Category, an extension of ViewController class
@interface ViewController ()

@end

@implementation ViewController  

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
Explicación del código
  • Aquí, los dos métodos se implementan tal como se definen en la clase base de UIViewController.
  • Después de cargar la vista inicial, se llama a viewDidLoad para realizar la configuración.
  • En caso de advertencia de memoria, se llama a didReceviveMemoryWarning.
Otras extensiones