code flow - cocoaheads paris
TRANSCRIPT
![Page 1: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/1.jpg)
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
![Page 2: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/2.jpg)
DXDeveloper Experience
?
![Page 3: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/3.jpg)
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
![Page 4: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/4.jpg)
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"];
![Page 5: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/5.jpg)
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
![Page 6: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/6.jpg)
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)
![Page 7: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/7.jpg)
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 !)
![Page 8: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/8.jpg)
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 ...
![Page 9: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/9.jpg)
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 ...
![Page 10: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/10.jpg)
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 !
![Page 11: Code flow - Cocoaheads paris](https://reader034.vdocuments.site/reader034/viewer/2022052223/55b9b0bcbb61ebee578b4742/html5/thumbnails/11.jpg)
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 !