Colección de citas famosas - Slogan de motivación - Desarrollo del lenguaje Angry Birds Lua en IOS: explicación detallada del marco Wax (1)

Desarrollo del lenguaje Angry Birds Lua en IOS: explicación detallada del marco Wax (1)

En junio de 2011, el lenguaje Lua surgió repentinamente en la clasificación de lenguajes de programación y entró entre los diez primeros de una sola vez. Esto es inseparable de la decisión de Apple de utilizar el lenguaje Lua en el sistema iOS hace un año. Sin embargo, ¿sabes cómo desarrollar aplicaciones en iOS usando el lenguaje Lua? A continuación, les presentaré Wax, el marco de desarrollo de aplicaciones iOS en lenguaje Lua. Entre ellos, "Angry Birds", que es extremadamente popular en la plataforma iOS, se desarrolló utilizando Wax en lenguaje Lua. El texto completo * * * está dividido en dos partes. La primera parte le explicará algunos de los beneficios de Wax y le demostrará los pasos prácticos necesarios para integrar Lua con Xcode 4 y el kit de desarrollo de software (SDK) de iOS. La segunda parte le explicará cómo utilizar Wax para crear una aplicación sencilla que muestra una lista de temas de tendencia actual en Twitter y actualiza el contenido mediante botones.

¿Qué es la cera?

Wax para iPhone es un framework diseñado para combinar el lenguaje de scripting Lua con la interfaz de programación de aplicaciones (API) nativa Objective-C. Esto significa que puede utilizar todas y cada una de las clases y marcos de Objective-C en Lua.

Técnicamente, Wax combina clases Objective-C con código C nativo. El lenguaje Lua está integrado en el lenguaje C y luego se integran las clases Objective-C.

¿Por qué utilizar cera?

Wax es gratuito y de código abierto. A diferencia de otras soluciones de desarrollo móvil basadas en Lua, Wax es un marco de código abierto que requiere un poco de tiempo para comenzar y no cuesta nada. ¿No te gusta la forma en que funciona Wax o encuentras un defecto en la implementación? El código fuente es gratuito y puedes cambiarlo en cualquier momento para adaptarlo a tus necesidades.

Puedes utilizar la API nativa. Esto significa que las clases escritas para Teaching Objective-C se pueden cambiar y escribir fácilmente en Lua para Wax. Esto también significa que su aplicación siempre se verá y se sentirá como una aplicación nativa, pero con la ventaja de ahorrar tiempo al escribir su código en Lua, un lenguaje de programación eficiente.

Se puede utilizar Xcode. Esto significa que la implementación del simulador y del dispositivo es fácil y no se romperá fácilmente con futuras versiones de iOS.

Puedes utilizar todas las bibliotecas Objective-C existentes. Si tiene una clase Objective-C escrita anteriormente, puede usarla en Lua sin cambiarla; simplemente colóquela en Xcode. Lo mismo ocurre con bibliotecas como Three20. Simplemente agregue bibliotecas de acuerdo con las instrucciones normales y podrá acceder a ellas usando el código Lua.

Se puede utilizar el módulo Wax Lua. Wax tiene varios módulos Lua integrados, que hacen que las solicitudes HTTP asíncronas y la creación/análisis de anotaciones de objetos JavaScript (JSON) sean muy fáciles y rápidas (ya que estos módulos están escritos en C).

No es necesario gestionar la memoria. Ya no tendrás que preocuparte por la asignación de memoria y otros asuntos. La cera se encarga de todo por ti.

Los tipos Lua se convierten automáticamente a los tipos Objective-C correspondientes y viceversa. Esto significa que si llama a un método que espera un NSString y un NSInteger, pero pasa una cadena Lua y un entero Lua, Wax hará la conversión por usted. Esta transformación es tan poderosa que puede manejar incluso funciones complejas de Objective-C, como los selectores.

Puedes aprovechar todas las funciones anteriores. No es necesario ser selectivo. ¡Obtienes todas las funciones!

#p#subtitle#e#

¡Vale, genial! ¿Cómo instalo cera?

Primero necesitas Xcode y iPhone SDK. Si no tienes uno de estos, ¡compra uno ahora!

Crear un proyecto usando Xcode

Comencemos creando un nuevo "proyecto basado en Windows" llamado "WaxApplication". No olvides configurar tu dispositivo en iPhone:

Navega a través del Finder hasta la carpeta donde guardaste tu proyecto. Crea tres carpetas nuevas: cera, guiones y clases.

Su carpeta debería verse así:

Solid Wax (Parte 1, Procesamiento de archivos)

Primero, descargue el archivo zip del código fuente. Wax está alojado en GitHub, por lo que el código fuente es fácil de descargar. Descargue el paquete zip desde aquí.

