• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Xcode 4.5
 

Xcode 4.5

on

  • 4,354 views

Nouveautés d'Xcode 4.5

Nouveautés d'Xcode 4.5

Statistics

Views

Total Views
4,354
Views on SlideShare
1,486
Embed Views
2,868

Actions

Likes
0
Downloads
18
Comments
0

4 Embeds 2,868

http://cocoaheads.fr 2841
http://feeds.feedburner.com 21
http://emageen.eu 4
http://translate.googleusercontent.com 2

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Amélioration du rechercher/remplacer (Pattern & Appelant et appelé & indexation de symbole)\n Tag Fixme & TODO & #pragma mark listés dans les méthodes\n
  • Amélioration du rechercher/remplacer (Pattern & Appelant et appelé & indexation de symbole)\n Tag Fixme & TODO & #pragma mark listés dans les méthodes\n
  • Amélioration du rechercher/remplacer (Pattern & Appelant et appelé & indexation de symbole)\n Tag Fixme & TODO & #pragma mark listés dans les méthodes\n
  • Amélioration du rechercher/remplacer (Pattern & Appelant et appelé & indexation de symbole)\n Tag Fixme & TODO & #pragma mark listés dans les méthodes\n
  • Amélioration du rechercher/remplacer (Pattern & Appelant et appelé & indexation de symbole)\n Tag Fixme & TODO & #pragma mark listés dans les méthodes\n
  • Amélioration du rechercher/remplacer (Pattern & Appelant et appelé & indexation de symbole)\n Tag Fixme & TODO & #pragma mark listés dans les méthodes\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • NSNumber *fortyTwo = @42; -> [NSNumber numberWithInt:42]\n NSNumber *fortyTwoUnsigned = @42U; -> [NSNumber numberWithUnsignedInt:42U]\n NSNumber *fortyTwoLong = @42L; -> [NSNumber numberWithLong:42L]\n NSNumber *fortyTwoLongLong = @42LL; -> [NSNumber numberWithLongLong:42LL]\n NSNumber *piFloat = @3.141592654F; -> [NSNumber numberWithFloat:3.141592654F]\n NSNumber *piDouble = @3.1415926535; -> [NSNumber numberWithDouble:3.1415926535]\n
  • NSNumber *fortyTwo = @42; -> [NSNumber numberWithInt:42]\n NSNumber *fortyTwoUnsigned = @42U; -> [NSNumber numberWithUnsignedInt:42U]\n NSNumber *fortyTwoLong = @42L; -> [NSNumber numberWithLong:42L]\n NSNumber *fortyTwoLongLong = @42LL; -> [NSNumber numberWithLongLong:42LL]\n NSNumber *piFloat = @3.141592654F; -> [NSNumber numberWithFloat:3.141592654F]\n NSNumber *piDouble = @3.1415926535; -> [NSNumber numberWithDouble:3.1415926535]\n
  • NSNumber *fortyTwo = @42; -> [NSNumber numberWithInt:42]\n NSNumber *fortyTwoUnsigned = @42U; -> [NSNumber numberWithUnsignedInt:42U]\n NSNumber *fortyTwoLong = @42L; -> [NSNumber numberWithLong:42L]\n NSNumber *fortyTwoLongLong = @42LL; -> [NSNumber numberWithLongLong:42LL]\n NSNumber *piFloat = @3.141592654F; -> [NSNumber numberWithFloat:3.141592654F]\n NSNumber *piDouble = @3.1415926535; -> [NSNumber numberWithDouble:3.1415926535]\n
  • NSNumber *fortyTwo = @42; -> [NSNumber numberWithInt:42]\n NSNumber *fortyTwoUnsigned = @42U; -> [NSNumber numberWithUnsignedInt:42U]\n NSNumber *fortyTwoLong = @42L; -> [NSNumber numberWithLong:42L]\n NSNumber *fortyTwoLongLong = @42LL; -> [NSNumber numberWithLongLong:42LL]\n NSNumber *piFloat = @3.141592654F; -> [NSNumber numberWithFloat:3.141592654F]\n NSNumber *piDouble = @3.1415926535; -> [NSNumber numberWithDouble:3.1415926535]\n
  • NSNumber *fortyTwo = @42; -> [NSNumber numberWithInt:42]\n NSNumber *fortyTwoUnsigned = @42U; -> [NSNumber numberWithUnsignedInt:42U]\n NSNumber *fortyTwoLong = @42L; -> [NSNumber numberWithLong:42L]\n NSNumber *fortyTwoLongLong = @42LL; -> [NSNumber numberWithLongLong:42LL]\n NSNumber *piFloat = @3.141592654F; -> [NSNumber numberWithFloat:3.141592654F]\n NSNumber *piDouble = @3.1415926535; -> [NSNumber numberWithDouble:3.1415926535]\n
  • NSNumber *fortyTwo = @42; -> [NSNumber numberWithInt:42]\n NSNumber *fortyTwoUnsigned = @42U; -> [NSNumber numberWithUnsignedInt:42U]\n NSNumber *fortyTwoLong = @42L; -> [NSNumber numberWithLong:42L]\n NSNumber *fortyTwoLongLong = @42LL; -> [NSNumber numberWithLongLong:42LL]\n NSNumber *piFloat = @3.141592654F; -> [NSNumber numberWithFloat:3.141592654F]\n NSNumber *piDouble = @3.1415926535; -> [NSNumber numberWithDouble:3.1415926535]\n
  • When the type of the parenthesized expression is (char *) or (const char *), the result of the boxed expression is a pointer to an NSString object containing equivalent character data, which is assumed to be '\\0'-terminated and UTF-8 encoded.\n(use the fixed underlying type)\n
  • When the type of the parenthesized expression is (char *) or (const char *), the result of the boxed expression is a pointer to an NSString object containing equivalent character data, which is assumed to be '\\0'-terminated and UTF-8 encoded.\n(use the fixed underlying type)\n
  • When the type of the parenthesized expression is (char *) or (const char *), the result of the boxed expression is a pointer to an NSString object containing equivalent character data, which is assumed to be '\\0'-terminated and UTF-8 encoded.\n(use the fixed underlying type)\n
  • When the type of the parenthesized expression is (char *) or (const char *), the result of the boxed expression is a pointer to an NSString object containing equivalent character data, which is assumed to be '\\0'-terminated and UTF-8 encoded.\n(use the fixed underlying type)\n
  • When the type of the parenthesized expression is (char *) or (const char *), the result of the boxed expression is a pointer to an NSString object containing equivalent character data, which is assumed to be '\\0'-terminated and UTF-8 encoded.\n(use the fixed underlying type)\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Xcode 4.5 Xcode 4.5 Presentation Transcript

  • XCODE 4.5 Nicolas Lauquin - L’atelier du mobile8 novembre 2012 @ CocoaHeads
  • pense, crée et fait connaitre vos applications mobiles
  • INTRODUCTION• Chronologie d’Xcode 4.x & fonctionnalités clefs• Améliorations d’Objective C• Démo• Les impacts & architectures supportéesNote : présentation orientée iOS
  • (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)
  • (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)• Présentations «Hello Xcode 4» Cocoaheads du 14 avril 2011
  • (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)• Présentations «Hello Xcode 4» Cocoaheads du 14 avril 2011 • «Un outil attendu (instable ? ;-))»
  • (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)• Présentations «Hello Xcode 4» Cocoaheads du 14 avril 2011 • «Un outil attendu (instable ? ;-))» • «Une modification du processus de développement»
  • (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)• Présentations «Hello Xcode 4» Cocoaheads du 14 avril 2011 • «Un outil attendu (instable ? ;-))» • «Une modification du processus de développement» • «Des fonctionnalités perdues & des évolutions»
  • EVOLUTION XCODE 4.1 JUILLET 2011
  • EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)
  • EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)
  • EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)• OS X Application Sandbox (Lion)
  • EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)• OS X Application Sandbox (Lion)• Default compiler LLVM-GCC 4.2
  • EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)• OS X Application Sandbox (Lion)• Default compiler LLVM-GCC 4.2• Custom Behaviors
  • EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)• OS X Application Sandbox (Lion)• Default compiler LLVM-GCC 4.2• Custom Behaviors• Git Remote Management
  • EVOLUTION XCODE 4.2 OCTOBRE 2011
  • EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5
  • EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC
  • EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0
  • EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0• Storyboarding
  • EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0• Storyboarding• Location Simulation
  • EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0• Storyboarding• Location Simulation• Dernière version compatible Snow Leopard
  • EVOLUTION XCODE 4.3 MARS 2012
  • EVOLUTION XCODE 4.3 MARS 2012• Une application “tout en un“ téléchargeable depuis le Mac AppStore. Bybye «/Developer»
  • EVOLUTION XCODE 4.3 MARS 2012• Une application “tout en un“ téléchargeable depuis le Mac AppStore. Bybye «/Developer»• Auto Layout est par défaut pour tout projet Cocoa
  • EVOLUTION XCODE 4.3 MARS 2012• Une application “tout en un“ téléchargeable depuis le Mac AppStore. Bybye «/Developer»• Auto Layout est par défaut pour tout projet Cocoa• Xcode 4.3.1 -> support iOS5.1
  • EVOLUTION XCODE 4.3 MARS 2012• Une application “tout en un“ téléchargeable depuis le Mac AppStore. Bybye «/Developer»• Auto Layout est par défaut pour tout projet Cocoa• Xcode 4.3.1 -> support iOS5.1• Xcode 4.3.3 -> maj pour 10.7.4
  • EVOLUTION XCODE 4.4 JUILLET 2012
  • EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)
  • EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)• Fonctionne sur Mac OS X Lion et Mountain Lion
  • EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)• Fonctionne sur Mac OS X Lion et Mountain Lion• LLVM 4.0 Compiler màj (literals & subscription) - OS X
  • EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)• Fonctionne sur Mac OS X Lion et Mountain Lion• LLVM 4.0 Compiler màj (literals & subscription) - OS X• Synthesize par défaut pour les properties
  • EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)• Fonctionne sur Mac OS X Lion et Mountain Lion• LLVM 4.0 Compiler màj (literals & subscription) - OS X• Synthesize par défaut pour les properties• Amélioration de l’«analyzer» (common security mistakes in API and malloc usages)
  • EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)• Fonctionne sur Mac OS X Lion et Mountain Lion• LLVM 4.0 Compiler màj (literals & subscription) - OS X• Synthesize par défaut pour les properties• Amélioration de l’«analyzer» (common security mistakes in API and malloc usages)• 4.4.1 -> avec correction de quelques bugs
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod• Support des literals & subscripting pour iOS
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod• Support des literals & subscripting pour iOS• Autolayout pour iOS
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod• Support des literals & subscripting pour iOS• Autolayout pour iOS• LLDB is now the default debugger & LLDB supports hardware watchpoints on iOS devices
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod• Support des literals & subscripting pour iOS• Autolayout pour iOS• LLDB is now the default debugger & LLDB supports hardware watchpoints on iOS devices• Xcode 4.5.1 (octobre) -> bug fix & stabilité
  • EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod• Support des literals & subscripting pour iOS• Autolayout pour iOS• LLDB is now the default debugger & LLDB supports hardware watchpoints on iOS devices• Xcode 4.5.1 (octobre) -> bug fix & stabilité• Xcode 4.5.2 (novembre) -> support de l’iPad mini & iPad écran retina
  • AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 1/5
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 1/5#import "CocoaheadsMeetingViewController.h"@implementation CocoaheadsMeetingViewController- (void)listeningThePresentation { [self carefully];}- (void)carefully {}@end
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 1/5 #import "CocoaheadsMeetingViewController.h" @implementation CocoaheadsMeetingViewController - (void)listeningThePresentation { [self carefully]; } - (void)carefully {} @endAvant Xcode 4.4 -> warning méthode non trouvée
  • AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 2/5
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 2/5Solution 1) Ordonnancer les méthodes #import "CocoaheadsMeetingViewController.h" @implementation CocoaheadsMeetingViewController - (void)carefully {} - (void)listeningThePresentation { [self carefully]; } @end
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 2/5Solution 1) Ordonnancer les méthodes #import "CocoaheadsMeetingViewController.h" @implementation CocoaheadsMeetingViewController - (void)carefully {} - (void)listeningThePresentation { [self carefully]; } @endAnalyse :• ne fonctionne pas tout le temps• surtout une perte de temps
  • AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 3/5
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 3/5Solution 2) Classe publique
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 3/5Solution 2) Classe publique @interface CocoaheadsMeetingViewController : UIViewController - (void)carefully; @end @implementation CocoaheadsMeetingViewController - (void)listeningThePresentation { [self carefully]; } - (void)carefully {} @end
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 3/5Solution 2) Classe publique @interface CocoaheadsMeetingViewController : UIViewController - (void)carefully; @end @implementation CocoaheadsMeetingViewController - (void)listeningThePresentation { [self carefully]; } - (void)carefully {} @endAnalyse :• mauvaise exposition/programmation
  • AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 4/5
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 4/5Solution 3) Extension de classe
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 4/5Solution 3) Extension de classe @interface CocoaheadsMeetingViewController () - (void)carefully; @end @implementation CocoaheadsMeetingViewController - (void)listeningThePresentation { [self carefully]; } - (void)carefully {}
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 4/5Solution 3) Extension de classe @interface CocoaheadsMeetingViewController () - (void)carefully; @end @implementation CocoaheadsMeetingViewController - (void)listeningThePresentation { [self carefully]; } - (void)carefully {}Analyse :• permet l’ajout de “property“ privées & méthodes accessibles depuis un nib• reste une perte de temps & un workaround
  • AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 5/5
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 5/5Solution 4)
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 5/5Solution 4) Ça fonctionne tout simplement dans Xcode 4.5
  • AMÉLIORATION D’OBJECTIVE C AMÉLIORATION : ENUMEnum with fixed underlying type typedef enum CocoaheadsPublicType : NSUInteger { CocoaheadsPublicDevelopper, CocoaheadsPublicDesigner, CocoaheadsPublicPM } CocoaheadsPublicType; Analyse : • enumération typées • Warning type checking • Warning handeling all enums values
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : PROPERTIES
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : PROPERTIES @interface PropertyObject : NSObject @property (readwrite, strong) NSString * name; @end @implementation PropertyObject @endAnalyse :•“synthesize“ par défaut•chaque accesseur est généré si non fourni
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : PROPERTIES @interface PropertyObject : NSObject @property (readwrite, strong) NSString * name; @end @implementation PropertyObject @synthesize name = _name;// generated by default @endAnalyse :•“synthesize“ par défaut•chaque accesseur est généré si non fourni•variable d’instance généré par défaut “_variable“ si non fournie
  • AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : PROPERTIES @interface PropertyObject : NSObject @property (readwrite, strong) NSString * name; @end @implementation PropertyObject @synthesize name = _name;// generated by default @endAnalyse :•“synthesize“ par défaut•chaque accesseur est généré si non fourni•variable d’instance généré par défaut “_variable“ si non fournie•compatibilité :
  • LITERALS 1/6 INTRO
  • LITERALS 1/6 INTRO• Code allégé
  • LITERALS 1/6 INTRO• Code allégé• Gain de temps
  • LITERALS 1/6 INTRO• Code allégé• Gain de temps• “boxing“ : primitive value to object. (Necessary for Foundation collections)
  • LITERALS 2/6NSNUMBER - BOXED NUMBER
  • LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42];
  • LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42
  • LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES];
  • LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES]; -> @YES
  • LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES]; -> @YES• [NSNumber numberWithFloat:3.141592654F];
  • LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES]; -> @YES• [NSNumber numberWithFloat:3.141592654F]; -> @3.141592654F;
  • LITERALS 3/6BOXED EXPRESSIONS
  • LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )
  • LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )• 1) Numbers
  • LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )• 1) Numbers • NSNumber *piOverTwo = @(M_PI / 2); // [NSNumber numberWithDouble:(M_PI / 2)]
  • LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )• 1) Numbers • NSNumber *piOverTwo = @(M_PI / 2); // [NSNumber numberWithDouble:(M_PI / 2)]• 2) Enumerated types : • typedef enum { Red, Green, Blue } Color; • NSNumber *favoriteColor = @(Green); // [NSNumber numberWithInt:((int)Green)]
  • LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )• 1) Numbers • NSNumber *piOverTwo = @(M_PI / 2); // [NSNumber numberWithDouble:(M_PI / 2)]• 2) Enumerated types : • typedef enum { Red, Green, Blue } Color; • NSNumber *favoriteColor = @(Green); // [NSNumber numberWithInt:((int)Green)]• 3) Strings : • NSString *path = @(getenv("PATH")); // [NSString stringWithUTF8String:(getenv("PATH"))] • NSArray *pathComponents = [path componentsSeparatedByString:@":"];
  • LITERALS 4/6 DICTIONARY
  • LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};
  • LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};• NSDictionnary *dict = @{ @"key1":@"val1", @"key2":@"val2" };
  • LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};• NSDictionnary *dict = @{ @"key1":@"val1", @"key2":@"val2" };• Syntaxe @{key : obj, … }
  • LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};• NSDictionnary *dict = @{ @"key1":@"val1", @"key2":@"val2" };• Syntaxe @{key : obj, … }• -> Attention cohérence
  • LITERALS 5/6 ARRAY
  • LITERALS 5/6 ARRAY• NSArray *ar = [NSArray arrayWithObjects:@"titi", @"toto", nil];
  • LITERALS 5/6 ARRAY• NSArray *ar = [NSArray arrayWithObjects:@"titi", @"toto", nil];• NSArray *ar = @[@"titi", @"toto"];
  • LITERALS 5/6 ARRAY• NSArray *ar = [NSArray arrayWithObjects:@"titi", @"toto", nil];• NSArray *ar = @[@"titi", @"toto"];• Syntaxe : @[obj1, obj2]
  • LITERALS 5/6 CONTAINER
  • LITERALS 5/6 CONTAINER• Container sont “immutable“
  • LITERALS 5/6 CONTAINER• Container sont “immutable“• Utiliser : “-mutableCopy“ NSMutableArray * numberArray = [@[ @"one", @"two", @"three"]mutableCopy];
  • LITERALS 5/6 CONTAINER• Container sont “immutable“• Utiliser : “-mutableCopy“ NSMutableArray * numberArray = [@[ @"one", @"two", @"three"]mutableCopy];• Usage static : «Initializer element is not a compile-time constant»
  • LITERALS 5/6 CONTAINER• Container sont “immutable“• Utiliser : “-mutableCopy“ NSMutableArray * numberArray = [@[ @"one", @"two", @"three"]mutableCopy];• Usage static : «Initializer element is not a compile-time constant» • workaround : affecter la valeur dans la méthode “+initialize“ de votre classe
  • OBJECT SUBSCRIPTING 1/3Array (index subscripting)NSMutableArray *array = ...;NSUInteger idx = ...;id newObject = ...;id oldObject = array[idx];array[idx] = newObject;! ! // replace oldObject with newObject
  • OBJECT SUBSCRIPTING 1/3Array (index subscripting)NSMutableArray *array = ...;NSUInteger idx = ...;id newObject = ...;id oldObject = array[idx];array[idx] = newObject;! ! // replace oldObject with newObjectDictionnary (key subscripting)NSMutableDictionary *dictionary = ...;NSString *key = ...;oldObject = dictionary[key];dictionary[key] = newObject;!// replace oldObject with newObject
  • OBJECT SUBSCRIPTING 2/3 DÉCRYPTAGE
  • OBJECT SUBSCRIPTING 2/3 DÉCRYPTAGEArrayid value = array[idx]; -> id value = [array objectAtIndexedSubscript:idx];array[idx] = object; -> [array setObject:object atIndexedSubscript:idx];idx : integral typeobject : object pointer
  • OBJECT SUBSCRIPTING 2/3 DÉCRYPTAGEArrayid value = array[idx]; -> id value = [array objectAtIndexedSubscript:idx];array[idx] = object; -> [array setObject:object atIndexedSubscript:idx];idx : integral typeobject : object pointerDictionnaryid value = dict[key]; -> id value = [dict objectForKeyedSubscript:key];dict[key] = object; -> [dict setObject:object forKeyedSubscript:key];key & object : object pointer
  • OBJECT SUBSCRIPTING 3/3 VOTRE CLASSE “SUBSCRIPTABLE“
  • OBJECT SUBSCRIPTING 3/3 VOTRE CLASSE “SUBSCRIPTABLE“@interface MyCocoaheadsList : NSObject- (User *) objectAtIndexedSubscript:(NSUInteger)idx;- (void) setObject:(User*) user atIndexedSubcript:(NSUInteger)idx;@end@implementation MyCocoaheadsList { NSMutableArray * myCocoaheadsList;}- (User *) objectAtIndexedSubscript:(NSUInteger)idx{ return (User *) myCocoaheadsList[idx];}- (void) setObject:(User*) user atIndexedSubcript:(NSUInteger)idx { myCocoaheadsList[idx] = user;}@endAppel via :MyCocoaheadsList * mycocoaheadsList = [[MyCocoaheadsList alloc] init];User * firstUser = mycocoaheadsList[0];
  • ASTUCES DÉMO• Find and Search indexation de symbols & Insert pattern• Callers or Callees• Tag Fixme & TODO• Refactor -> convert to modern Objectiv C
  • XCODE 4.5 ARCHITECTURESSUPPORTÉES & IMPACTS 1/2
  • XCODE 4.5 ARCHITECTURES SUPPORTÉES & IMPACTS 1/2• Simulateur 4.3 disparu sous Mountain Lion
  • XCODE 4.5 ARCHITECTURES SUPPORTÉES & IMPACTS 1/2• Simulateur 4.3 disparu sous Mountain Lion• Abandon de armv6 (iPhone 1, iPod touch 2G (2007), iPhone 3G)
  • XCODE 4.5 ARCHITECTURES SUPPORTÉES & IMPACTS 1/2• Simulateur 4.3 disparu sous Mountain Lion• Abandon de armv6 (iPhone 1, iPod touch 2G (2007), iPhone 3G)• iOS 4.3 minimum supporté. • => solution simple de tester ???
  • BIBLIOGRAPHIE• Details sur literals & object subscription : http://clang.llvm.org/ docs/ObjectiveCLiterals.html• WWDC 2012 session 405 : Modern Objective C (vidéo)• Xcode release : https://developer.apple.com/library/mac/#releasenotes/ DeveloperTools/RN-Xcode/_index.html• What’s new in Xcode : http://developer.apple.com/library/ios/#documentation/ DeveloperTools/Conceptual/WhatsNewXcode/00-Introduction/Introduction.html• http://en.wikipedia.org/wiki/Xcode#Major_features
  • QUESTIONS