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
investigación de los Avances tecnológicos del siglo XXI
Creación de extensiones nativas
1. 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. 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. 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. 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. 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. 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. 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. 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. 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.