Ahora, descomprime el archivo que acabas de descargar. Busque la carpeta que acaba de descomprimir. Tendría un nombre como "Probablemente Corey-Wax-124Ca46".

Tu pantalla ahora debería verse así:

Ahora, haz lo siguiente:

◆Copia las carpetas lib y bin y pégalas en la carpeta Wax. en la carpeta del proyecto WaxApplication.

◆Copie xcode-template/classes/protocol loader.h a la carpeta del proyecto WaxApplication.

◆ Copie la carpeta xcode-template/scripts/ y colóquela en la carpeta del proyecto WaxApplication.

◆Abra la carpeta cera/lib/extensions/ en la carpeta del proyecto WaxApplication. Elimine las carpetas SQLite y xml como se muestra a continuación:

Su pantalla debería verse así:

Solid Wax (Parte 2, Proyecto de configuración)

Ahora use Finder para seleccionar las clases, scripts y carpetas de cera y arrastrarlos al proyecto Xcode. Colóquelos debajo de la columna que dice "Aplicación Wax" y "1 destino, iOS SDK X.X". No seleccione la casilla de verificación que dice "Copiar elementos a la carpeta del grupo de destino (si es necesario)". Haga clic en Finalizar.

Ahora haz clic en la barra que dice "Wax App" y "1 Target, iOS SDK 4.3". Luego sigue los siguientes pasos:

◆En el panel derecho, busca el título "Objetivos" y haz clic en "Aplicación de cera". Haga clic en la pestaña Fases de compilación. Haga clic en "Copiar recursos del paquete" para borrar todos los archivos lua.

◆En la esquina inferior derecha, primero haga clic en "Agregar fase de compilación" y luego haga clic en "Agregar secuencia de comandos de ejecución".

◆Establezca el shell en /bin/zsh.

◆Establezca el área de texto debajo del shell en "$ project _ dir/wax/lib/build-scripts/copy-scripts . sh".

Su pantalla ahora se verá así:

Reemplace la fuente de alimentación principal

En el panel izquierdo, abra la carpeta llamada WaxApplication. A continuación, abra la carpeta Archivos de soporte. Luego, abra main.m y cambie el contenido del archivo a lo siguiente:

//¡Aquí es donde ocurre la magia! //Wax no utiliza archivos nib para cargar la vista principal.

Todo se hace en el archivo AppDelegate.lua # importuikit/ui kit .h # import "wax . h" # import "wax _ http . h" # import "wax _ JSON . h" # import "wax _ file system . h "int main(int argc, char * argv []) { nsautorelaesepool * pool = [[nsautorelaesepoolalloc] init]; Wax_start ("delegado de aplicación. Lua", luaopen_wax_http, luaopen_wax_json, luaopen_wax_filesystem, nil); intretVal = UIApplicationMain(argc, argv , nil, @"app delegado"); [lanzamiento del grupo]; returnretVal}

¡No olvides guardar el archivo!

Eliminar archivos innecesarios

Eliminar tres archivos: MainWindow.xib, WaxApplicationAppDelegate.h y Waxapplicationappdelegate.m Abra "wax application/supporting files/wax Alliance-info.plist" y luego elimine la línea cuya clave es "nombre base del archivo principal".

#p#subtitle#e#

Pruebe la cera instalada.

Presiona (Comando+Entrar) o presiona "Ejecutar" en la esquina superior izquierda para ejecutar la aplicación en el emulador. Si todo va bien, verás una sencilla aplicación que dice "¡Hola Lua!".

Si no ves este mensaje, revisa los pasos anteriores para ver si falta alguno.

Ver Lua

Expande la carpeta de scripts y abre AppDelegate.lua. Verás el código lua que ejecuta la aplicación.

Lo primero que notarás es que no hay resaltado de sintaxis. Desafortunadamente, todavía no he encontrado una solución estable para el problema de resaltado de sintaxis de Lua en Xcode (si hay una, ¡deje un mensaje y hágamelo saber!).

A continuación podrás observar que no hay corchetes, pero se utilizan clases como UIScreen y UIWindow. Esto se debe a que estás usando Lua para construir la clase AppDelegate de acuerdo con Apple y el código de Apple, ¡estás usando Objective-C y construyendo la clase Objective-C!

Nombre del método

También puede notar el extraño nombre del método "color con rojo _ verde _ azul _ alfa azul _ alfa". Si está familiarizado con Objective-C, sabrá que los nombres de los métodos pueden tener dos puntos. Los nombres de funciones en Lua no pueden tener dos puntos. Para compensar esta diferencia, todos los lugares que separan los nombres de los métodos en Objective-C están subrayados en Lua. Por ejemplo:

El color con red:green:blue:alpha blue:alpha en Objective-C corresponde al color con red _ green _ blue _ alpha blue _ alpha en Lua.

