SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
CODEFLOW
Live app development for iOS
C O C O A H E A D S PA R I S
11 juin 2015
Jean-Luc Jumpertz @JLJump
créateur de celedev @celedevwww.celedev.com
DXDeveloper Experience
?
CodeFlow
Env. 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
CodeFlow
Env. 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"];
CodeFlow
Env. 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 instance

local label = objc.UILabel:newWithFrame(contentView.bounds)
• appel de méthodes

contentView: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 Lua

local 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 @celedevwww.celedev.com
Participez à la beta ! 😃
Téléchargez CodeFlow : www.celedev.com/en/support/#downloads
Vos retours seront les bienvenus !

Weitere ähnliche Inhalte

Was ist angesagt?

CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeadsRNS
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentationCocoaHeads France
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads France
 
Transition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsTransition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsCocoaHeads France
 
5 android web_service
5 android web_service5 android web_service
5 android web_serviceSaber LAJILI
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOSCocoaHeads France
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeadsRNS
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_threadSaber LAJILI
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureCocoaHeads France
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads France
 
Ionic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,SassIonic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,Sassmarwa baich
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelCocoaHeads France
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2Samy Dindane
 

Was ist angesagt? (20)

CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentation
 
Test flight
Test flightTest flight
Test flight
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - Epitez
 
3D Touch
3D Touch3D Touch
3D Touch
 
Transition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsTransition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers Storyboards
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
5 android web_service
5 android web_service5 android web_service
5 android web_service
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOS
 
Xcode 4.5
Xcode 4.5Xcode 4.5
Xcode 4.5
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume Faure
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Ionic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,SassIonic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,Sass
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter Meuel
 
Présentation Angular 2
Présentation Angular 2 Présentation Angular 2
Présentation Angular 2
 
Développement web mobile avec IONIC 2
Développement web mobile avec IONIC 2Développement web mobile avec IONIC 2
Développement web mobile avec IONIC 2
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2
 

Andere mochten auch

Talk KVO with rac by Philippe Converset
Talk KVO with rac by Philippe ConversetTalk KVO with rac by Philippe Converset
Talk KVO with rac by Philippe ConversetCocoaHeads France
 
Collection pipeline par Mathieu Godart
Collection pipeline par  Mathieu GodartCollection pipeline par  Mathieu Godart
Collection pipeline par Mathieu GodartCocoaHeads France
 
App Transport Security by Nicolas lauquin
App Transport Security by Nicolas lauquinApp Transport Security by Nicolas lauquin
App Transport Security by Nicolas lauquinCocoaHeads France
 
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeatureBlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeatureCocoaHeads France
 
NSLogger network logging extension
NSLogger network logging extensionNSLogger network logging extension
NSLogger network logging extensionCocoaHeads France
 
Swift Sequences & Collections
Swift Sequences & CollectionsSwift Sequences & Collections
Swift Sequences & CollectionsCocoaHeads France
 
Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...
Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...
Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...CocoaHeads France
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPodsCocoaHeads France
 

Andere mochten auch (20)

Couverture de code
Couverture de codeCouverture de code
Couverture de code
 
Mach-O par Stéphane Sudre
Mach-O par Stéphane SudreMach-O par Stéphane Sudre
Mach-O par Stéphane Sudre
 
Revue des annonces WWDC2015
Revue des annonces WWDC2015Revue des annonces WWDC2015
Revue des annonces WWDC2015
 
Talk KVO with rac by Philippe Converset
Talk KVO with rac by Philippe ConversetTalk KVO with rac by Philippe Converset
Talk KVO with rac by Philippe Converset
 
Collection pipeline par Mathieu Godart
Collection pipeline par  Mathieu GodartCollection pipeline par  Mathieu Godart
Collection pipeline par Mathieu Godart
 
POI clusturing
POI clusturingPOI clusturing
POI clusturing
 
App Transport Security by Nicolas lauquin
App Transport Security by Nicolas lauquinApp Transport Security by Nicolas lauquin
App Transport Security by Nicolas lauquin
 
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeatureBlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
 
App-resizer Library
App-resizer LibraryApp-resizer Library
App-resizer Library
 
