Apple Developer Program

Como elegir una membresía adecuada a nuestro perfil de desarrollador iOS

¿Como instalar nuestra aplicación movil en un iPhone?

No dejes a tu aplicación encerrada en el iOS simulator del Xcode!

viernes, 18 de marzo de 2016

¿Como hacer debug de un App en iPhone con xCode?

Supongamos el siguiente escenario, estamos ejecutando una aplicación con el xCode que la hacemos correr en el iPhone, en vez de utilizar el iOS Simulator.

El xCode en su consola nos muestra información del log de la aplicación. Pero ¿Que otros elementos tenemos a nuestra disposición? Además de Breackpoints ¿Que mas tenemos?

Una opción ante el "crash":






Vamos a "Privacidad > Diagnostico y Uso > Datos de Diagnostico y Uso"



Y vemos el contenido:


Otra Herramienta para ver los logs del dispositivo, mucho más útil en la etapa de Desarrollo es:





Devices window > Devices > Seleccionamos el iPhone y click View Device Logs.



 ¿Que otras opciones para ver el log pueden sugerir?








martes, 6 de octubre de 2015

Mi primera aplicación en el Apple Watch

¿Como hacer nuestra primera aplicación con el Apple Watch? ¿Que tan fácil o difícil es? A continuación comparto los pasos que tuve que realizar, para que cada uno saque sus propias conclusiones

¿Que necesitamos?

Repasemos los requerimientos de Hardware y Software.
Para empezar, lo que hicimos fué actualizar a las últimas versiones los sistemas operativos de Apple de cada dispositivo.
  • MacBook Pro actualizado a OS X El Capitan 
  • iPhone 6  actualizado a iOS 9.0.2
  • Apple Watch actualizado a OS 2
  • Xcode actualizado a versión 7.0.2
En el post anterior repasamos como actualizar el Apple Watch a OS 2

Paso 01: Creamos el Proyecto para iPhone

Desde Xcode elegimos File > New Project y elegimos luego Single View Application:


Language Swift y Devices Universal


Tenemos nuestro MainStory Board, le vamos a agregar un Label para que no quede vacío. 
Esta es para la aplicación para el iPhone, pero como veremos mas adelante, no es necesario para la aplicación en el Apple Watch



Si en este momento presionamos Play, nos encontramos con nuestra aplicación del estilo "Hola Mundo" para iPhone, en el iOS simulator se ve


Paso 02: Creamos el Proyecto para el Apple Watch

Nos mantenemos dentro del proyecto de iPhone que acabamos de crear y volvemos a elegir File > New > Project


Para elegir iOS App with Watchkit App dentro de watchOS > Application


Es importante que al proyecto del Apple Watch le asignemos un nombre diferente al del iPhone


Elegimos una carpeta destino


Vemos que este nuevo proyecto nos da un nuevo storyboard con las dimensiones del Apple Watch y observamos tres cosas:

  • La ubicación del storyboard para el Apple Watch
  • La posibilidad de agregar Label y Separators
  • Un nuevo Device de 38mm y 42mm que son las pantallas del Apple Watch



Agregamos algunos Labels. En nuestro caso agregamos varios para mostrar la info de la cuenta de twitter y las pagina web que utilizamos para documentar y compartir las pruebas que realizamos.




Paso 03: Creamos Outlets

Este paso podría ser opcional, pero es importante para mostrar el acceso al código fuente. El ícono con los dos anillos enlazados nos muestra el código fuente asociado al storyboard seleccionado.

Luego creamos los outlets. Es la forma de crear una variable para el label dentro del código... Es un poco extraño la primera vez, pero luego uno se acostumbra y finalmente lo hace rutinariamente y esta ok!

Con el CTRL presionado, arrastramos el label hacia el código fuente y magicamente nos creará una variable...


El código de nuestra clase quedó como:


class InterfaceController: WKInterfaceController {

     @IBOutlet var TitleLabel: WKInterfaceLabel!
    
    @IBOutlet var label_01: WKInterfaceLabel!
    @IBOutlet var label_02: WKInterfaceLabel!
    @IBOutlet var label_03: WKInterfaceLabel!
    @IBOutlet var label_04: WKInterfaceLabel!
    
    
    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        
        // Configure interface objects here.
        
        TitleLabel.setText("Mi Primera App:");
        
