Creación de extensiones nativas

9
1 Creación de Extensiones Nativas(ANE) [iOS, Air] La creación de extensiones nativas son fundamentales, mas que nada para el buen funcionamiento de las aplicaciones desarrolladas con Adobe AIR(AS3). Las "Apps" creadas con AIR carecen de muchas funcionalidades de las cuales le dan un valor agregado a la aplicación, y para que el usuario tenga una "Experiencia de usuario" muy buena, y este no note que la aplicación no esta desarrollada con código nativo. Las extensiones nativas(ANE) son una combinación de código Action Script(AS3), Android y/ó Objective C, las cuales se comunican entre si, y de este modo puedan ejecutarse funcionalidades que con ActionScript no es posible. Ahora se mostrara paso por paso como se crean dichas extensiones: NOTA: decidí que se empiece por objetive c para mejor explicación. 1) necesitamos tener instalado la ultima versión de XCode que en este caso es la 4.6.3 Ahora lo ejecutamos y aparecerá una ventana como la siguiente de la cual seleccionamos la primer opción que es "Créate a new Xcode project". Una vez que se muestra esta ventana en el menú que se encuentra de lado izquierdo, seleccionamos iOS y dentro de esa opciones seleccionaremos

description

ya subi el codigo para la creación de extensiones nativas, solo que el siguiente commit ya le pondre comentarios https://github.com/aovazquez/SerialNumber_iOS-ANE-.git

Transcript of Creación de extensiones nativas

Page 1: Creación de extensiones nativas

  1  

Creación de Extensiones Nativas(ANE) [iOS, Air]  La creación de extensiones nativas son fundamentales, mas que nada para el buen funcionamiento de las aplicaciones desarrolladas con Adobe AIR(AS3). Las "Apps" creadas con AIR carecen de muchas funcionalidades de las cuales le dan un valor agregado a la aplicación, y para que el usuario tenga una "Experiencia de usuario" muy buena, y este no note que la aplicación no esta desarrollada con código nativo. Las extensiones nativas(ANE) son una combinación de código Action Script(AS3), Android y/ó Objective C, las cuales se comunican entre si, y de este modo puedan ejecutarse funcionalidades que con ActionScript no es posible. Ahora se mostrara paso por paso como se crean dichas extensiones: NOTA: decidí que se empiece por objetive c para mejor explicación. 1) necesitamos tener instalado la ultima versión de XCode que en este caso es la 4.6.3

Ahora lo ejecutamos y aparecerá una ventana como la siguiente de la cual seleccionamos la primer opción que es "Créate a new Xcode project".

Una vez que se muestra esta ventana en el menú que se encuentra de lado izquierdo, seleccionamos iOS y dentro de esa opciones seleccionaremos

Page 2: Creación de extensiones nativas

  2  

Framework & Library, se mostrara una opciones llamada Cocoa Touch Static Library y Siguiente:

Ahora le daremos un nombre a nuestro proyecto que en este caso será "SerialNumberLib", llenamos los demás campos en mi caso puse esos datos pero pueden ponerlo como crean conveniente. Una vez ya llenados estos campos presionamos "Next".

En la siguiente ventana se nos pediré la ubicación en donde queremos que se guarde el proyecto, ya que se allá elegido la ubicación presionamos "Create".

Page 3: Creación de extensiones nativas

  3  

Una vez creado el proyecto se abre el IDE en el cual podemos observar en el lado izquierdo se muestra como esta organizado el proyecto en carpetas y las clases. Ahora como se darán cuenta crea 2 archivos que es la interfaz(.h) donde se declaran las variables, y en la implementación(.m) es en donde se utilizan los métodos y variables declaradas en la interfaz.

