code flow - cocoaheads paris
Post on 30-Jul-2015
1.009 Views
Preview:
TRANSCRIPT
CODEFLOWLive app development for iOS
C O C O A H E A D S PA R I S11 juin 2015
Jean-Luc Jumpertz @JLJump créateur de celedev @celedev www.celedev.com
DXDeveloper Experience
?
CodeFlowEnv. de développement interactif d’apps iOS
CodeFlow Mac App
Target iOS App
CIM Context Monitor
CIM Lua
Context
Exécution du code Lua Interface avec iOS Gestion du live-coding …
Le code dynamique est écrit en Lua.
Lua est un langage dynamique très simple, puissant, et flexible.
Interface de CodeFlow pour contrôler le Lua Context
CodeFlowEnv. de développement interactif d’apps iOS
CodeFlow Mac App
Target iOS App
CIM Context Monitor
CIM Lua
Context
Exécution du code Lua Interface avec iOS Gestion du live-coding …
Dans l’App, il suffit d’ajouter 3 lignes de code :
_luaContext = [[CIMLuaContext alloc] initWithName:@"Stocks"]; _luaContextMonitor = [[CIMLuaContextMonitor alloc] initWithLuaContext:_luaContext
connectionTimeout:10]; [_luaContext loadLuaModuleNamed:@"StockViewController"];
CodeFlowEnv. de développement interactif d’apps iOS
CodeFlow Mac App
Target iOS App
CIM Context Monitor
CIM Lua
Context
Démo 1 : live coding Ce qu’on a vu : • les modifications du code source se propagent immédiatement dans l’application • du simple ajustage de paramètres à l’ajout / suppression de méthodes dans une classe • live coding en multi-devices : test simultané dans différentes configurations • simplicité de connection d’un device à CodeFlow
Interface Lua Objective-C• Accès transparent depuis Lua à toutes les classes Objective-C
• référence à une classe ObjC via la variable globale objc : local UIColor = objc.UIColor
• création d’une instancelocal label = objc.UILabel:newWithFrame(contentView.bounds)
• appel de méthodescontentView:addSubview(label) isOk, modifDate, error = url:getResourceValue_forKey_error(NsURL.ContentModificationDateKey)
• utilisation de propriété : label.backgroundColor = UIColor.clearColor • subclassing et extension des classes ObjC en Lua
local LabelCell = class.createClass ("LabelCell", objc.UICollectionViewCell) local ViewController = class.extendClass (objc.ViewController)
• Dans l’autre sens, le code natif appelle aussi de manière transparente votre code Lua • méthodes surchargées en Lua, action methods, méthodes de protocoles ObjC, • paramètres blocks des méthodes ObjC (à qui on passe des fonctions Lua)
local words = {}local wordsCount = 0 text:enumerateSubstringsInRange_options_usingBlock (fullRange, NsString.EnumerationOptions.ByWords, function(word) wordsCount = wordsCount + 1 words[wordsCount] = word end)
Interface Lua Objective-C• Les structs C sont vues comme des pseudo-objets (comme en Swift :)
local rect1 = struct.CGRect(0, 0, 200, 400)local point2 = struct.CGPoint {x = 150.0, y = 80.0}deltaX = point2.x - rect1:getMidX()
• Les autres entités C (enums, variables et fonctions globales, …) sont exposés à travers des modules Lualocal NsString = require "Foundation.NSString"-- ...someString:enumerateSubstringsInRange_options_usingBlock (fullRange, NsString.EnumerationOptions.ByWords,...)
• Les libraries de Bindings • Ce sont des packages qui exposent les APIs natives au code Lua • Bindings SDK exposent les APIs d'une version de SDK iOS (ou OS X) • Bindings Projet exposent les APIs de votre projet Xcode
• créés en associant un projet Xcode au projet CodeFlow • configurables et mis à jour automatiquement en cas de changement
dans les fichiers header du projet Xcode (live bindings !)
Live Resources
• Un projet CodeFlow = modules Lua + ressources : images, textes, … • Une ressource peut être éditée dans toute application Mac (éditeur externe) • Lorsque l’éditeur externe enregistre les modifications, CodeFlow propage
immédiatement celles-ci vers l’application cible. • Côté application cible, on utilise la fonction getResource pour créer une live resource
au lieu de : imageView.image = [UIImage imageNamed:@"carrot"];on écrit : getResource("carrot", "public.image", imageView, "image")
Code Flow
Editeurs externes
Target App
Parce qu'il n'y a pas que le code dans la vie ...
Live Resources
• Demo On a vu : • La mise à jour instantanée de ressources images dans l'app, en utilisant un éditeur
externe, ou par glisser-déposer • L'utilisation de fichier nib dynamiques dans une application
• Pas de limitation sur les types de ressources supportés • Une API dans CIMLua permet d'ajouter vos propres types si besoin
Code Flow
Editeurs externes
Target App
Parce qu'il n'y a pas que le code dans la vie ...
En guise de conclusion• CodeFlow, c'est aussi …
• La configuration automatique du projet Xcode de l'app • Un debugger complet, et son interpréteur de commandes
associé • La gestion de l'historique de vos modifications • ...
• Status courant / Roadmap • CodeFlow est actuellement en beta publique • Prochaines étapes
• Support du développement live d'apps OS X • Corrections des bugs restants • Lancement commercial !
MERCI !Des questions ?
Jean-Luc Jumpertz @JLJump celedev @celedev www.celedev.com
Participez à la beta ! 😃 Téléchargez CodeFlow : www.celedev.com/en/support/#downloads Vos retours seront les bienvenus !
top related