        label_01.setText("@no_cuestanada");
        label_02.setText("ProbarNoCuestaNada.com");
        label_03.setText("iosen.blogspot.com");
        
        label_04.setText("EN APPLE WATCH");
    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }

}


Paso 04: Ejecutamos en el iOS Simulator

Simplemente la damos ejecutar y vemos lo siguiente:


Paso 05: Ejecutamos la aplicación en el Apple Watch

Vamos a continuar con la ejecución en el Apple Watch. Con la versión de Xcode 7 se volvió mas sencillo el proceso de instalar las aplicaciones que desarrollamos en nuestros propios dispositivos.

Antes, si queríamos instalar nuestra aplicación en nuestro iPhone, era necesario registrar el UDID de cada dispositivo dentro del Apple Developer Program y tener algunas de las cuentas de programador o estudiante

Ahora simplemente tenemos que dar autorizaciones. En este punto, ya deberíamos tener enlazados el iPhone con el Apple Watch

Antes de llegar a la autorización en el Apple Watch, debemos autorizar la aplicación para ejecutarse en el dispositivo iPhone

Con el iPhone conectado al MacBook, elegimos al iPhone como dispositivo físico, en vez del iOS Simulator


Veamos los pasos para autorizar la aplicación para que se ejecute en el iPhone



  


  


La siguiente pantalla es la captura del iPhone con la aplicación corriendo:




(Nota: Para capturar la pantalla de un iPhone 6 o Plus tenemos que mantener pulsado el botón de reposo/encendido y luego hacer clic en el botón home)






¿Que pasa si ahora elegimos desde Xcode el destino Apple Watch?


Nos muestra el error:
apple watch error en la verificación  de la aplicación



Para solucionar este error, tenemos que autorizar a nuestra aplicación para que se instale en el Apple Watch:

Observemos que dentro del ícono Watch aparece nuestra aplicación, la cual debemos autorizar a que se muestre en el Apple Watch:

   

En ese momento, en el Apple Watch aparece:

   

Y le decimos que si vamos a confiar en ese desarrollador para que finalice el proceso.



Código en GitHub

El código fuente de estos proyectos lo pueden encontrar en GitHub

Un Poco de Feedback

  • ¿Te resulta muy complicado o es un proceso simple?
  • ¿Has podido armar tu aplicación en el iOS Simulator del Apple Watch?
  • ¿Lograste instalarla en un Apple Watch real?

Url Abreviada

Si te gustó el artículo, te facilitamos la URL Abreviada para que puedas compartirlo 


sábado, 3 de octubre de 2015

¿Como crear una aplicación para AppleWatch?

Compartimos el siguiente video que explica como crear una aplicación con Apple Watch.
Los pasos son sencillos y bien explicados. Aunque se necesita algún conocimiento mínimo de xCode para seguirlo mejor.

Una cosa interesante que dice en el video, es que la aplicación no se ejecuta en el apple watch, sino en el iPhone, el cual envía la imagen del resultado al Apple Watch.



Apple Watch Tutorial - Learn How to Make a Simple Apple Watch App from Made Up By People on Vimeo.







martes, 1 de septiembre de 2015

Objective-C primeros pasos

¿Cual es el "ABC" del lenguaje objective-c? ¿Como se instancia una clase? ¿Cuales son los tipo de datos fundamentales? ¿Como se recorre un array? ¿Como se escribe en un log?¿Que es una interfaz?¿Que es un protocolo?¿Que son los Selectores?

Con algunas de estas preguntas, vamos a hacer un ejercicio, y compartirlo  en GutHub, que muestra estos componentes funcionando.


Comencemos:

El fuente completo se puede encontrar en GitHub https://github.com/PabloEzequiel/iOS/tree/master/Ejercicio01
La clase principal donde se ve la sintaxis




   


