11
CODEFLOW Live app development for iOS COCOAHEADS PARIS 11 juin 2015 Jean-Luc Jumpertz @JLJump créateur de celedev @celedev www.celedev.com

Code flow - Cocoaheads paris

Embed Size (px)

Citation preview

Page 1: Code flow - Cocoaheads paris

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

DXDeveloper Experience

?

Page 3: Code flow - Cocoaheads paris

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

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

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

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

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

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

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

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

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 !