Conférence DotSwift 2016
Conférence DotSwift 2016Conférence DotSwift 2016
Conférence DotSwift 2016
 
NSLogger network logging extension
NSLogger network logging extensionNSLogger network logging extension
NSLogger network logging extension
 
Mastering Interface Builder
Mastering Interface BuilderMastering Interface Builder
Mastering Interface Builder
 
Swift Sequences & Collections
Swift Sequences & CollectionsSwift Sequences & Collections
Swift Sequences & Collections
 
Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...
Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...
Genius scan - Du boostrap à 20 millions d’utilisateurs, techniques et outils ...
 
Découverte de HomeKit
Découverte de HomeKitDécouverte de HomeKit
Découverte de HomeKit
 
Swift open source
Swift open sourceSwift open source
Swift open source
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
Apple Search Optimization
Apple Search OptimizationApple Search Optimization
Apple Search Optimization
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 

Ähnlich wie Code flow - Cocoaheads paris

Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Fred Brunel
 
Exemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labviewExemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labviewLuc Desruelle
 
Exemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labviewExemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labviewLuc Desruelle
 
Exemple code oop_labview
Exemple code oop_labviewExemple code oop_labview
Exemple code oop_labviewLuc Desruelle
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Introduction au développement Android
Introduction au développement AndroidIntroduction au développement Android
Introduction au développement AndroidSteve Tremblay
 
1-supportpoojavapremirepartie-140408132307-phpapp01.pptx
1-supportpoojavapremirepartie-140408132307-phpapp01.pptx1-supportpoojavapremirepartie-140408132307-phpapp01.pptx
1-supportpoojavapremirepartie-140408132307-phpapp01.pptxRihabBENLAMINE
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxThomasParaiso1
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Laurent BUNIET
 

Ähnlich wie Code flow - Cocoaheads paris (20)

Native script
Native scriptNative script
Native script
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)
 
Windev
WindevWindev
Windev
 
Exemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labviewExemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labview
 
Exemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labviewExemple de-code-oop-avec-labview
Exemple de-code-oop-avec-labview
 
Exemple code oop_labview
Exemple code oop_labviewExemple code oop_labview
Exemple code oop_labview
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
Développement Sous Android
Développement Sous AndroidDéveloppement Sous Android
Développement Sous Android
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
Chapitre 1
Chapitre 1Chapitre 1
Chapitre 1
 
Introduction au développement Android
Introduction au développement AndroidIntroduction au développement Android
Introduction au développement Android
 
1-supportpoojavapremirepartie-140408132307-phpapp01.pptx
1-supportpoojavapremirepartie-140408132307-phpapp01.pptx1-supportpoojavapremirepartie-140408132307-phpapp01.pptx
1-supportpoojavapremirepartie-140408132307-phpapp01.pptx
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptx
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
 

Mehr von CocoaHeads France

Mehr von CocoaHeads France (20)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Asynchronous swift
Asynchronous swiftAsynchronous swift
Asynchronous swift
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
BitTorrent on iOS
BitTorrent on iOSBitTorrent on iOS
BitTorrent on iOS
 
CloudKit as a backend
CloudKit as a backendCloudKit as a backend
CloudKit as a backend
 

Code flow - Cocoaheads paris

  • 1. CODEFLOW Live app development for iOS C O C O A H E A D S PA R I S 11 juin 2015 Jean-Luc Jumpertz @JLJump créateur de celedev @celedevwww.celedev.com
  • 3. CodeFlow Env. 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
  • 4. CodeFlow Env. 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"];
  • 5. CodeFlow Env. 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
  • 6. 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 instance
 local label = objc.UILabel:newWithFrame(contentView.bounds) • appel de méthodes
 contentView: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)
  • 7. 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 Lua
 local 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 !)
  • 8. 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 ...
  • 9. 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 ...
  • 10. 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 !
  • 11. MERCI ! Des questions ? Jean-Luc Jumpertz @JLJump celedev @celedevwww.celedev.com Participez à la beta ! 😃 Téléchargez CodeFlow : www.celedev.com/en/support/#downloads Vos retours seront les bienvenus !