SlideShare une entreprise Scribd logo
celedev

Programmation Responsive
Une nouvelle façon de développer pour iOS

CocoaHeads Rennes #14
Jean-Luc Jumpertz
Octobre 2013

www.celedev.com
celedev

Évolution des apps iOS

2008
celedev

Évolution des apps iOS
• Des appareils mobiles de plus en plus
puissants, avec des écrans plus grands
• un OS de plus en plus riche et sophistiqué,
• un SDK de plus en plus vaste
celedev

Évolution des apps iOS
• Des appareils mobiles de plus en plus
puissants, avec des écrans plus grands
• un OS de plus en plus riche et sophistiqué,
• un SDK de plus en plus vaste
Cor
e

ut
o

o

ut
A

ay
L

t
ame Ki

G

Anim

Tex
tK

it

atio

n
Spr

Kit
ite

ics
nam
y

U

it D
IK
celedev

Évolution des apps iOS
• Des appareils mobiles de plus en plus
puissants, avec des écrans plus grands
• un OS de plus en plus riche et sophistiqué,
• un SDK de plus en plus vaste
2013

▶ une meilleure expérience
utilisateur (UX)

▶ des Apps plus complexes
▶ des développements plus longs

2013
• Xcode est incontournable sur iOS / OS X

• un excellent et très puissant IDE
• mais son cycle de compilation / exécution reste
traditionnel
1. Edit
2. Build
3. Load
7. Debug

celedev

Outils de développement

4. Run
5. Setup
6. Test
celedev

La vision de celedev

• La Programmation Responsive

• interactivité maximale entre le développeur
et son application

• bien plus que du live coding

1. Edit
3. Debug
2. Test
celedev

La vision de celedev

• La Programmation Responsive

• interactivité maximale entre le développeur

1. Edit
3. Debug

et son application

• bien plus que du live coding
• Développer des apps iOS en mode responsive
présente de multiples avantages

• rapidité de prototypage et de mise au point
• libère la créativité à travers l’expérimentation
• bien adaptée à la réalisation d’UX complexes

2. Test
celedev

Fonctionnalités

• interactivité poussée entre l’IDE et l’application cible
• tous les éléments constituant l’application peuvent être mis à
jour dynamiquement : code, mais aussi les ressources
images, textes, …
• simplicité d’utilisation
• simplicité des APIs et performance de l’implémentation
• accès complet au SDK iOS
• connexion facile aux devices
• conçu pour s’intégrer très facilement avec le code C /
Objective C et Xcode

▶ It just works.
celedev

Composantes du système

3. Env. de développement
3.a. Éditeur de code Lua

Application
Code dynamique (Lua)

Code compilé

3.b. Gest. de ressources
3.c. Moniteur - Debugger
3.d. Gest. d’appareils

2. Bindings iOS

2. Bindings B

1. Env. d'exécution

OS X

OS + SDK iOS

Station de développement

Appareil cible

SDK B
celedev

Le choix de Lua
• Un langage de script simple et léger

• créé en 1993 par une équipe de la PUC-Rio
• utilisé dans de nombreux domaines
•

jeux (WoW), web (Wikipedia), scripting (VLC), interface
utilisateur (Adobe Lightroom), embarqué (TI-Nspire), …

• avec de multiples qualités
•

une syntaxe simple, puissante et flexible

•

une machine virtuelle performante et légère

•

conçu pour être embarqué

•

open source

www.lua.org
celedev

Lua : exemples de code

-- defines a factorial function
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print (fact(10))

-- Tables
local names = {"Peter", "Paul", "Mary"}
local grades = {Mary = 10, Paul = 7, Peter = 8}
-- Embedded function and upvalues
table.sort(names, function (n1, n2)
-- compare the grades
return grades[n1] > grades[n2]
end)

local list = nil
-- insert an element in the list
function insert (v)
list = {next = list, value = v}
end
-- traverse the list
local l = list
while l do
print(l.value)
l = l.next
end
celedev

Celedev + Lua: exemple de code
local UIView = require "UIKit.UIView"
local NSText = require "UIKit.NSText"
local UICollectionViewCell = objc.UICollectionViewCell
local Cell = class.createClass ("LabelCell", UICollectionViewCell)
local UIFont = objc.UIFont
local UIColor = objc.UIColor
local function CGRectMake (x, y, width, height)
return { x = x, y = y, width = width, height = height }
end
function Cell:setAppearance (cellIndex, cellCount)
-- ensure that params are not nil
cellIndex, cellCount = cellIndex or 0, cellCount or 1
local contentView = self.contentView
local contentSize = contentView:bounds().size
-- Text label
local label = self.label