Ahora la interfaz(.h) no la necesitaremos y la eliminaremos, pero la sustituiremos con otra interfaz esta desarrollada por Adobe la cual se encuentra descargando el SDK para Air mediante la siguiente liga http://www.adobe.com/devnet/air/air-sdk-download.html. Una vez descargado el SDK lo descomprimimos y en la carpeta include se encuentra la interfaz que ocuparemos llamada FlashRuntimeExtensions.h, la arrastraremos o copiamos dentro del proyecto. una ves hecho eso, en la implementación se importa la interfaz añadida. El motivo por el cual se añadió dicha interfaz, fue para poder comunicarse entre código Nativo y ActionScript. El motivo del desarrollo de esta extensión nativa(ANE) fue para cubrir la necesidad de obtener el numero serial del dispositivo y el UDID. Para obtener dicho numero

Page 4: Creación de extensiones nativas

  4  

de serie, fue necesario recargar un método llamado UIDevice, el motivo de hacer este paso, es que no se puede obtener directamente, para poder obtenerlo(el numero de serial) se es necesario una librería llamada IOKit la cual no esta disponible para iOS y solo para el desarrollo de aplicaciones de escritorio, es por eso que se hace mediante código para poder llamar dicha librería. Para esto se creara una clase que en mi caso llamare SerialLib, al momento de crearla se crearan los 2 archivos por default(.h, .m). Y la estructura de las carpetas y clases queda de la siguiente forma.

Al terminar de hacer los métodos correspondientes para el funcionamiento de las clases se presiona Cmd+b para compilar, una ves hecho esto en la carpeta Products se genera un archivo .a el cual ocuparemos en un momento mas adelante. Eso seria todo por parte en objective c ahora se explicara lo que se hace en FlashBuilder. Air Ahora crearemos un proyecto en Flex con el cual se desarrollara la parte que se comunicara con el código nativo creado previamente. Abrimos nuestro IDE llamado FlashBuilder

Page 5: Creación de extensiones nativas

  5  

Una vez cargado nuestro IDE crearemos un proyecto de tipo librería presionando en el menú superior File/New/Flex Library Project.

Aparecerá la siguiente ventana en el cual pondremos el nombre de nuestra librería que en este caso seria LibrarySerialDevice, lo demás lo dejamos como esta y damos Finish.

Page 6: Creación de extensiones nativas

  6  

ya creado nuestro proyecto, default viene sin clases que ejecutar, para esto crearemos una clase la que llamaremos SerialNumberController.as. NOTA: el código viene en el link de la descripción de este tutorial. También crearemos 2 XML, ya que son necesarios para la comunicación entre ambas librerías la primera la llamaremos extension.xml, y su estructura debe de ser de la siguiente manera: <extension  xmlns="http://ns.adobe.com/air/extension/3.8"]]  >  /**se  especificara  versión  del  SDK  de  Air  se  compilo  la  libreria*/            <id]]  >  com.hovanetworks.serialnumber</id]]  >  /**Se  establece  un  ID  entre  el  XML  y  la  clase  de  de  Air  (puede  ser  cual  sea)*/            <versionNumber]]  >  1</versionNumber]]  >  /**versión  que  tendra  el  .ANE  final*/            <platforms]]  >                    <platform  name="iPhone-­‐ARM"]]  >  /**Plataformas  de  la  cuales  les  dara  soporte  el  ANE  final(iOS,Android,Windows,Mac)*/                            <applicationDeployment]]  >                                    <nativeLibrary]]  >  libSerialNumberLib.a</nativeLibrary]]  >  /**nombre  de  la  extensión  generada  en  Objective  c*/                                    <initializer]]  >  LNGenericANEInitializer</initializer]]  >  /**nombre  del  metodo  que  se  iniciliazara  en  objective  c  (debe  de  ser  el  mismo  nombre)*/                                    <finalizer]]  >  LNGenericANEFinalizer</finalizer]]  >  /**nombre  del  metodo  que  se  finalizara  en  objective  c  */                            </applicationDeployment]]  >                    </platform]]  >                    <platform  name="default"]]  >                            <applicationDeployment/>                  </platform]]  >                  </platforms]]  >      

</extension]] >