@implementation ViewController

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

    // Nota: el new hace un alloc y un init. ..
    // No siempre se usa new, porque hay constructores ....
    
    //  persona = [Persona new];
    persona = [[Persona alloc] init];
    
    
    // LLamo a metodos:
    [persona metodo];
    
    
    /**
     * INVOCAMOS METODOS CON SELECTORES
     */
    
    SEL selector1 = @selector(metodo);
    SEL selector2 = @selector(metodoParaSelector);
    
    [persona performSelector:selector1];
    [persona performSelector:selector2];
    
    [persona metodo];
    //     [persona metodoParaSelector];   // El compilador no me deja. ...
    
    
    
    /**
     * USO DE PROTOCOLOS
     */
    
    // Con el id es la forma mas normal de utilizarlo porque lo que mas no interesa que es que conforme el protocolo ...
    
    id var;
    
    var = [Persona new];
    
    [var saludar];
    
    
    // [var saludarOpcional];  // Revienta en tiempo de ejecucion ....
    
    
    
    SEL selectorOpcioneal = @selector(saludarOpcional);
    
    if ([var respondsToSelector:selectorOpcioneal]) {
        [var saludarOpcional];
    } else {
        NSLog(@"Opcional no implementado");
    }
    
    
    // NSString *string = [[NSString alloc] initWithFormat:<#(nonnull NSString *), ...#>];
    
    
    
    //    self.loginService = [LoginService new];
    
    // Secuencia:
    
    // alloc init
    // viewDidLoad
    // willAppear
    //
    
    // nil ... es en realidad un objeto .. que si le envias un mensaje (cualquiera)...  te retorna nil .
    
    
    // UN PARA DE OBJETOS INTERESANTES QUE VIENEN CON EL KIT:
    // NSNumber *  : Lo podes instanciar con distintos tipos ....
    
    NSNumber *uno     = [NSNumber numberWithInt:1];
    NSNumber *unoOtro = @(1);
    
    if (uno == unoOtro) {
        NSLog(@"Son Iguales");
    } else {
        NSLog(@"NO Son Iguales");
    }
    

    // No son mutables.. o sea que despues no lo podes cambiar ....
    // No hay que usar esto porque anda de casualidad
    
    if ([uno isEqual:unoOtro]) {
        NSLog(@"Son Iguales");
    } else {
        NSLog(@"NO Son Iguales");
    }
    
    
    
    if ([uno isEqual:unoOtro]) {
        NSLog(@"Son Iguales");
    } else {
        NSLog(@"NO Son Iguales");
    }
    
    
    //  [[NSDate *date]]
    
    
    //   Colecciones
    //   Tenes dos tipos de Array ....
    //     A estas colecciones no les puede agregar nada una vez que las tenes
    //     NO SON MUTABLES ::::: !
    //     SIRVE por ejemplo si venis desde la base de datos ... y no queres que te los toquen... es bueno que no te lo toquen....
    //          asi evitas que una clase te lo haga percha ....
    
    
    NSArray        *arrayCopados         =  @[@(1), @(2), @(3)];
    NSMutableArray *arrayCopadosMutalbes =  @[@(1), @(2), @(3)].mutableCopy;
    
    
    NSDictionary *dictionaryCopara = @{@"Hola": @(1)}.mutableCopy;
    
    
    NSLog(@"AAA!!! %@", [dictionaryCopara objectForKey:@"Hola"]);
    
    
    for (id obj in arrayCopadosMutalbes ) {
        
        NSLog(@"BBB!!! %@",obj);
    }
    
    NSArray *array;
    NSDictionary *dictionary;
    NSSet *set;
    
    NSValue *valueWithPointer; // :<#(nullable const void *)#>;
    
    
    // Estos... los mutables les podes sacar y poder elementos ...
    
    NSMutableArray *array2;
    NSMutableDictionary *dictionary2;
    
    
    NSMutableArray *mutableArray  = [ NSMutableArray array];
    [mutableArray addObject:@(1)];
    [mutableArray addObject:@"Un Strnge"];
    [mutableArray addObject:[Persona new]];
    
    
    
    
    NSMutableSet *set2;
    
    
    // Coredata es la herramienta de persistencia de Objetive C...
    // Tiene una herramienta asociada con el XCODE que te devuelve el C...
    
    // [[set alloc] init];
    
    
    // Todo los metodos tiene un metodo "description" que es la version de toString
    NSLog(@"hola");
    
    
    NSLog(@"SALLUDADDOR!!! %@", [Persona new]);
    
    
    // Para no have un %f para float ... es mas comodo :
    
    NSLog(@"FLOAT COMODO: %@", @(1.3));
    
    
    // OTRA
    Class clase = [@"hola"  class];
    id hola = [clase new];
    if ([@"hola" isKindOfClass:clase]) {
        
    };
    
    
    // Se puede utilizar tambien la clase NSError
    // NSError *
    
    

}