end

label.frame = CGRectMake(0, contentSize.height / 4,
contentSize.width, contentSize.height / 2)
label.font = UIFont:boldSystemFontOfSize (46.0)
label.backgroundColor = UIColor.clearColor
label.shadowColor = UIColor.darkGrayColor
label.textColor = UIColor.whiteColor

return cell
celedev

Intégration dans l’application

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Create a Lua Context for this application
_collectionLuaContext = [[CIMLuaContext alloc] initWithName:@"Collection Control"];
_collectionLuaContextMonitor = [[CIMLuaRemoteMonitor alloc]
initWithLuaContext:_collectionLuaContext
connectionTimeout:30];
// Create the application window
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor underPageBackgroundColor];
// Run the code for this Lua context
[_collectionLuaContext loadLuaModuleNamed:@"CollectionControllerMain"
withCompletionBlock:^(id result) {
if ([result isKindOfClass:[UIViewController class]])
{
self.window.rootViewController = result;
}
}];
[self.window makeKeyAndVisible];
return YES;
}
celedev

Démo : live collections

• Un exemple très simple, à
base de Collection Views
• écrite entièrement en Lua
• 3 classes

• view controller
• collection view cell
• collection view layout
• 2 gesture recognizers :
pinch et rotation
celedev

Démo : live ressources

• Une app iPhone classique avec une
liste et une vue détaillée
• Le navigation controller est créé par le
MainWindow.xib

• Les autres view controllers sont écrit
en Lua
• L’appli intègre des ressources images,
plist et Interface Builder xib
celedev

En conclusion
• Disponible à la fin de l’année
• Recherche beta-testeurs !

• Pour rester informé

• www.celedev.com
• @celedev

Contenu connexe

PDF
Firebase par nicolas lehovetzki
PDF
Xcode Server - Jeffrey Macko
PDF
Presentation clean architecture
PDF
CocoaHeads Rennes #6
PPTX
Nouveauté iOS 6
PDF
Code flow - Cocoaheads paris
PDF
BlaBlaCar - Going Native !
PDF
How javascript core helped PAW to move from a small app to an extensible tool
Firebase par nicolas lehovetzki
Xcode Server - Jeffrey Macko
Presentation clean architecture
CocoaHeads Rennes #6
Nouveauté iOS 6
Code flow - Cocoaheads paris
BlaBlaCar - Going Native !
How javascript core helped PAW to move from a small app to an extensible tool

Tendances (20)

KEY
PDF
Apple Watch par Benoit Capallere et Joeffrey Bocquet
PDF
Transition de NIBs/XIBs vers Storyboards
PDF
Présentation SoLocal
PDF
CocoaHeads Rennes #5 : iOS & Android
PDF
Test flight et les outils de distribution continue par simone civetta de xebia
PPTX
Présentation iBeacon (cocoaheads toulouse)
PDF
CocoaHeads Rennes #7 : Intégration continue pour les nuls
PDF
Native script
PDF
Fastlane snapshot presentation
PDF
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
PDF
L'intégration continue avec Bitrise
PDF
J'ai fait une app native en React Native
PPTX
La sécurité sur iOS par Arnaud de Bock
PDF
iTunes Stats
PDF
Ns operationqueue
PDF
Multi-Threading Et Cocoa
KEY
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
PDF
REX react native
PDF
What’s Next Replay! Lyon 2011 - F. Fornaciari
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Transition de NIBs/XIBs vers Storyboards
Présentation SoLocal
CocoaHeads Rennes #5 : iOS & Android
Test flight et les outils de distribution continue par simone civetta de xebia
Présentation iBeacon (cocoaheads toulouse)
CocoaHeads Rennes #7 : Intégration continue pour les nuls
Native script
Fastlane snapshot presentation
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
L'intégration continue avec Bitrise
J'ai fait une app native en React Native
La sécurité sur iOS par Arnaud de Bock
iTunes Stats
Ns operationqueue
Multi-Threading Et Cocoa
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
REX react native
What’s Next Replay! Lyon 2011 - F. Fornaciari
Publicité

En vedette (19)

