L'idée derrière le framework Wax est simple: tout ce que Objective-C peut faire, Lua le peut aussi! Il existe de nombreuses bonnes raisons d’envisager de créer des applications iPhone natives avec un langage de script simple et efficace comme Lua. Cette série de didacticiels abordera les avantages offerts par Wax tout en montrant les étapes pratiques nécessaires pour intégrer Lua à Xcode 4 et iOS. SDK.
Wax for iPhone est un framework écrit de manière à rapprocher le langage de script Lua et les API natives Objective-C. Cela signifie que vous pouvez utiliser toutes les classes et tous les frameworks Objective-C à partir de Lua..
En termes techniques, Wax est une combinaison de classes Objective-C et de code C natif. Le langage Lua est intégré au C, puis les classes Objective-C sont fusionnées dans le mix.
La cire est libre et open-source. Contrairement à d'autres solutions de développement mobile basées sur Lua, Wax est un framework open source qui ne nécessite que vous investissez un peu de temps pour travailler, pas d'argent. Vous n'aimez pas le fonctionnement de Wax ou ne trouvez pas de bogue dans la mise en œuvre? Le code source est disponible gratuitement et vous pouvez toujours le modifier pour répondre à vos besoins..
Vous pouvez tirer parti des API natives. Cela signifie que les tutoriels écrits pour enseigner à Objective-C peuvent être facilement adaptés et écrits avec Lua for Wax. Cela signifie également que votre application aura toujours l'air native et se sentira toujours, mais vous aurez toujours l'avantage d'économiser du temps d'écrire votre code dans Lua, un langage de script efficace.
Vous arrivez à utiliser Xcode. Cela signifie que le déploiement du simulateur et du périphérique est un jeu d'enfant et ne devrait pas casser facilement avec une future version iOS.
Vous arrivez à exploiter toutes les bibliothèques existantes Objective-C. Si vous avez déjà écrit une classe Objective-C, vous pouvez l'utiliser dans Lua - sans aucune adaptation - vous la lancez simplement dans Xcode. Même chose pour les bibliothèques comme Three20. Ajoutez-les simplement selon les instructions habituelles et vous y aurez accès dans votre code Lua.
Vous arrivez à tirer parti des modules Wax Lua. Wax a quelques modules Lua intégrés qui rendent les requêtes HTTP asynchrones et la création / analyse JSON incroyablement facile et rapide (car les modules sont écrits en C)..
Vous ne pas avoir à gérer la mémoire. Plus d'allocation de mémoire, etc. Wax gère tout cela pour vous.
Les types Lua sont automatiquement convertis en équivalents Objective-C et inversement. Cela signifie que lorsque vous appelez une méthode nécessitant une chaîne NSString et une entité NSInteger, mais que vous transmettez une chaîne Lua et un entier Lua, Wax s'en charge pour vous. Cette conversion est même assez puissante pour gérer des fonctionnalités complexes d'Objective-C telles que les sélecteurs.
Vous arrivez à tirer parti de TOUT ce qui précède. Pas besoin de choisir. Vous obtenez tout!
Eh bien, vous avez d’abord besoin de Xcode et du SDK pour iPhone. Si vous ne les avez pas encore, allez les chercher!
Commençons par créer un "projet basé sur Window" appelé "WaxApplication". N'oubliez pas de configurer l'appareil sur iPhone:
Accédez au dossier dans lequel vous avez enregistré ce projet dans le Finder. Créez trois nouveaux dossiers: wax, scripts et classes. Votre dossier devrait ressembler à ceci:
Commencez par télécharger un zip du code source. Wax est hébergé sur GitHub, ce qui facilite le téléchargement du code source. Téléchargez le zip d'ici.
Maintenant, décompressez le fichier nouvellement téléchargé. Accédez au dossier nouvellement extrait. On l'appellera quelque chose comme "Probablementcorey-wax-124ca46".
Votre écran devrait maintenant ressembler à ceci:
Maintenant, effectuez les actions suivantes:
Votre écran devrait ressembler à ceci:
Sélectionnez maintenant les classes, les scripts et les dossiers wax dans le Finder et faites-les glisser dans le projet Xcode. Déposez-les sous la barre indiquant «Application de cire» et «1 cible, iOS SDK X.X». Décochez la case "Copier les éléments dans le dossier du groupe de destination (si nécessaire)". Cliquez sur Terminer.
Cliquez maintenant sur la barre indiquant "Application de cire" et "1 cible, iOS SDK 4.3". Maintenant, suivez les étapes suivantes:
Votre écran devrait maintenant ressembler à ceci:
Dans le volet de gauche, ouvrez le dossier appelé "WaxApplication". Ensuite, ouvrez le dossier "Fichiers de support". Ensuite, ouvrez main.m et remplacez le contenu du fichier par ceci:
// C'est là que la magie opère! // Wax n'utilise pas de nibs pour charger la vue principale, tout est fait dans le fichier // AppDelegate.lua #import#import "wax.h" #import "wax_http.h" #import "wax_json.h" #import "wax_filesystem.h" int main (int argc, char * argv []) NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; wax_start ("AppDelegate.lua", luaopen_wax_http, luaopen_wax_json, luaopen_wax_filesystem, nil); int retVal = UIApplicationMain (argc, argv, nil, @ "AppDelegate"); [libération de la piscine]; retour retour;
N'oubliez pas de sauvegarder le fichier!
Supprimez les fichiers MainWindow.xib, WaxApplicationAppDelegate.h et WaxApplicationAppDelegate.m. Ouvrez "WaxApplication / Supporting Files / WaxPallication-Info.plist", puis supprimez la ligne contenant la clé "Nom de base du fichier de nib principal"..
Presse ?? (Commande + Entrée) ou appuyez sur? Exécuter? dans le coin supérieur gauche pour exécuter l'application dans le simulateur. Si tout a fonctionné, vous verrez une application simple qui dit "Bonjour Lua!".
Si vous ne voyez pas ce message, passez en revue les étapes précédentes et voyez si vous avez manqué une étape..
Développez la collection Scripts et ouvrez AppDelegate.lua. Vous voyez maintenant le code Lua qui alimente cette application.
La première chose que vous remarquerez probablement est qu’il n’ya pas de mise en évidence de la syntaxe. Malheureusement, je n'ai pas trouvé de solution stable pour la coloration syntaxique Lua dans Xcode (mais si vous en trouvez une, postez-la dans les commentaires!).
La deuxième chose que vous remarquerez probablement est qu’il n’ya pas de crochets, mais des classes telles que UIScreen et UIWindow sont utilisées. En effet, vous créez une classe AppDelegate dans Lua et, autant que le code Apple le permet, vous utilisez Objective-C et créez des classes Objective-C.!
Vous remarquerez peut-être aussi le nom de méthode impair "colorWithRed_green_blue_alpha". Si vous connaissez Objective-C, vous saurez que le nom des méthodes peut avoir des deux points. Vous ne pouvez pas avoir de deux points dans les noms de fonctions dans Lua. Pour compenser cette différence, un nom de méthode est décomposé en Objective-C à tout endroit, avec un trait de soulignement dans Lua. Par exemple:
Un autre problème avec Lua est qu’il n’a pas de système d’héritage comme Objective-C. Il n'y a pas de cours du tout à Lua. Pour contourner ce problème, Wax expose une fonction située au sommet de chaque fichier Wax Lua: waxClass. Dans AppDelegate.lua par défaut, la ligne ressemble à ceci:
waxClass "AppDelegate", protocoles = "UIApplicationDelegate"
Pour créer une classe Objective-C à partir de Lua, la fonction waxClass "CLASS NAME", "PARENT_CLASS" est utilisée. Toutes les fonctions suivantes (dans le même fichier) que vous ajoutez à ce fichier Lua seront automatiquement ajoutées à votre nouvelle classe en tant que méthodes d'instance.
Comme le montre la ligne de AppDelegate.lua, vous pouvez également définir les protocoles définis par votre "classe"..
Bien que waxClass résolve le problème de la définition des classes pour une utilisation par Objective-C, il reste le problème suivant: étant donné que Lua n’a pas de classes, il n’a pas de variable dynamique "self" comme Objective-C. Pour contourner ce problème, Wax transforme automatiquement le premier argument de chaque méthode en instance courante de la classe. Vous pouvez voir que lorsque vous regardez "applicationDidFinishLaunching" dans AppDelegate.lua, le premier argument est "self", bien que la version Objective-C de cette méthode ne comporte qu'un seul argument. Cependant, il serait très ennuyeux de devoir passer l'instance actuelle de la classe comme premier argument de chaque méthode, un sucre syntaxique a donc été ajouté. Au lieu de faire un "méthode", appelez Lua en utilisant le "." opérateur, l'opérateur "deux points" est utilisé:
vue locale = UIView.initWithFrame (CGRect (0, 0, 100, 100)), les éléments suivants sont exactement la même vue: addSubview (someView) view.addSubview (view, someView)
Une autre chose importante à noter est que Wax ne prend pas en charge les propriétés de Objective-C. La cire oblige Lua et Objective-C à ne communiquer qu'avec des méthodes.
-- Cela ne fonctionnera pas. someView.frame - Vous souhaitez utiliser les méthodes getter / setter à la place de someView: frame () someView: setFrame (someFrame)
Vous pouvez créer dynamiquement des variables de membre pour tout objet Objective-C en utilisant le point. opérateur. Contrairement aux deux points: opérateur (utilisé pour appeler des méthodes sur une classe / instance Objective-C), le point. L'opérateur crée dynamiquement des variables de membre du côté Lua de l'objet (le côté Objective-C de l'objet n'a pas connaissance de ces variables). Les variables membres sont disponibles tout au long de la vie de l'objet.
AppDelegate.lua montre également comment vous pouvez écrire du texte de débogage sur la console. Vous utilisez la fonction "met".
Si vous vous en souvenez, j'ai promis que vous n'auriez jamais à affecter, conserver et libérer avec Lua. Vous n'avez jamais besoin d'appeler alloc avant d'appeler l'un des initialiseurs. En fait, si vous le faites, votre programme sera probablement une fuite de mémoire.
Maintenant que vous maîtrisez parfaitement les bases de Lua, vous êtes prêt à écrire une application iPhone.!
Dans la deuxième partie de ce didacticiel, nous allons créer un exemple d’application Twitter avec un bouton de rafraîchissement en utilisant seulement quelques lignes de Lua..