selectrowattindexpath:animated:la posición de desplazamiento en Objective-C corresponde a la posición selectrowattindexpath_animated_scroll en Lua.

Modelo orientado a objetos

Otro problema de Lua es que no tiene un sistema de herencia como Objective-C. No hay clases en Lua. Para superar este problema, Wax destaca una función colocada delante de cada archivo Wax Lua: WaxClass. En el AppDelegate.lua predeterminado, la línea se ve así:

wax class {"app delegado", protocolos = {"UIApplicationDelegate"} }

Si desea crearlo mediante Lua Para una clase Objective-C, debes usar la función cera clase {"nombre de clase", "clase_padre"}. Todas las funciones posteriores que agregue al archivo Lua (en el mismo archivo) se agregarán automáticamente como métodos de instancia a la nueva clase.

Esta línea de AppDelegate.lua muestra que también puedes definir qué protocolos define tu "clase".

Aunque WaxClass resuelve el problema de definir clases que Objective-C puede usar, todavía hay un problema: debido a que Lua no tiene clases, no tiene una variable "propia" dinámica como Objective-C. Para superar este problema, Wax convierte automáticamente la primera variable de cada método en la instancia actual de la clase. Puede encontrar que cuando observa "applicationdidinfinishlaunching" en AppDelegate.lua, la primera variable es la variable "de", aunque la versión Objective-C del método solo tiene 1 variable. Sin embargo, sería muy molesto si tuvieras que enviar la instancia actual de la clase como la primera variable en cada método, por lo que agregarías algo de azúcar sintáctico. En lugar de utilizar el operador "." al realizar llamadas de "método" en Lua, utilice el operador ":":

local view = ui view.initwithframe(CGRect(0, 0, 100, 100))

-Lo siguiente es exactamente lo mismo

Ver: Agregar vista de subvista (someView)

Otro aspecto importante que vale la pena mencionar es que Wax no es compatible con Objective-C. propiedades. Wax obliga a Lua y Objective-C a tocar solo métodos.

-Eso no funcionará.

someView.frame

: en su lugar, debe utilizar métodos getter/setter.

view:frame()some view:setframe(someframe)

Variable solo para Lua.

Puede utilizar el operador de punto para crear variables miembro para cualquier objeto Objective-C. A diferencia del operador dos puntos: (usado para llamar a métodos en clases/instancias de Objective-C), punto. El operador puede crear dinámicamente variables miembro para el lado Lua del objeto (el lado Objective-C del objeto no sabe nada sobre estas variables). Las variables miembro se pueden utilizar durante toda la vida del objeto.

Salida a la consola

AppDelegate.lua también muestra cómo escribir texto de depuración y enviarlo a la consola. Puedes utilizar la función "pone".

Gestión de la Memoria

Como dije antes, con Lua no necesitas asignar, reservar y liberar memoria para nada. No es necesario llamar a la asignación de memoria antes de llamar a ningún inicializador. De hecho, si hace esto, su programa puede perder memoria.

¡Bien hecho! ¿Qué sigue?

¡Has profundizado en los conceptos básicos de Lua específicamente para Wax y estás listo para escribir aplicaciones para iPhone!

En la segunda parte de este tutorial, escribiremos una aplicación de muestra de Twitter con un botón de actualización en unas pocas líneas de código Lua.

Después de leer este tutorial, ¿confías en crear tus propios Angry Birds?

Consejos

El lenguaje de programación Lua es un lenguaje de scripting sencillo, ligero y extensible. Lua se pronuncia /'Lua/ (Lu Ah) y significa "Luna" (luna) en portugués.

Lua es un lenguaje ligero, y su versión oficial sólo incluye un núcleo simplificado y las bibliotecas más básicas. Esto hace que Lua sea pequeño y rápido para comenzar. Está escrito en lenguaje C estándar y está abierto como código fuente. Sólo ocupa más de 100K después de la compilación, por lo que se puede integrar fácilmente en otros programas. A diferencia de muchos lenguajes "grandes y completos", las comunicaciones de red y las interfaces gráficas no se proporcionan de forma predeterminada. Pero Lua se puede ampliar fácilmente: estas funciones las proporciona el lenguaje anfitrión (normalmente C o C++), y Lua puede utilizarlas como funciones integradas. De hecho, hay muchos módulos de extensión maduros disponibles.

El objetivo de Lua es convertirse en un lenguaje que pueda integrarse fácilmente en otros lenguajes. La mayoría de los programadores coinciden en que hace exactamente eso.

Muchas aplicaciones utilizan Lua como su propio lenguaje de script integrado para lograr configurabilidad y extensibilidad. Estos incluyen "Odyssey II", "Ragnarok", "World of Warcraft", "Warhammer 40k", "Baldur's Gate", "Xuanyuan Sword", etc. El más famoso en móviles es Angry Birds.

#p#subtitle#e#