PDF
CocoaHeads Rennes #13 : CocoaPods
PDF
CocoaHeads Rennes #14: iOS7 Controllers Transitions
PDF
CocoaHeads Rennes #13 : Magical Record
PDF
CocoaHeads Rennes #16: OHHTTPStubs
PDF
Design like a developer
PDF
Super combinators
PDF
Handle the error
PDF
Quoi de neuf dans iOS 10.3
PDF
BitTorrent on iOS
PDF
Let's migrate to Swift 3.0
PDF
Project Entourage
PDF
Build a lego app with CocoaPods
PDF
CloudKit as a backend
PDF
Présentation de HomeKit
PDF
What's new in iOS9
PDF
Programme MFI retour d'expérience
PDF
SwiftyGPIO
PDF
How to communicate with Smart things?
PDF
IoT Best practices
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #16: OHHTTPStubs
Design like a developer
Super combinators
Handle the error
Quoi de neuf dans iOS 10.3
BitTorrent on iOS
Let's migrate to Swift 3.0
Project Entourage
Build a lego app with CocoaPods
CloudKit as a backend
Présentation de HomeKit
What's new in iOS9
Programme MFI retour d'expérience
SwiftyGPIO
How to communicate with Smart things?
IoT Best practices
Publicité

Similaire à CocoaHeads Rennes #14: Programmation Responsive par Celedev (6)

PDF
Formation développement iOS - Tutoriel
PPT
Formation iPhone ENSI by (Orange Tunisie)
KEY
Introduction à MacRuby
PPTX
Apple : iOS
KEY
Introduction à MacRuby - OSDC.fr 2009
PDF
Cours1
Formation développement iOS - Tutoriel
Formation iPhone ENSI by (Orange Tunisie)
Introduction à MacRuby
Apple : iOS
Introduction à MacRuby - OSDC.fr 2009
Cours1

Plus de CocoaHeadsRNS (11)

PDF
CocoaHeads Rennes #10 : Mock Objects
PDF
CocoaHeads Rennes #10 : Notifications
PDF
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
PDF
CocoaHeads Rennes #4 : Tests automatisés sur iOS
PDF
CocoaHeads Rennes #4 : la rotation sur iOS
PDF
Cocoaheads Rennes #3 : Bien coder sur iOS
PDF
CocoaHeads Rennes #3 : Bien débuter sur iOS
PDF
CocoaHeads Rennes #2 : Xcode 4
PDF
CocoaHeads Rennes #2 : Pratiques de développement itératif
PDF
CocoaHeads Rennes #1 : Grand Central Dispatch
PDF
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : la rotation sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : internationalisation

Dernier (7)

PDF
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
PDF
FORMATION EN Programmation En Langage C.pdf
PDF
Tendances tech 2025 - SFEIR & WENVISION.pdf
PPTX
Presentation_Securite_Reseaux_Bac+2.pptx
PDF
Modems expliqués- votre passerelle vers Internet.pdf
PPTX
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
PDF
presentation_with_intro_compressee IEEE EPS France
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
FORMATION EN Programmation En Langage C.pdf
Tendances tech 2025 - SFEIR & WENVISION.pdf
Presentation_Securite_Reseaux_Bac+2.pptx
Modems expliqués- votre passerelle vers Internet.pdf
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
presentation_with_intro_compressee IEEE EPS France

