creación de extensiones nativas
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-.gitTRANSCRIPT
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
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".
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
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
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.
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]] >
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
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:
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.