La interfaz Persona
   

#import 
#import "Protocolo.h"

@interface Persona : NSObject 


- (void) metodo;

@end




La implementacion Persona
   



#import "Persona.h"
#import "Protocolo.h"

@implementation Persona

- (void) saludar{
    
    NSLog(@"saludar ... respeto al protocolo .... ");
    
    
};


- (void) metodo {
    
    NSLog(@"Hola Que tal .");
    
};


// Este metodo no lo agrego a la interfaz
// con los cual el compilador no me dejara ...
// pero el selector si me va a permitir ...
- (void) metodoParaSelector {
    
    NSLog(@"Hola Que tal metodoParaSelector");
    
};



//ES EL TO STRING
- (NSString* ) description {
    
    NSLog(@"hola");
    
    return @"SOY EL toString() o description de la clase persona";
    
};

@end





Protocolo que debe respetar la clase Persona
   


#import 

@protocol Protocolo 

- (void) saludar;

@optional

- (void) saludarOpcional;

@end








La salida que genera
   

Ejercicio01[40841] Hola Que tal .
Ejercicio01[40841] Hola Que tal .
Ejercicio01[40841] Hola Que tal metodoParaSelector
Ejercicio01[40841] Hola Que tal .
Ejercicio01[40841] saludar ... respeto al protocolo .... 
Ejercicio01[40841] Opcional no implementado
Ejercicio01[40841] Son Iguales
Ejercicio01[40841] Son Iguales
Ejercicio01[40841] Son Iguales
Ejercicio01[40841] AAA!!! 1
Ejercicio01[40841] BBB!!! 1
Ejercicio01[40841] BBB!!! 2
Ejercicio01[40841] BBB!!! 3
Ejercicio01[40841] hola
Ejercicio01[40841] hola
Ejercicio01[40841] SALLUDADDOR!!! SOY EL toString() o description de la clase persona
Ejercicio01[40841] FLOAT COMODO: 1.3





El fuente completo se puede encontrar en GitHub https://github.com/PabloEzequiel/iOS/tree/master/Ejercicio01


viernes, 14 de agosto de 2015

Como instalar una aplicación movil en un iPhone

Para instalar una aplicación movil en un iPhone (o en un iPad o iPod), enter otras cosas básicas necesitamos darnos de alta en el Apple Developer Program


Si necesitamos una aplicación sencilla para familiarizarse con los ejemplos, pueden bajarse de GitHub nuestra aplicación tipo "Hola Mundo" escrita en swift:

https://github.com/PabloEzequiel/TestSwiftIOS

Una vez que tienen la aplicación movil, si necesitan repasar pueden visitar el post sobre Como ejecutar una aplicación desde Xcode
Ahora: la pregunta es 

¿Que necesitamos para instalar nuestro proyecto movil en un iPhone desde Xcode?






Necesitamos registrar los dispositivos donde vamos a instalar la aplicación:


Necesitamos un Provisioning Profiles


Descargamos el Provisioning Profiles


¿Que pasa si no tenemos un Provisioning Profiles?

Cuando queremos instalar en un dispositivo físico nos da un error:


Y nos dice que no estamos autorizados:


Entonces descargamos el Provisioning Profiles


Y podemos volver al Xcode para ejecutar el proyecto en iPhone.








Veamos la aplicación en el iPhone

Para hacer una captura de pantalla con iPhone 6 o Plus, lo único que tenemos que hacer es mantener pulsado el botón de reposo/encendido y acto seguido hacer clic en el botón home.



Con esto terminamos de ver que es lo que se necesita para que nuestra aplicación movil pueda ejecutarse en un dispositivo físico como un iPhone





jueves, 13 de agosto de 2015

Como elegir una membresía del Apple Developer Program

Para poder ejecutar una proyecto movil en un dispositivo iPhone (u otro dispositivo de apple como un iPad o un iPod)  tenemos que estar registrados como miembros del Apple Developer Program

También tenemos que pertencer al Apple Developer Program si queremos algún día publicar nuestra aplicación movil en la App Store de Apple.

Vamos a responder un par de preguntas sobre las membresías de Apple de una forma muy simplista para no entrar en detalles, pero a su vez poder dar una idea de sobre que estamos hablando.