CocoaHeads Rennes #14: Programmation Responsive par Celedev

  • 1. celedev Programmation Responsive Une nouvelle façon de développer pour iOS CocoaHeads Rennes #14 Jean-Luc Jumpertz Octobre 2013 www.celedev.com
  • 3. celedev Évolution des apps iOS • Des appareils mobiles de plus en plus puissants, avec des écrans plus grands • un OS de plus en plus riche et sophistiqué, • un SDK de plus en plus vaste
  • 4. celedev Évolution des apps iOS • Des appareils mobiles de plus en plus puissants, avec des écrans plus grands • un OS de plus en plus riche et sophistiqué, • un SDK de plus en plus vaste Cor e ut o o ut A ay L t ame Ki G Anim Tex tK it atio n Spr Kit ite ics nam y U it D IK
  • 5. celedev Évolution des apps iOS • Des appareils mobiles de plus en plus puissants, avec des écrans plus grands • un OS de plus en plus riche et sophistiqué, • un SDK de plus en plus vaste 2013 ▶ une meilleure expérience utilisateur (UX) ▶ des Apps plus complexes ▶ des développements plus longs 2013
  • 6. • Xcode est incontournable sur iOS / OS X • un excellent et très puissant IDE • mais son cycle de compilation / exécution reste traditionnel 1. Edit 2. Build 3. Load 7. Debug celedev Outils de développement 4. Run 5. Setup 6. Test
  • 7. celedev La vision de celedev • La Programmation Responsive • interactivité maximale entre le développeur et son application • bien plus que du live coding 1. Edit 3. Debug 2. Test
  • 8. celedev La vision de celedev • La Programmation Responsive • interactivité maximale entre le développeur 1. Edit 3. Debug et son application • bien plus que du live coding • Développer des apps iOS en mode responsive présente de multiples avantages • rapidité de prototypage et de mise au point • libère la créativité à travers l’expérimentation • bien adaptée à la réalisation d’UX complexes 2. Test
  • 9. celedev Fonctionnalités • interactivité poussée entre l’IDE et l’application cible • tous les éléments constituant l’application peuvent être mis à jour dynamiquement : code, mais aussi les ressources images, textes, … • simplicité d’utilisation • simplicité des APIs et performance de l’implémentation • accès complet au SDK iOS • connexion facile aux devices • conçu pour s’intégrer très facilement avec le code C / Objective C et Xcode ▶ It just works.
  • 10. celedev Composantes du système 3. Env. de développement 3.a. Éditeur de code Lua Application Code dynamique (Lua) Code compilé 3.b. Gest. de ressources 3.c. Moniteur - Debugger 3.d. Gest. d’appareils 2. Bindings iOS 2. Bindings B 1. Env. d'exécution OS X OS + SDK iOS Station de développement Appareil cible SDK B
  • 11. celedev Le choix de Lua • Un langage de script simple et léger • créé en 1993 par une équipe de la PUC-Rio • utilisé dans de nombreux domaines • jeux (WoW), web (Wikipedia), scripting (VLC), interface utilisateur (Adobe Lightroom), embarqué (TI-Nspire), … • avec de multiples qualités • une syntaxe simple, puissante et flexible • une machine virtuelle performante et légère • conçu pour être embarqué • open source www.lua.org
  • 12. celedev Lua : exemples de code -- defines a factorial function function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end print (fact(10)) -- Tables local names = {"Peter", "Paul", "Mary"} local grades = {Mary = 10, Paul = 7, Peter = 8} -- Embedded function and upvalues table.sort(names, function (n1, n2) -- compare the grades return grades[n1] > grades[n2] end) local list = nil -- insert an element in the list function insert (v) list = {next = list, value = v} end -- traverse the list local l = list while l do print(l.value) l = l.next end
  • 13. celedev Celedev + Lua: exemple de code local UIView = require "UIKit.UIView" local NSText = require "UIKit.NSText" local UICollectionViewCell = objc.UICollectionViewCell local Cell = class.createClass ("LabelCell", UICollectionViewCell) local UIFont = objc.UIFont local UIColor = objc.UIColor local function CGRectMake (x, y, width, height) return { x = x, y = y, width = width, height = height } end function Cell:setAppearance (cellIndex, cellCount) -- ensure that params are not nil cellIndex, cellCount = cellIndex or 0, cellCount or 1 local contentView = self.contentView local contentSize = contentView:bounds().size -- Text label local label = self.label end label.frame = CGRectMake(0, contentSize.height / 4, contentSize.width, contentSize.height / 2) label.font = UIFont:boldSystemFontOfSize (46.0) label.backgroundColor = UIColor.clearColor label.shadowColor = UIColor.darkGrayColor label.textColor = UIColor.whiteColor return cell
  • 14. celedev Intégration dans l’application - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Create a Lua Context for this application _collectionLuaContext = [[CIMLuaContext alloc] initWithName:@"Collection Control"]; _collectionLuaContextMonitor = [[CIMLuaRemoteMonitor alloc] initWithLuaContext:_collectionLuaContext connectionTimeout:30]; // Create the application window self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor underPageBackgroundColor]; // Run the code for this Lua context [_collectionLuaContext loadLuaModuleNamed:@"CollectionControllerMain" withCompletionBlock:^(id result) { if ([result isKindOfClass:[UIViewController class]]) { self.window.rootViewController = result; } }]; [self.window makeKeyAndVisible]; return YES; }
  • 15. celedev Démo : live collections • Un exemple très simple, à base de Collection Views • écrite entièrement en Lua • 3 classes • view controller • collection view cell • collection view layout • 2 gesture recognizers : pinch et rotation
  • 16. celedev Démo : live ressources • Une app iPhone classique avec une liste et une vue détaillée • Le navigation controller est créé par le MainWindow.xib • Les autres view controllers sont écrit en Lua • L’appli intègre des ressources images, plist et Interface Builder xib
  • 17. celedev En conclusion • Disponible à la fin de l’année • Recherche beta-testeurs ! • Pour rester informé • www.celedev.com • @celedev