Your SlideShare is downloading. ×
0
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
iOS Developer Overview - DevWeek 2014
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

iOS Developer Overview - DevWeek 2014

811

Published on

So, you're a developer, but you have never worked with iOS? In this session, Ardeleanu will provide a head start on how to plan, build, debug and release iOS 7 apps. The talk will cover a wide range …

So, you're a developer, but you have never worked with iOS? In this session, Ardeleanu will provide a head start on how to plan, build, debug and release iOS 7 apps. The talk will cover a wide range of topics, including: the App Store ecosystem; the nature of an app; iOS 7's new UI and how to migrate from iOS 6; interface design; dev tools (Xcode – IDE, Simulator, Instruments – docs, etc); design patterns; debugging and optimisation; App Store and ad-hoc distribution; and what makes an app successfully.

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

No Downloads
Views
Total Views
811
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
34
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. iOS Application Development iOS Developer Overview Paul Ardeleanu
  • 2. Assumptions… You are: ‣ a developer of sorts… ‣ have no or little exposure to iOS ‣ want to learn enough to become ‘dangerous’
  • 3. The plan ‣ Why iOS? ‣ Tools ‣ Storyboarding ‣ Objective-C ‣ Design patterns ‣ Debug & Testing ‣ Ad-Hoc distribution ‣ Publishing in the app store
  • 4. iOS Application Development Why iOS?
  • 5. iOS Application Development Once upon a time…
  • 6. … there were phones http://www.flickr.com/photos/adrianblack/371301544/
  • 7. Then the iPhone happened…
  • 8. Before & after https://twitter.com/JoshHelfferich
  • 9. App Store
  • 10. Global Phone Market Units shipped / quarter © Asymco - used with permission
  • 11. Smartphone shipments © Asymco - used with permission
  • 12. © Asymco - used with permission
  • 13. iOS Application Development Developer tools
  • 14. Developer tools
  • 15. Xcode
  • 16. Xcode
  • 17. iOS Simulator
  • 18. Instruments
  • 19. Instruments
  • 20. CocoaPods.org
  • 21. CocoaPods.org
  • 22. Reveal
  • 23. Documentation
  • 24. Documentation
  • 25. Documentation
  • 26. Dash
  • 27. Dash
  • 28. Dash
  • 29. iOS Application Development Building great apps
  • 30. Building great apps ‣ Constraints ‣ small size ‣ limited hardware ‣ one screen at a time ‣ one application at a time * ‣ touch input ‣ Interaction ‣ gestures ‣ shake ‣ orientation ‣ audio switch, volume buttons ‣ home & power buttons
  • 31. List of features too many features? Filter Yes Application Definition Statement App features User journeys Wirefames Prototype
  • 32. Application Definition Statement “A concise, concrete declaration of the app’s main purpose and its intended audience.” https://developer.apple.com/library/ios/documentation/ UserExperience/Conceptual/MobileHIG/
  • 33. Solve real problems "An app must solve a user's problem clearly and elegantly." Eric Hope, User Experience Evangelist, Apple
  • 34. Delivery channels ‣ web app [dedicated] ‣ native app ‣ “hybrid” solutions
  • 35. iOS Application Development Storyboarding
  • 36. What is Storyboarding ‣ Design the “screens” that compose your app => scenes ‣ Visually define the navigation between the scenes => segues ‣ Introduced in: iOS 5 & Xcode 4.2
  • 37. Xcode 5 - default
  • 38. Xcode 4 - optional
  • 39. Main Storyboard
  • 40. A simple app
  • 41. Specialised View Controllers ‣ UITableViewController ‣ UINavigationController ‣ UITabBarController ‣ UICollectionView
  • 42. UITableViewController
  • 43. UINavigationController
  • 44. UITabBarController
  • 45. UIToolbar
  • 46. UICollectionView
  • 47. iOS 6 & 7
  • 48. iPhone 3.5 vs 4-inch
  • 49. iOS Application Development Objective-C
  • 50. What is Objective C ‣ Thin layer on top of C; strict superset of C ‣ Object-oriented programming language ‣ Inspired by SmallTalk ‣ Developed by Stepstone / NeXT Software / Apple ‣ The development language for Mac OSX & iOS devices
  • 51. Object-Oriented Programming a programming paradigm that uses "objects" ! myCar • Number of wheels • Number of seats • Colour • Engine size • Top speed • Drive • Brake • Turn Left • Beep • Fill with petrol MethodsProperties Data + Behaviour
  • 52. Vehicle class Interface .h Implementation .m Vehicle.h Vehicle.m @interface  Vehicle  {     int  wheels;         int  seats;       }   ! -­‐  (void)drive;   -­‐  (void)setWheels:(int)n;   ! @end #import  "Vehicle.h"   ! @implementation  Vehicle   ! -­‐  (void)setWheels:(int)n  {     wheels  =  n;       }   ! -­‐  (void)drive  {     …       }   ! @end
  • 53. Methods syntax -­‐  (void)setWheels:(int)n; return type name argument type argument name type
  • 54. Multiple arguments -­‐  (BOOL)application:(UIApplication  *)application   didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions application:didFinishLaunchingWithOptions: The name of the method is:
  • 55. Multiple arguments + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion; + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;
  • 56. Multiple arguments [UIView animateWithDuration:1.0 delay:0.3 options:UIViewAnimationOptionCurveEaseIn animations:^{ // animations } completion:^(BOOL finished) { // completion block } ]; + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
  • 57. Properties @implementation  Vehicle   ! -­‐  (int)wheels  {     return  wheels;       }   ! -­‐  (void)setWheels:(int)n  {     wheels  =  n;       }   ! @end @interface  Vehicle  :  NSObject  {     int  wheels;       }   ! -­‐  (int)wheels;   -­‐  (void)setWheels:(int)n;   ! @end @implementation  Vehicle   ! ! ! @end @interface  Vehicle  :  NSObject  {   ! }   ! @property  int  noWheels;   ! @end   int  numberWheels;     @synthesize  numberWheels;
  • 58. Properties & dot notation Vehicle  *myCar  =  [Vehicle  new];   ! myCar.wheels  =  5;   ! myCar.wheels  
  • 59. What is a method? typedef  struct  objc_selector  *SEL; ! Vehicle  *myCar  =  [Vehicle  new];   ! [myCar  drive]; objc_msgSend(myCar,  @selector(drive))
  • 60. Sending a message -­‐  (void)setWheels:  (int)n; [myCar  setWheels:4]; objc_msgSend(myCar,  @selector(setWheels:),  4);
  • 61. Sending a message ! Vehicle  *myCar  =  nil;   ! [myCar  drive];   myCar  =  ...;             if  ([myCar  respondsToSelector:@selector(drive)])  {        [myCar  drive];       }  
  • 62. Initialisers Vehicle *myCar = [Vehicle new]; -­‐  (id)initWithWheels:(int)wheels  {     self  =  [super  init];         if  (nil  !=  self)  {          //  Custom  initialization          self.wheels  =  wheels;         }         return  self;       } Vehicle *myCar = [[Vehicle alloc] initWithWheels:4]; Vehicle *myCar = [[Vehicle alloc] init];
  • 63. InitialisersMultiple @interface  Vehicle  :  NSObject   ! @property  int  wheels;   @property  int  seats;   ! -­‐  (id)initWithWheels:(int)wheels  andSeats:(int)seats;   -­‐  (id)initWithWheels:(int)wheels;   -­‐  (id)initWithSeats:(int)seats;   ! @end
  • 64. InitialisersMultiple -­‐  (id)init  {     return  [self  initWithWheels:DefaultNumberWheels  andSeats:DefaultNumberSeats];       }   #define  DefaultNumberWheels  4   #define  DefaultNumberSeats  5 -­‐  (id)initWithWheels:(int)wheels  andSeats:(int)seats{     self  =  [super  init];         if  (nil  !=  self)  {       self.wheels  =  wheels;   self.seats  =  seats;     }         return  self;       } -­‐  (id)initWithWheels:(int)wheels  {     return  [self  initWithWheels:wheels  andSeats:                                    ];       } -­‐  (id)initWithNumberSeats:(int)seats  {     return  [self  initWithWheels:DefaultNumberWheels  andSeats:seats];       } DefaultNumberSeats
  • 65. Inheritance @interface  Truck  :  Vehicle     ! ! ! ! ! ! ! ! ! ! ! @end   @interface  Vehicle  :  NSObject     ! @property  int  wheels;   @property  int  seats;   ! -­‐  (void)drive;   ! @end -­‐  (void)checkLoad;   -­‐  (void)loadWithWeight:(int)weight;   -­‐  (void)unload;                                                      {     int  maxWeight;       } @property  int  currentWeight;
  • 66. Inheritance NSObject NSPredicateNSArray NSComparisonPredicate NSMutableArray UIResponder UIView UIWindow UIControl UIButton UIGestureRecognizer UIApplicationNSNumber NSValue
  • 67. instance class isa superclass superclass metaclass isa metaclass isa superclass NSObject superclass superclass nil metaclass isa superclass superclass
  • 68. Polymorphism & Dynamic typing Vehicle Truck ! - (void)drive Car ! - (void)drive id  aVehicle;   ! ...   ! [aVehicle  drive];
  • 69. id ‣ the generic object type ‣ can be used for object of any type ‣ the object class is determined at runtime (dynamic typing) Vehicle  *aCar; Static typing id  aCar; Dynamic typing
  • 70. Introspection NSObject - (BOOL)isKindOfClass:(Class)aClass; - (BOOL)isMemberOfClass:(Class)aClass; - (Class)superclass; - (Class)class; - (BOOL)respondsToSelector:(SEL)aSelector;
  • 71. Protocols -­‐  (void)load;   -­‐  (void)unload;   -­‐  (float)getWeight; @interface  Truck  :  Vehicle @end
  • 72. Protocols -­‐  (void)load;   -­‐  (void)unload;   -­‐  (float)getWeight; @implementation  Truck   ! ! ! ! ! ! ! ! ! ! ! ! ! @end -­‐  (void)load  {     ...       }   -­‐  (void)unload  {     ...       }   -­‐  (float)getWeight  {     ...       }   @interface  Truck  :  Vehicle @end
  • 73. Protocols -­‐  (void)load;   -­‐  (void)unload;   -­‐  (float)getWeight; @interface  Truck  :  Vehicle @end @protocol  VehicleLoading @end <VehicleLoading>
  • 74. Protocols -­‐  (void)load;   -­‐  (void)unload;   -­‐  (float)getWeight; @interface  Truck  :  Vehicle @end @protocol  VehicleLoading @end <VehicleLoading> @implementation  Truck   ! ! ! ! ! ! ! ! ! ! ! ! ! @end -­‐  (void)load  {     ...         }   -­‐  (void)unload  {     ...         }   -­‐  (float)getWeight  {     ...         }  
  • 75. Category @interface  Vehicle  :  NSObject     ! ...   ! -­‐  (void)drive;   -­‐  (void)brake;   ! @end ! Vehicle  *myCar  =  [Vehicle  new];   [myCar  steerLeft];
  • 76. Category @interface NSString : NSObject ! ! ! ! ! ! @end
  • 77. @interface NSString : NSObject ! ! ! ! ! ! @end Category - (NSUInteger)wordCount;
  • 78. Category #import  "NSString.h"   ! @interface  NSString  (H24Utils)   ! -­‐  (NSUInteger)wordCount;   ! @end NSString+H24Utils.h NSString+H24Utils.m
  • 79. Category #import  "NSString.h"   ! @interface  NSString  (H24Utils)   ! -­‐  (NSUInteger)wordCount;   ! @end NSString+H24Utils.h NSString+H24Utils.m #import  "NSString+H24Utils.h"   ! @implementation  NSString  (H24Utils)   ! -­‐  (NSUInteger)wordCount  {     …       }   ! @end
  • 80. Naming conventions Classes Objects camelCase with capitalised first letter (a.k.a. Pascal case) Prefixes HelloWorldViewController   camelCase viewController,  myCar   NSArray,  UIView  
  • 81. BOOL data type typedef  signed  char     BOOL;   ! #define  YES  (BOOL)1   #define  NO    (BOOL)0
  • 82. Blocks void  (^sayHello)(NSString  *)  =  ^(NSString  *name)  {       NSLog(@“Hello  %@",  name);         }; NSString  *sayHello  =  @"Hello  World";
  • 83. Blocks void  (^sayHello)(NSString  *);   ! sayHello  =  ^(NSString  *name)  {          NSLog(@"Hello  %@",  name);   }; void  (^sayHello)(NSString  *)  =  ^(NSString  *name)  {       NSLog(@“Hello  %@",  name);         };
  • 84. Blocks @interface  Person  :  NSObject   ! @property  NSString  *name;   ! -­‐  (void)welcomeUserWithBlock:(void  (^)(NSString  *))theBlock;   ! @end @implementation  Person   ! …   ! -­‐  (void)welcomeUserWithBlock:(void  (^)(NSString  *))theBlock  {          theBlock(self.name);   }   ! @end
  • 85. Blocks void  (^sayHello)(NSString  *)  =  ^(NSString  *name)  {       NSLog(@“Hello  %@",  name);         }; Person  *theUser  =  [[Person  alloc]  initWithName:@"Paul"]; [theUser  welcomeUserWithBlock:^(NSString  *name)  {            NSLog(@"Hello  %@",  name);   }]; [theUser  welcomeUserWithBlock:sayHello];
  • 86. Blocks Person  *theUser  =  [[Person  alloc]  initWithName:@"Paul"]; [theUser  welcomeUserWithBlock:^(NSString  *name)  {            NSLog(@"Hello  %@",  name);   }];
  • 87. Block scope ! ! Person  *theUser  =  [[Person  alloc]  initWithName:@"Paul"];   ! [theUser  welcomeUserWithBlock:^(NSString  *name)  {            NSLog(@"Hello  %@",  name);   }];    message Module09_02[8635:303] Hello Paul NSString  *message  =  @"Hello  %@";
  • 88. Block scope NSString  *message  =  @"Hello  %@";   ! ! ! ! ! ! Person  *theUser  =  [[Person  alloc]  initWithName:@"Paul"];   ! [theUser  welcomeUserWithBlock:^(NSString  *name)  {            NSLog(@"Hello  %@",  name);   }];    message ...   ! if  (morning)  {          message  =  @"Good  morning  %@";   } Module09_02[8693:303] Good morning Paul
  • 89. Example UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"Are you sure?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; [alert show]; - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { ... }
  • 90. Example @interface  UIAlertView  (H24Blocks)   ! ! +  (UIAlertView*)  alertViewWithTitle:(NSString*)  title                                                                                                message:(NSString*)  message                                        cancelButtonTitle:(NSString*)  cancelButtonTitle                                      otherButtonTitles:(NSArray*)  otherButtons                                                      onDismiss:(IndexBlock)  dismissed                                                                                    onCancel:(EmptyBlock)  cancelled;   ! @end
  • 91. Example [UIAlertView  alertViewWithTitle:@"Hello"                                                  message:@"Hello  World"                              cancelButtonTitle:@"Cancel"                              otherButtonTitles:@[@"OK"]                                              onDismiss:^(int  buttonIndex)  {                                                      NSLog(@"Dismissed");                                              }  onCancel:^{                                                      NSLog(@"Cancelled");                                              }];
  • 92. iOS Application Development Design Patterns
  • 93. Design Patterns ‣ Accessors Pattern ‣ allows access to an object properties through simple methods ‣Anonymous Type Pattern ‣ send message to objects of an uncertain (at compilation) type ‣2-stage Object Creation Pattern ‣ alloc + init = new ‣ allow custom initialisers ‣Outlets, targets & actions ‣ configuration of and interaction with UI elements
  • 94. MVC Model View Controller
  • 95. MV[C] Model View Controller
  • 96. [M]VC Model View Controller
  • 97. [M]VC Model View Controller !View Controller
  • 98. MVC
  • 99. MVC
  • 100. Decorator pattern ‣ add bevaviour to an object ‣ without affecting the behaviour of other objects from the same class
  • 101. Categories ‣ adds functionality to classes without the need to subclass ‣ group common methods and implement them across the relevant framework ‣ informal protocols (unimplemented methods) ‣ anonymous category (private methods)
  • 102. Delegation ‣ a delegate is an object that works together with its delegator to solve a problem ‣ a delegate adds/changes the behaviour of the delegator (avoids subclassing) ‣ loose coupling ‣ a delegate is usually referenced using the anonymous type @interface MyAppDelegate : NSObject <UIApplicationDelegate>
  • 103. Observer pattern ‣ enables communication between objects ‣ no coupling ‣ one object notifies another object (registered as ‘listener’) when a change occurs
  • 104. Notifications ‣ an object registers as observer ‣ when a notification is sent to the Notification Center, it is distributed to all listeners [NSNotificationCenter  defaultCenter]
  • 105. Notifications [[NSNotificationCenter  defaultCenter]  addObserver:self                              selector:@selector(soSomething)                                          name:@"H24CourseNotification"                                     object:nil];     [[NSNotificationCenter  defaultCenter]  postNotificationName:@"H24CourseNotification"                                      object:nil];     [[NSNotificationCenter  defaultCenter]  removeObserver:self];
  • 106. Key-Value Observing ‣ KVC - Key Value Coding ‣ KVO - Key Value Observing
  • 107. KVC @interface  Vehicle  :  NSObject @end
  • 108. KVC @interface  Vehicle  :  NSObject @end @property  NSString  *maker;
  • 109. KVC @interface  Vehicle  :  NSObject @end myCar.maker   [myCar  maker] myCar.maker  =  @"Ford";   [myCar  setMaker:@"Ford"]; @property  NSString  *maker;
  • 110. KVC @interface  Vehicle  :  NSObject @end [myCar  valueForKey:@"maker"];   [myCar  setValue:@"Ford"  forKey:@"maker"]; myCar.maker   [myCar  maker] myCar.maker  =  @"Ford";   [myCar  setMaker:@"Ford"]; @property  NSString  *maker;
  • 111. KVC @interface  Vehicle  :  NSObject @end @property  User  *owner; myCar.maker   [myCar  maker] myCar.maker  =  @"Ford";   [myCar  setMaker:@"Ford"]; @property  NSString  *maker; [myCar  valueForKey:@"maker"];   [myCar  setValue:@"Ford"  forKey:@"maker"];
  • 112. KVC @interface  Vehicle  :  NSObject @end @property  User  *owner; [myCar  valueForKeyPath:@"owner.firstName"]   [myCar  setValue:@"John"  forKeyPath:@"owner.firstName"];   myCar.maker   [myCar  maker] myCar.maker  =  @"Ford";   [myCar  setMaker:@"Ford"]; @property  NSString  *maker; [myCar  valueForKey:@"maker"];   [myCar  setValue:@"Ford"  forKey:@"maker"];
  • 113. KVO [aVehicle  addObserver:self                        forKeyPath:@"owner"                              options:NSKeyValueObservingOptionNew                              context:nil]; options:(NSKeyValueObservingOptionNew  |  NSKeyValueObservingOptionOld)
  • 114. KVO - (void)observeValueForKeyPath:(NSString *)keyPath " ofObject:(id)object " change:(NSDictionary *)change " context:(void *)context
  • 115. KVO [vehicle  removeObserver:self  forKeyPath:@"owner"];
  • 116. Key-Value Observing ‣ KVC - Key Value Coding ‣ KVO - Key Value Observing
  • 117. Facade pattern ‣ simplified interface to a larger body of code ‣ subsystems accessed through a well defined entry point ‣ allows subsystems to change without affecting the overall functionality
  • 118. UIImage +  (UIImage  *)imageWithContentsOfFile:(NSString  *)path +  (UIImage  *)imageNamed:(NSString  *)name
  • 119. Anatomy of an app #import  <UIKit/UIKit.h>   ! #import  "AppDelegate.h"   ! int  main(int  argc,  char  *  argv[])   {          @autoreleasepool  {                  return  UIApplicationMain(argc,  argv,  nil,                                                                    NSStringFromClass([AppDelegate  class]));          }   } main.m
  • 120. iOS Application Development App states
  • 121. Slide Hello24 Ltd. (c) 2014 App states 122 Active Inactive Running Suspende Running Not running Background
  • 122. Slide Hello24 Ltd. (c) 2014 No background 123
  • 123. Slide Hello24 Ltd. (c) 2014 App life cycle 124 Active Inactive Running Suspended iPhone OS 3 iOS 4 Running Not running Running Not running Background
  • 124. Slide Hello24 Ltd. (c) 2014 AppDelegate callbacks ‣ application:willFinishLaunchingWithOptions: ‣ application:didFinishLaunchingWithOptions: ‣ applicationDidBecomeActive: ‣ applicationWillResignActive: ‣ applicationDidEnterBackground: ‣ applicationWillEnterForeground: ‣ applicationWillTerminate: 125
  • 125. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 126 Active Inactive Running Suspended
  • 126. Slide Hello24 Ltd. (c) 2014 App life cycle - app start 127 ForegroundActive Inactive BackgroundRunning Suspended Not running 1
  • 127. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 128 Active Inactive Running Suspended willFinishLaunchingWithOptions: 1
  • 128. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 129 Active Inactive Running Suspended 2 willFinishLaunchingWithOptions: 1
  • 129. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 130 Active Inactive Running Suspended 2 willFinishLaunchingWithOptions: 1 didFinishLaunchingWithOptions:
  • 130. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 131 Active Inactive Running Suspended 2 willFinishLaunchingWithOptions: 1 didFinishLaunchingWithOptions: applicationDidBecomeActive:
  • 131. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle - inactive 132 Active Inactive Running Suspended
  • 132. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 133 Active Inactive Running Suspended
  • 133. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 134 Active Inactive Running Suspended applicationDidResignActive:
  • 134. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 135 Active Inactive Running Suspended applicationDidResignActive:
  • 135. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 136 Active Inactive Running Suspended applicationDidResignActive: applicationDidBecomeActive:
  • 136. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle - background 137 Active Inactive Running Suspended
  • 137. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 138 Active Inactive Running Suspended 1
  • 138. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 139 Active Inactive Running Suspended 1 applicationDidResignActive:
  • 139. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 140 Active Inactive Running Suspended 1 applicationDidResignActive: 2
  • 140. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 141 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground:
  • 141. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 142 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground: 7
  • 142. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 143 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground: 7 8
  • 143. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 144 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground: 7 8 9
  • 144. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 145 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground: 7 8 9 applicationDidEnterForeground:
  • 145. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 146 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground: 7 8 9 10 applicationDidEnterForeground:
  • 146. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 147 Active Inactive Running Suspended 1 applicationDidResignActive: 2 applicationDidEnterBackground: 7 8 9 10 applicationDidEnterForeground: applicationDidBecomeActive:
  • 147. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle - terminate 148 Active Inactive Running Suspended
  • 148. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 149 Active Inactive Running Suspended
  • 149. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 150 Active Inactive Running Suspended
  • 150. Slide Hello24 Ltd. (c) 2014 Foreground Background Not running App life cycle 151 Active Inactive Running Suspended applicationWillTerminate:
  • 151. iOS Application Development Debug & Testing
  • 152. Instruments
  • 153. Instruments - Leaks
  • 154. Instruments - Allocations
  • 155. Instruments - Zombies
  • 156. Instruments - Time Profiler
  • 157. Instruments
  • 158. Network Link Conditioner
  • 159. Network Link Conditioner
  • 160. Network Link Conditioner on device
  • 161. Pony Debugger
  • 162. Pony Debugger [16:04:17] paul@Pro2x:project1 [502] $ ponyd serve --listen-interface=127.0.0.1 PonyGateway starting. Listening on 127.0.0.1:9000 [17:14:22] paul@Pro2x:MyPony [516] $ pod install Setting up CocoaPods master repo Setup completed (read-only access) Analyzing dependencies Downloading dependencies Installing PonyDebugger (0.3.1) Installing SocketRocket (0.3.1-beta2) Generating Pods project Integrating client project ! [!] From now on use `MyPony.xcworkspace`. [deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
  • 163. Pony Debugger        PDDebugger  *debugger  =  [PDDebugger  defaultInstance];          [debugger  connectToURL:[NSURL  URLWithString:@"ws://127.0.0.1:9000/device"]];          [debugger  forwardAllNetworkTraffic];                    [debugger  enableCoreDataDebugging];          [debugger  addManagedObjectContext:self.managedObjectContext  withName:@"MyPony"];                    [debugger  enableViewHierarchyDebugging];          [debugger  enableRemoteLogging];
  • 164. Pony Debugger
  • 165. Pony Debugger
  • 166. Reveal
  • 167. iOS Application Development Ad-Hoc distribution
  • 168. TestFlight
  • 169. TestFlight
  • 170. TestFlight
  • 171. TestFlight
  • 172. HockeyApp
  • 173. HockeyApp
  • 174. HockeyApp
  • 175. iOS Application Development Publishing
  • 176. iTunes Connect
  • 177. New App
  • 178. Pricing Matrix
  • 179. Categories
  • 180. App Rating
  • 181. Review http://reviewtimes.shinydevelopment.com/
  • 182. Ready for sale!
  • 183. Newsstand apps
  • 184. Newsstand apps
  • 185. iAd
  • 186. iAd
  • 187. iAd
  • 188. iOS Application Development What is an app?
  • 189. What is an app? ‣ A package that is installed on a device ‣ Runs in a sandboxed environment ‣ Has limited access to system resources ‣ The limits can change over time ‣ Can retrieve remote information (when connection available) ‣ Can run in background
  • 190. The apps
  • 191. The apps
  • 192. The IPA
  • 193. The App
  • 194. The plan ‣ Why iOS? ‣ Tools ‣ Storyboarding ‣ Objective-C ‣ Design patterns ‣ Debug & Testing ‣ Ad-Hoc distribution ‣ Publishing in the app store
  • 195. Thank you! @pardel ! hello24.com paul@hello24.com

×