SlideShare a Scribd company logo
1 of 17
Download to read offline
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

More Related Content

What's hot

Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetCocoaHeads 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
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeadsRNS
 
Test flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaTest flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaCocoaHeads France
 
Présentation iBeacon (cocoaheads toulouse)
Présentation iBeacon (cocoaheads toulouse)Présentation iBeacon (cocoaheads toulouse)
Présentation iBeacon (cocoaheads toulouse)Arnaud Boudou
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeadsRNS
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentationCocoaHeads France
 
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015Loïc Knuchel
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec BitriseCocoaHeads France
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React NativeCocoaHeads France
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockNicolas Lourenço
 
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
 
What’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariWhat’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariZenika
 

What's hot (20)

Xcode 4.5
Xcode 4.5Xcode 4.5
Xcode 4.5
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey Bocquet
 
Transition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers StoryboardsTransition de NIBs/XIBs vers Storyboards
Transition de NIBs/XIBs vers Storyboards
 
Présentation SoLocal
Présentation SoLocalPrésentation SoLocal
Présentation SoLocal
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
Test flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebiaTest flight et les outils de distribution continue par simone civetta de xebia
Test flight et les outils de distribution continue par simone civetta de xebia
 
Présentation iBeacon (cocoaheads toulouse)
Présentation iBeacon (cocoaheads toulouse)Présentation iBeacon (cocoaheads toulouse)
Présentation iBeacon (cocoaheads toulouse)
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
Native script
Native scriptNative script
Native script
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentation
 
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React Native
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de Bock
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Ns operationqueue
Ns operationqueueNs operationqueue
Ns operationqueue
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
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
 
REX react native
REX react nativeREX react native
REX react native
 
What’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariWhat’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. Fornaciari
 

Viewers also liked

Viewers also liked (19)

CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
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
 
BitTorrent on iOS
BitTorrent on iOSBitTorrent on iOS
BitTorrent on iOS
 
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
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
CloudKit as a backend
CloudKit as a backendCloudKit as a backend
CloudKit as a backend
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 

Similar to CocoaHeads Rennes #14: Programmation Responsive par Celedev

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
 
L’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & AndroidL’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & AndroidChris Saez
 
Initiation au développement mobile sous Android
Initiation au développement mobile sous AndroidInitiation au développement mobile sous Android
Initiation au développement mobile sous AndroidAbdelkader Rhouati
 
L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8Microsoft
 
Oracle Developer adf
Oracle Developer adfOracle Developer adf
Oracle Developer adfBacely YoroBi
 
Mobiliteatime #2 - WatchKit, le framework de développement pour l’Apple Watch
Mobiliteatime #2 - WatchKit, le framework de développement pour l’Apple WatchMobiliteatime #2 - WatchKit, le framework de développement pour l’Apple Watch
Mobiliteatime #2 - WatchKit, le framework de développement pour l’Apple WatchUSERADGENTS
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System SARL
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System SARL
 
01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière 01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière Cellenza
 
Cours android
Cours androidCours android
Cours androidAd Hafsa
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdfmed_univ78
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesMichael Laguerre
 
Composants d-une application Android.ppt
Composants d-une application Android.pptComposants d-une application Android.ppt
Composants d-une application Android.pptmahamaalej3
 
Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...
Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...
Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...kevinroulleau
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 

Similar to CocoaHeads Rennes #14: Programmation Responsive par Celedev (20)

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)
 
L’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & AndroidL’environnement du développement mobile iOS & Android
L’environnement du développement mobile iOS & Android
 
Initiation au développement mobile sous Android
Initiation au développement mobile sous AndroidInitiation au développement mobile sous Android
Initiation au développement mobile sous Android
 
L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8
 
La Rochelle workshop 2016
La Rochelle workshop 2016La Rochelle workshop 2016
La Rochelle workshop 2016
 
Oracle Developer adf
Oracle Developer adfOracle Developer adf
Oracle Developer adf
 
Mobiliteatime #2 - WatchKit, le framework de développement pour l’Apple Watch
Mobiliteatime #2 - WatchKit, le framework de développement pour l’Apple WatchMobiliteatime #2 - WatchKit, le framework de développement pour l’Apple Watch
Mobiliteatime #2 - WatchKit, le framework de développement pour l’Apple Watch
 
1-android.pdf
1-android.pdf1-android.pdf
1-android.pdf
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stack
 
Java vs .Net
Java vs .NetJava vs .Net
Java vs .Net
 
Java vs .Net
Java vs .NetJava vs .Net
Java vs .Net
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stack
 
01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière 01 - [ASP.NET Core] Plénière
01 - [ASP.NET Core] Plénière
 
Cours android
Cours androidCours android
Cours android
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobiles
 
Composants d-une application Android.ppt
Composants d-une application Android.pptComposants d-une application Android.ppt
Composants d-une application Android.ppt
 
Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...
Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...
Paris Test conf - Kevin Roulleau - E2E tests on mobile native app, a successf...
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 

More from CocoaHeadsRNS

CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeadsRNS
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeadsRNS
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeadsRNS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeadsRNS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeadsRNS
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeadsRNS
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeadsRNS
 

More from CocoaHeadsRNS (11)

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

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