Una vez puestos esos datos ahora se realizara el siguiente XML el que lleva por nombre platformoptions.xml en donde se agregan las extensiones de terceros que queramos utilizar, y de las cuales no incluyen en el SDK de iOS por default. pero como no usamos ninguna otra librería de terceros para realizar este ANE solo lleva la siguiente información. <platform  xmlns="http://ns.adobe.com/air/extension/3.8"]]  >  /**se  especifica  la  versión  del  SDK  de  Air  se  compilo  la  libreria*/            <sdkVersion]]  >  6.1.0</sdkVersion]]  >  /**versión  en  la  que  se  compilo  la  libreria  en  objective  c*/            <linkerOptions]]  >                    <option]]  >  -­‐ios_version_min  6.1</option]]  >  /**versión  minima  en  la  cual  funcionara  el  ANE*/            </linkerOptions]]  >    </platform]]  >    

Page 7: Creación de extensiones nativas

  7  

Ya teniendo estos archivos y haber limpiado el código en FlashBuilder, en el proyecto de la librería en la carpeta bin se crea un archivo .swc, que en ese caso tendrá este nombre y extensión LibrarySerialDevice.swc. A este archivo generado le cambiaremos el tipo de extensión a .ZIP, abrimos el zip y dentro de ella se encuentran 2 archivos, el que necesitaremos será el "library.swf", este archivo es necesario para poder crear el archivo .ane. Después de haber creado los archivos necesarios para la creación de nuestra extensión nativa (ANE) ahora pondremos en una carpeta en la cual deben de organizarse de las siguiente manera:

NOTA: El nombre de las carpetas, xml's debe de ser el mismo como los que se muestran(extensión, platformoptions). Ya acomodados los archivos, ahora lo compilaremos mediante línea de comandos usando "adt", este se encuentra en la carpeta bin del SDK de Air que descargamos. ahora se abrira una terminal y se hará ellos siguientes pasos. primero verificaremos si tenemos instalado el adt tecleando: adt  -­‐version  

si nos muestra el siguiente mensaje -­‐bash:  adt:  command  not  found  

Page 8: Creación de extensiones nativas

  8  

Se tendrá que re direccionar el PATH de la siguiente forma: export  

PATH=$PATH:/Users/AngelVazquez/Downloads/AdobeAIRSDK/bin/:/Users/AngelVazquez/Ad

obeAIRSDK/android/tools  

 

NOTA: yo lo tengo de esta forma ya que allí es donde se encuentra el SDK que descargue. Volvemos a teclear el comando para ver la versión de "adt" y si es que se hizo de buena manera aparecerá el numero de la versión del "adt" 3.8.0.910     Ahora nos dirigimos en donde se encuentra nuestros archivos ya organizados(mediante la consola). Una vez ya estando dentro de la carpeta ejecutaremos el siguiente comando, que es con el cual se generara el ANE adt  -­‐package  -­‐target  ane  SerialNumber.ane  extension.xml  -­‐swc  

serialNumberDevice.swc  -­‐platform  iPhone-­‐ARM  -­‐C  ios  .  -­‐platformoptions  

platformoptions.xml  -­‐platform  default  -­‐C  default . Ya creado el archivo .ane lo copiamos dentro de la carpeta de las "libs" del proyecto en done lo ocuparemos, ahora lo importamos al proyecto en donde lo utilizaremos, damos clic derecho sobre el proyecto "Properties" se abrirá un ventana y se realizara lo siguiente:

Page 9: Creación de extensiones nativas

  9  

Buscamos la ubicación de nuestra librería la seleccionamos y presionamos "ok" una vez ya agregada presionamos ok para volver a la aplicación ahora si ya podremos utilizarla, la forma de hacerlo es muy sencilla es de la siguiente manera

var  numSerial:String  =  SerialNumberController.instance.getSerial();   De esta manera ya obtendremos el numero del serial de nuestro dispositivo iOS. NOTA: Para poder comprobar que sirve nuestra librería se debe de hacer directamente en el dispositivo físico ya que en el emulador de Air suele "tronar". El código esta disponible en la URL que se encuentra en la descripción de este archivo.