Introducción

Xcode es la herramienta de desarrollo proporcionada por Apple para crear aplicaciones para iOS. En este artículo vamos a estudiar algunas de las características más importantes de Xcode y del portal para desarrolladores de Apple. 

2.1 Asistente de creación y configuración del portal http://developer.apple.com

Xcode incorpora un conjunto de templates que nos permiten generar de forma rápida el esqueleto de los tipos de aplicaciones más usuales. Estos tipos son: Master-Detail Application, Page-Based Application, Single View Application, Tabbed Application y Game. 
La diferencia fundamental entre los diferentes tipos de aplicaciones es la clase ViewController principal.

tipo_applicacion.png

Single View Application
La clase ViewController es una subclase de UIViewController. Esta clase es la más sencilla y se utiliza como base de todos los controladores. Un uso habitual de este tipo de aplicación es añadir un objeto al controlador del tipo UIWebView para crear una aplicación híbrida HTML / Objective-C

capture_single_view.png

Master-Detail Application
La clase ViewController es una subclase de UITableViewController. Un ejemplo, la aplicación de notas de iOS.

captura_notes.png

Page-Bassed Application
La clase ViewController es una subclase de UIViewController, pero que en este caso implementa el protocolo UIPageViewControllerDelegate y contiene un
objeto del tipo UIPageViewController

@interfaceRootViewController : UIViewController<UIPageViewControllerDelegate>
@property (strong, nonatomic) UIPageViewController*pageViewController;
@end

Las aplicaciones de Nóticias son un ejemplo de esta tipología.

capture_the_guardian.png

Tabbed Application: Ejemplo de aplicación que fluye entre varias vistas usando una barra inferior de botones. 

capture_calendar.png

Game
Este tipo de aplicación es el que seleccionamos cuando vamos a realizar un videojuego. En este caso el asistente de creación de nuevo proyecto nos preguntará con qué tecnología vamos a realizar el videojuego. Podemos seleccionar entre cuatro tipos de tecnologías: SceneKit, SpriteKit, OpenGL ES y Metal.

capture_game.png

SceneKit, SpriteKit y Metal son tecnologías propietarias de Apple que simplifican la creación de la aplicación y proporcionan mas rendimiento al estar optimizadas para su hardware.

Open GL es mejor opción si en algún momento queremos realizar nuestra aplicación también en otra plataforma.

Creación de tu primer proyecto.

Una vez seleccionado el template se nos pide que rellenemos los datos necesarios para identificar a la aplicación. 

datos_de_aplicacion.png

Los datos son:

  • Product name: el nombre de la aplicación.
  • Organization name: el nombre de nuestra organización o empresa.
  • Organization identifier: suele ser  “com.” concatenado con el nombre de organización y es con el que se construirá de forma automática el Bundle Identifier. 
  • Bundle Identifier: es el identificador de aplicación, suele tener la sintaxis de un nombre de dominio escrito a la inversa.

Configuración http://developer.apple.com.


Una vez accedemos con nuestro login al member center navegamos a la opción Certificates, Identifiers & Profiles.  En el apartado Identifiers/App Ids damos de alta nuestra aplicación con los mismos datos que hemos usado en el asistente de creación de apps de Xcode.

Captura de pantalla 2015-10-28 a las 22.39.15.png

Configuración de las notificaciones push

En esta misma página configuraremos los servicios que queremos añadir a nuestra aplicación. Algunos ya aparecen añadidos por defecto. En este caso hemos añadido las notificaciones (Push Notifications).

otros_servicio_apple_Dev.png

Tenemos que recalcar que algunos de estos servicios requieren una configuración posterior para estar activos, este es el caso de las notificaciones Push. Si no se realiza esta configuración adicional la aplicación puede ser aprobada por Apple y sin embargo este servicio no estar disponible.

En el caso de las configuraciones Push es necesario descargar los certificados para el envío de notificaciones en el modo de pruebas y en el de producción.

config_notificaciones.png

Pulsamos en Edit y en la sección de notificaciones creamos y descargamos los certificados.

descargamos_certificados.png

Estos certificados se usarán en el back-end de nuestra aplicación para enviar las notificaciones.
Para generar el certificado específico para nuestra aplicación es necesario nuestro certificado de desarrollador ligado a un ordenador Mac. En nuestro Mac debemos ejecutar Utilidades\Acceso a llaveros. En el apartado certificados podemos exportar nuestro certificado de desarrollador. Si no aparece tenemos que comprobar lo siguiente:

  • 1) Iniciar Xcode y en la opción Xcode\Preferences\Account damos de alta nuestro Apple Id y pulsamos en el botón View Details. Esto debería generar y descargar en nuestro llavero el certificado de desarrollador. 
  • 2) Ir al apartado certificados en https://developer.apple.com y generar de nuevo el certificado 

