Code flow - Cocoaheads paris

Post on 30-Jul-2015

1008 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

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