jueves, 29 de noviembre de 2012

Copiar proyecto Xcode generado por Genexus de una mac a la otra

Varias veces esta semana hemos visto que esta técnica es común en quienes trabajan con GeneXus Evolution 2 y la plataforma iOS.
Los escenarios eran variados pero la realidad era:

"Compile contra mi MAC1 y ejecuta la aplicación bien, copie el proyecto Xcode a otra MAC2 y me da muchos errores de referencia"

Cuando GeneXus envía a compilar a una MAC no solo transfiere el proyecto Xcode y las imágenes,  metadata (y todo los que se puede ver desde el Xcode), sino también, transfiere un Framework a esa MAC. Este Framework o Flexible Client es necesario al momento de ejecutar las aplicaciones iOS.

Entonces, ¿cómo hacemos para poder ejecutar un proyecto XCode en mi MAC2 que GeneXus no tiene acceso?

a. En MAC1 abrir un Finder
b. Ejecutar las siguientes teclas: COMMAND + Shift + G
c. En ese Prompt poner: ~/Library
d. Presionar GO
e. Esto abrirá la carpeta oculta Library. Allí debería haber una carpeta llamada Artech, copiarla.
d. Pegar esa caperta  en la carpeta Library de MAC2 siguiendo los mismos pasos (a-d) para encontrarla.

De esa manera se solucionan los problemas de referencia.

NOTA: tener sumo cuidado si se trabaja con dos versiones de GeneXus distintas en simultaneo contra MAC1 ya que este framework cambia con el build de GeneXus.

miércoles, 21 de noviembre de 2012

Optimización de llamadas dinámicas

Cuando programamos una aplicación para Smart Devices en GeneXus tenemos la posibilidad de utilizar llamadas dinámicas a objetos, lo que nos brinda una gran flexibilidad a la hora de desarrollar las funcionalidades de la aplicación.

Por ejemplo, podemos tener en un evento algo como lo siguiente :

Event 'MiEvento'
    Composite
        &objectName = GetObjectToCall.udp(&param1, &param2)
        call(&objectName)
    EndComposite
EndEvent

donde &objectName es una variable Character y GetObjectToCall es un procedimiento donde resolvemos la lógica sobre que objetos llamar.

Este esquema si bien nos trae muchas ventajas a la hora de desarrollar, tiene una desventaja importante y es que necesita procesamiento "server side" para determinar a que objeto llamar. O sea, si o si se necesita conectarse al servidor para continuar con la ejecución de la aplicación, no teniendo efecto el caché por ejemplo y haciendo que cualquier problema con la conexión haga que la aplicación deje de funcionar.