reinstalar_el_certificado.png

Volviendo al asistente de Xcode, en esta misma pantalla se selecciona el lenguaje de programación que usaremos, podemos elegir entre Objective C o Swift.

También seleccionaremos el dispositivo destino de la aplicación. Los dispositivos disponibles son iPhone, iPad y Universal.
Si seleccionamos iPhone o iPad la aplicación solo será probada por Apple en los dispositivos indicados. Si elegimos Universal la aplicación será probada en iPhone e iPad y la aplicación debe comportarse de forma correcta en los dos tipos de dispositivos.

En el caso que la aplicación deba funcionar en iPad e iPhone ahora tenemos que decidir si realizaremos dos aplicaciones diferentes o si crearemos una única aplicación Universal.

Si creamos una aplicación Universal podremos compartir todo el código de acceso a datos y podremos usar el sistema de restricciones del editor de interfaz gráfica para que se realicen los ajustes a los diferentes tamaños de pantalla de los dispositivos.  Sin embargo, no todo es tan mágico. El sistema de restricciones es lo bastante potente como para ajustar el diseño entre los iPhone 4S, 5C, 5S, 6 y 6S, pero no lo es para ajustarlo entre iPhone e iPad ya que las resoluciones de pantalla son muy diferentes y los elementos de interfaz que se usan suelen ser diferentes. Esto implica que en muchas ocasiones tengamos que añadir clases para dar soporte por separado a las necesidades gráficas de iPhone e iPad. 

El código para identificar la familia de dispositivos Apple es este:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
// iPad
}
else{
// iPhone o iPod
}

Swift:

  if (UIDevice.current.userInterfaceIdiom == .pad) {
// iPad
}
else{
// iPhone o iPod
}

2 Pantalla principal de configuración de nuestra aplicación.

pantalla_principal.png

- Identity:
  Aquí iremos cambiando el número de versión para realizar las sucesivas actualizaciones en la AppStore. También podríamos cambiar el Bundle Identifier si fuera necesario. 

- Deployment Info:

Deployment target: se selecciona la versión de sistema operativo mínima de nuestra aplicación. Es importante recordar que por defecto cada Xcode asigna la última versión del sistema operativo disponible. Aunque el ritmo de actualización de los usuarios Apple es muy alto nunca es recomendable generar la aplicación para la última versión disponible. En este caso lo habitual es descender al menos una versión. 

Al generar aplicaciones que deben ejecutarse en diferentes versiones del sistema operativo es muy normal incluir código que se ejecute dependiendo de la versión de iOS. El preprocesador de Objective-C permite incluir bloques de código del tipo:

#ifdef __IPHONE_8_0
 //  iOS 8 code     
#endif

#ifdef __IPHONE_9_0
 // iOS 9  code   
#endif

Swift:

if#available(iOS8.0, *) {
 // iOS 8 code     
 }

if#available(iOS9.0, *) {
 // iOS 9 code     
 }

Devices: podemos volver a cambiar la familia de dispositivos destino de nuestra aplicación que seleccionamos en el asistente.

Device orientation: las orientaciones disponibles en nuestra aplicación. Básicamente si nuestra aplicación responderá a los eventos de cambio de orientación para proporcionar visualizaciones en vertical y horizontal. Si una aplicación solo tiene definida la orientación vertical se verá de igual forma cuando el usuario coloque su dispositivo en forma horizontal. 

El sistema de restricciones gráficas de Apple permite una adaptación automática de la interfaz cuando se cambia de orientación. Como hemos comentado en el caso de las aplicaciones Universales esta adaptación automática no suele ser suficiente y es necesario código específico para las diferentes orientaciones.

Main interface: indica el identificador del View Controller del storyboard que va a ser ejecutado en primer lugar por la aplicación.

Status bar style: se refiere a si queremos que en nuestra aplicación deseamos que aparezcan todos los indicadores (hora, nivel de carga de batería, etc.) o por el contrario no queremos que aparezcan estos indicadores. 

App icons and Launch images: el número y la definición de los iconos dependen de las familias de dispositivos destino de nuestra aplicación. 

iconos.png

La definición se indica como el número de puntos, en el primer caso 29pt, multiplicado por el número que aparece en el icono. Por ejemplo, el primer icono es de 58 píxeles y el segundo de 87 píxeles. La forma de asignar el icono es arrastrar el fichero .png sobre el rectángulo.

Launch Screen File: indica el storyboard que se usará como pantalla de inicio mientras arranca la aplicación. En versiones posteriores a iOS 8 era simplemente una pantalla. Ahora es un storyboard que permite incorporar controles como texto, imágenes, etc.