¿Por que tengo que ser miembro del Apple Developer Program...?

Como vimos en el post anterior, podemos desarrollar sobre una Mac con Xcode y ejecutar nuestra aplicación movil en el iOS simulator, esto sin ninguna licencia. Pero si quiero dar el salto y poder realizar la instalación de la aplicación en  dispositivos físicos, entonces si tengo que hacerme miembreo del Apple Developer Program.





¿Que tipos de membresías de Apple Developer existen... y como se obtienen?

Existen cuatro categorías de membresías:
  • Apple Developer 
  • iOS University Program
  • iOS Developer Program
  • iOS Developer Enterprise Program
pero si nuestra intención es probar la aplicación en un dispositivo físico como el iPhone, no nos sería sufciente la categoría de Apple Developer porque permite únicamente utilizar el iOS simulatos

Veamos las otras tres:


iOS University Program

Puede suceder que hagamos un curso de programación sobre iOS o iPhone en un instituto que este afiliado al iOS University Program.

En ese caso, el instituto o Universidad nos puede afiliar de manera gratuita al Apple Developer Program. Siempre y cuando sea un Instituto o Universidad afiliada al iOS University Program.

iOS Developer Program

Esta licencia tiene un costo anual de u$s 99. Nos permite no solo instalar nuestras aplicaciones en nuestros dispositivos, también publicarlos en la App Store de Apple y comercializarlas con unos beneficios del 70% sobre el precio de venta que establezcamos.




iOS Developer Enterprise Program

Esta licencia tiene un costo de u$s 299 anuales, y esta pensada para empresas que desean distribuir aplicacones del estilo de "Intranet" sobre sus empleados. Son aplicaciones corporativas privadas, o también denominadas "In-house",


Resumiendo:



... Si quiero probar la aplicación, mientras estoy iniciandome en iOS, puedo utilizar el Xcode con el iOS simulator.

... Si decido buscar un curso sobre iOS, lo ideal sería que el instituto o universidad que da el curos, tenga también la posibilidad de generarnos licencias del programa  iOS University Program para tener la opción de probar la aplicación también en los dispositivos móviles y entender este paso de la distribución que no es menor.

... Si quiero hacer un aplicación movil, e instalarla en un dispositivo, tengo que pensar en registrarme con la licencia de u$s 99 anuales.





lunes, 10 de agosto de 2015

Como ejecutar una aplicación movil en iOS desde Xcode

En este post veremos como ejecutar desde el Xcode una aplicación móvil para iOS desde Xcode.  Para llegar a este punto, primero se necesitan los siguientes requisitos previos:

Requerimientos:


Para desarrollar una aplicación para iPhone necesitamos una Mac con el IDE Xcode
En nuestro caso, utilizamos:
  • MacBook Pro
  • Sistema Operativo OS X Yosemite versión 10.10.3
  • Entorno IDE de desarrollo Xcode 6.3.1






Aplicación de Ejemplo:

Vamos a utilizar una aplicación de ejemplo muy sencilla del estilo "Hola Mundo" que denominamos "TestSwiftIOS". Esta aplicación muestra un label con fondo verde que dice "Test Swift iOS"

El código de esta aplicación de ejemplo lo pueden descargar de GitHub:

Y a continuación mostramos el proyecto importado al Xcode:


Y la ejecución de la aplicación en el emulador iOS Simulator:



En este punto, terminamos la primera parte del post. La segunda parte describe: ¿Como logramos que la aplicación que vimos correr en el iOS simulator se ejecute en en dispositivo como el iPhone?

Lo cual nos llevará al siguiente paso:

Registro en el Apple Developer Program 

Necesitamos registrarnos como desarrolladores en el Apple Developer Program y además registrar los equipos en los cuales realizaremos la instalación. 

Para esto necesitamos también conocer el UDID de nuestro equipo. El UDID de un equipo se obtiene con el iTunes conectando el equipo vía USB y haciendo click en el número de serie.

El detalle de estos pasos quedarán para el siguiente post.






Links Externos

Los siguientes links externos que explican como son los pasos para registrarse en Apple Developer Program y también registrar los dispositivos:

En stackoverflow.com, está la versión resumida:
En codewithchris.com podemos ver la versión expandida de la explicación del mismo: