Xcode 4.5

6,404 views

Published on

Nouveautés d'Xcode 4.5

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,404
On SlideShare
0
From Embeds
0
Number of Embeds
3,010
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \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

    1. 1. XCODE 4.5 Nicolas Lauquin - L’atelier du mobile8 novembre 2012 @ CocoaHeads
    2. 2. pense, crée et fait connaitre vos applications mobiles
    3. 3. 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
    4. 4. (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)
    5. 5. (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)• Présentations «Hello Xcode 4» Cocoaheads du 14 avril 2011
    6. 6. (R)EVOLUTION D’XCODE 4.0 MARS 2011 (PUBLIC RELEASE)• Présentations «Hello Xcode 4» Cocoaheads du 14 avril 2011 • «Un outil attendu (instable ? ;-))»
    7. 7. (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»
    8. 8. (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»
    9. 9. EVOLUTION XCODE 4.1 JUILLET 2011
    10. 10. EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)
    11. 11. EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)
    12. 12. EVOLUTION XCODE 4.1 JUILLET 2011• Support de Mac OS X LION (10.7)• Autolayout (Lion)• OS X Application Sandbox (Lion)
    13. 13. 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
    14. 14. 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
    15. 15. 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
    16. 16. EVOLUTION XCODE 4.2 OCTOBRE 2011
    17. 17. EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5
    18. 18. EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC
    19. 19. EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0
    20. 20. EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0• Storyboarding
    21. 21. EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0• Storyboarding• Location Simulation
    22. 22. EVOLUTION XCODE 4.2 OCTOBRE 2011• Support iOS 5• ARC• Default compiler LLVM 3.0• Storyboarding• Location Simulation• Dernière version compatible Snow Leopard
    23. 23. EVOLUTION XCODE 4.3 MARS 2012
    24. 24. EVOLUTION XCODE 4.3 MARS 2012• Une application “tout en un“ téléchargeable depuis le Mac AppStore. Bybye «/Developer»
    25. 25. 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
    26. 26. 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
    27. 27. 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
    28. 28. EVOLUTION XCODE 4.4 JUILLET 2012
    29. 29. EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)
    30. 30. EVOLUTION XCODE 4.4 JUILLET 2012• Support de Mountain Lion (10.8)• Fonctionne sur Mac OS X Lion et Mountain Lion
    31. 31. 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
    32. 32. 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
    33. 33. 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)
    34. 34. 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
    35. 35. EVOLUTION XCODE 4.5 SEPTEMBRE 2012
    36. 36. EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support
    37. 37. EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod
    38. 38. EVOLUTION XCODE 4.5 SEPTEMBRE 2012• iOS6 support• Écran 4“ Retina de l’iPhone 5 & iPod• Support des literals & subscripting pour iOS
    39. 39. 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
    40. 40. 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
    41. 41. 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é
    42. 42. 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
    43. 43. AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 1/5
    44. 44. AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 1/5#import "CocoaheadsMeetingViewController.h"@implementation CocoaheadsMeetingViewController- (void)listeningThePresentation { [self carefully];}- (void)carefully {}@end
    45. 45. 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
    46. 46. AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 2/5
    47. 47. 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
    48. 48. 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
    49. 49. AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 3/5
    50. 50. AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 3/5Solution 2) Classe publique
    51. 51. 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
    52. 52. 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
    53. 53. AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 4/5
    54. 54. AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 4/5Solution 3) Extension de classe
    55. 55. 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 {}
    56. 56. 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
    57. 57. AMÉLIORATION D’OBJECTIVE CSIMPLIFICATION : ORDRE DES MÉTHODES 5/5
    58. 58. AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 5/5Solution 4)
    59. 59. AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : ORDRE DES MÉTHODES 5/5Solution 4) Ça fonctionne tout simplement dans Xcode 4.5
    60. 60. 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
    61. 61. AMÉLIORATION D’OBJECTIVE C SIMPLIFICATION : PROPERTIES
    62. 62. 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
    63. 63. 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
    64. 64. 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é :
    65. 65. LITERALS 1/6 INTRO
    66. 66. LITERALS 1/6 INTRO• Code allégé
    67. 67. LITERALS 1/6 INTRO• Code allégé• Gain de temps
    68. 68. LITERALS 1/6 INTRO• Code allégé• Gain de temps• “boxing“ : primitive value to object. (Necessary for Foundation collections)
    69. 69. LITERALS 2/6NSNUMBER - BOXED NUMBER
    70. 70. LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42];
    71. 71. LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42
    72. 72. LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES];
    73. 73. LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES]; -> @YES
    74. 74. LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES]; -> @YES• [NSNumber numberWithFloat:3.141592654F];
    75. 75. LITERALS 2/6 NSNUMBER - BOXED NUMBER• [NSNumber numberWithInt:42]; -> @42• [NSNumber numberWithBool:YES]; -> @YES• [NSNumber numberWithFloat:3.141592654F]; -> @3.141592654F;
    76. 76. LITERALS 3/6BOXED EXPRESSIONS
    77. 77. LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )
    78. 78. LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )• 1) Numbers
    79. 79. LITERALS 3/6 BOXED EXPRESSIONSSyntaxe : @( expression )• 1) Numbers • NSNumber *piOverTwo = @(M_PI / 2); // [NSNumber numberWithDouble:(M_PI / 2)]
    80. 80. 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)]
    81. 81. 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:@":"];
    82. 82. LITERALS 4/6 DICTIONARY
    83. 83. LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};
    84. 84. LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};• NSDictionnary *dict = @{ @"key1":@"val1", @"key2":@"val2" };
    85. 85. LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};• NSDictionnary *dict = @{ @"key1":@"val1", @"key2":@"val2" };• Syntaxe @{key : obj, … }
    86. 86. LITERALS 4/6 DICTIONARY• NSDictionnary *dict = [NSDictionnary dictionnaryWithObjectsAndKeys:{"val1", "key1", "val2", "key2"};• NSDictionnary *dict = @{ @"key1":@"val1", @"key2":@"val2" };• Syntaxe @{key : obj, … }• -> Attention cohérence
    87. 87. LITERALS 5/6 ARRAY
    88. 88. LITERALS 5/6 ARRAY• NSArray *ar = [NSArray arrayWithObjects:@"titi", @"toto", nil];
    89. 89. LITERALS 5/6 ARRAY• NSArray *ar = [NSArray arrayWithObjects:@"titi", @"toto", nil];• NSArray *ar = @[@"titi", @"toto"];
    90. 90. LITERALS 5/6 ARRAY• NSArray *ar = [NSArray arrayWithObjects:@"titi", @"toto", nil];• NSArray *ar = @[@"titi", @"toto"];• Syntaxe : @[obj1, obj2]
    91. 91. LITERALS 5/6 CONTAINER
    92. 92. LITERALS 5/6 CONTAINER• Container sont “immutable“
    93. 93. LITERALS 5/6 CONTAINER• Container sont “immutable“• Utiliser : “-mutableCopy“ NSMutableArray * numberArray = [@[ @"one", @"two", @"three"]mutableCopy];
    94. 94. 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»
    95. 95. 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
    96. 96. OBJECT SUBSCRIPTING 1/3Array (index subscripting)NSMutableArray *array = ...;NSUInteger idx = ...;id newObject = ...;id oldObject = array[idx];array[idx] = newObject;! ! // replace oldObject with newObject
    97. 97. 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
    98. 98. OBJECT SUBSCRIPTING 2/3 DÉCRYPTAGE
    99. 99. 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
    100. 100. 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
    101. 101. OBJECT SUBSCRIPTING 3/3 VOTRE CLASSE “SUBSCRIPTABLE“
    102. 102. 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];
    103. 103. ASTUCES DÉMO• Find and Search indexation de symbols & Insert pattern• Callers or Callees• Tag Fixme & TODO• Refactor -> convert to modern Objectiv C
    104. 104. XCODE 4.5 ARCHITECTURESSUPPORTÉES & IMPACTS 1/2
    105. 105. XCODE 4.5 ARCHITECTURES SUPPORTÉES & IMPACTS 1/2• Simulateur 4.3 disparu sous Mountain Lion
    106. 106. 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)
    107. 107. 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 ???
    108. 108. 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
    109. 109. QUESTIONS

    ×