SlideShare uma empresa Scribd logo
1 de 196
Baixar para ler offline
iOS Application Development
iOS Developer Overview
Paul Ardeleanu
Assumptions…
You are:

‣ a developer of sorts…

‣ have no or little exposure to iOS

‣ want to learn enough to become ‘dangerous’
The plan
‣ Why iOS?

‣ Tools

‣ Storyboarding

‣ Objective-C

‣ Design patterns

‣ Debug & Testing

‣ Ad-Hoc distribution

‣ Publishing in the app store
iOS Application Development
Why iOS?
iOS Application Development
Once upon a time…
… there were phones
http://www.flickr.com/photos/adrianblack/371301544/
Then the iPhone happened…
Before & after
https://twitter.com/JoshHelfferich
App Store
Global Phone Market
Units shipped / quarter
© Asymco - used with permission
Smartphone shipments
© Asymco - used with permission
© Asymco - used with permission
iOS Application Development
Developer tools
Developer tools
Xcode
Xcode
iOS Simulator
Instruments
Instruments
CocoaPods.org
CocoaPods.org
Reveal
Documentation
Documentation
Documentation
Dash
Dash
Dash
iOS Application Development
Building great apps
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
List of
features
too many
features?
Filter
Yes
Application
Definition
Statement
App
features
User journeys
Wirefames
Prototype
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/
Solve real problems
"An app must solve a user's problem
clearly and elegantly."

Eric Hope, User Experience Evangelist, Apple
Delivery channels
‣ web app [dedicated]

‣ native app

‣ “hybrid” solutions
iOS Application Development
Storyboarding
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
Xcode 5 - default
Xcode 4 - optional
Main Storyboard
A simple app
Specialised View Controllers
‣ UITableViewController 

‣ UINavigationController

‣ UITabBarController

‣ UICollectionView
UITableViewController
UINavigationController
UITabBarController
UIToolbar
UICollectionView
iOS 6 & 7
iPhone 3.5 vs 4-inch
iOS Application Development
Objective-C
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
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
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
Methods syntax
-­‐	
  (void)setWheels:(int)n;
return type name argument type
argument name
type
Multiple arguments
-­‐	
  (BOOL)application:(UIApplication	
  *)application	
  
didFinishLaunchingWithOptions:(NSDictionary	
  *)launchOptions
application:didFinishLaunchingWithOptions:
The name of the method is:
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;
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;
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;
Properties & dot notation
Vehicle	
  *myCar	
  =	
  [Vehicle	
  new];	
  
!
myCar.wheels	
  =	
  5;	
  
!
myCar.wheels	
  
What is a method?
typedef	
  struct	
  objc_selector	
  *SEL;
!
Vehicle	
  *myCar	
  =	
  [Vehicle	
  new];	
  
!
[myCar	
  drive];
objc_msgSend(myCar,	
  @selector(drive))
Sending a message
-­‐	
  (void)setWheels:	
  (int)n;
[myCar	
  setWheels:4];
objc_msgSend(myCar,	
  @selector(setWheels:),	
  4);
Sending a message
!
Vehicle	
  *myCar	
  =	
  nil;	
  
!
[myCar	
  drive];
	
   myCar	
  =	
  ...;	
  	
  
	
   	
  	
  
	
   if	
  ([myCar	
  respondsToSelector:@selector(drive)])	
  {	
  	
  
	
   	
  [myCar	
  drive];	
  	
  
	
   }	
  
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];
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
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
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;
Inheritance
NSObject
NSPredicateNSArray
NSComparisonPredicate
NSMutableArray
UIResponder
UIView
UIWindow UIControl
UIButton
UIGestureRecognizer
UIApplicationNSNumber
NSValue
instance
class
isa
superclass
superclass
metaclass
isa
metaclass
isa
superclass
NSObject
superclass
superclass
nil
metaclass
isa
superclass
superclass
Polymorphism & Dynamic typing
Vehicle
Truck	

!
- (void)drive
Car	

!
- (void)drive
id	
  aVehicle;	
  
!
...	
  
!
[aVehicle	
  drive];
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
Introspection
NSObject
- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (Class)superclass;
- (Class)class;
- (BOOL)respondsToSelector:(SEL)aSelector;
Protocols
-­‐	
  (void)load;	
  
-­‐	
  (void)unload;	
  
-­‐	
  (float)getWeight;
@interface	
  Truck	
  :	
  Vehicle
@end
Protocols
-­‐	
  (void)load;	
  
-­‐	
  (void)unload;	
  
-­‐	
  (float)getWeight;
@implementation	
  Truck	
  
!
!
!
!
!
!
!
!
!
!
!
!
!
@end
-­‐	
  (void)load	
  {	
  
	
   ...	
  	
  	
  
}	
  
-­‐	
  (void)unload	
  {	
  
	
   ...	
  	
  	
  
}	
  
-­‐	
  (float)getWeight	
  {	
  
	
   ...	
  	
  	
  
}	
  
@interface	
  Truck	
  :	
  Vehicle
@end
Protocols
-­‐	
  (void)load;	
  
-­‐	
  (void)unload;	
  
-­‐	
  (float)getWeight;
@interface	
  Truck	
  :	
  Vehicle
@end
@protocol	
  VehicleLoading
@end
<VehicleLoading>
Protocols
-­‐	
  (void)load;	
  
-­‐	
  (void)unload;	
  
-­‐	
  (float)getWeight;
@interface	
  Truck	
  :	
  Vehicle
@end
@protocol	
  VehicleLoading
@end
<VehicleLoading>
@implementation	
  Truck	
  
!
!
!
!
!
!
!
!
!
!
!
!
!
@end
-­‐	
  (void)load	
  {	
  
	
   ...	
  	
  	
  	
  
}	
  
-­‐	
  (void)unload	
  {	
  
	
   ...	
  	
  	
  	
  
}	
  
-­‐	
  (float)getWeight	
  {	
  
	
   ...	
  	
  	
  	
  
}	
  
Category
@interface	
  Vehicle	
  :	
  NSObject	
  	
  
!
...	
  
!
-­‐	
  (void)drive;	
  
-­‐	
  (void)brake;	
  
!
@end
!
Vehicle	
  *myCar	
  =	
  [Vehicle	
  new];	
  
[myCar	
  steerLeft];
Category
@interface NSString : NSObject
!
!
!
!
!
!
@end
@interface NSString : NSObject
!
!
!
!
!
!
@end
Category
- (NSUInteger)wordCount;
Category
#import	
  "NSString.h"	
  
!
@interface	
  NSString	
  (H24Utils)	
  
!
-­‐	
  (NSUInteger)wordCount;	
  
!
@end
NSString+H24Utils.h NSString+H24Utils.m
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
Naming conventions
Classes
Objects
camelCase with capitalised first letter (a.k.a. Pascal case)
Prefixes
HelloWorldViewController	
  
camelCase
viewController,	
  myCar	
  
NSArray,	
  UIView	
  
BOOL data type
typedef	
  signed	
  char	
  	
   BOOL;	
  
!
#define	
  YES	
  (BOOL)1	
  
#define	
  NO	
  	
  (BOOL)0
Blocks
void	
  (^sayHello)(NSString	
  *)	
  =	
  ^(NSString	
  *name)	
  {	
  	
  
	
   NSLog(@“Hello	
  %@",	
  name);	
  	
  	
  	
  
};
NSString	
  *sayHello	
  =	
  @"Hello	
  World";
Blocks
void	
  (^sayHello)(NSString	
  *);	
  
!
sayHello	
  =	
  ^(NSString	
  *name)	
  {	
  
	
  	
  	
  	
  NSLog(@"Hello	
  %@",	
  name);	
  
};
void	
  (^sayHello)(NSString	
  *)	
  =	
  ^(NSString	
  *name)	
  {	
  	
  
	
   NSLog(@“Hello	
  %@",	
  name);	
  	
  	
  	
  
};
Blocks
@interface	
  Person	
  :	
  NSObject	
  
!
@property	
  NSString	
  *name;	
  
!
-­‐	
  (void)welcomeUserWithBlock:(void	
  (^)(NSString	
  *))theBlock;	
  
!
@end
@implementation	
  Person	
  
!
…	
  
!
-­‐	
  (void)welcomeUserWithBlock:(void	
  (^)(NSString	
  *))theBlock	
  {	
  
	
  	
  	
  	
  theBlock(self.name);	
  
}	
  
!
@end
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];
Blocks
Person	
  *theUser	
  =	
  [[Person	
  alloc]	
  initWithName:@"Paul"];
[theUser	
  welcomeUserWithBlock:^(NSString	
  *name)	
  {	
  
	
  	
  	
  	
  	
  NSLog(@"Hello	
  %@",	
  name);	
  
}];
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	
  %@";
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
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 {
...
}
Example
@interface	
  UIAlertView	
  (H24Blocks)	
  
!
!
+	
  (UIAlertView*)	
  alertViewWithTitle:(NSString*)	
  title	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  message:(NSString*)	
  message	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  cancelButtonTitle:(NSString*)	
  cancelButtonTitle	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  otherButtonTitles:(NSArray*)	
  otherButtons	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  onDismiss:(IndexBlock)	
  dismissed	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  onCancel:(EmptyBlock)	
  cancelled;	
  
!
@end
Example
[UIAlertView	
  alertViewWithTitle:@"Hello"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  message:@"Hello	
  World"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  cancelButtonTitle:@"Cancel"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  otherButtonTitles:@[@"OK"]	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  onDismiss:^(int	
  buttonIndex)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  NSLog(@"Dismissed");	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  onCancel:^{	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  NSLog(@"Cancelled");	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }];
iOS Application Development
Design Patterns
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
MVC
Model
View Controller
MV[C]
Model
View Controller
[M]VC
Model
View Controller
[M]VC
Model
View Controller
!View
Controller
MVC
MVC
Decorator pattern
‣ add bevaviour to an object

‣ without affecting the behaviour of other objects from the same
class
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)
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>
Observer pattern
‣ enables communication between objects

‣ no coupling

‣ one object notifies another object (registered as ‘listener’) when
a change occurs
Notifications
‣ an object registers as observer

‣ when a notification is sent to the Notification Center, it is
distributed to all listeners
[NSNotificationCenter	
  defaultCenter]
Notifications
[[NSNotificationCenter	
  defaultCenter]	
  addObserver:self	
  	
  
	
   	
   	
   	
   	
   	
   	
   	
   	
  	
   	
  	
   	
  selector:@selector(soSomething)	
  	
  	
  	
  	
  
	
   	
  	
   	
   	
   	
   	
   	
   	
   	
   	
   	
   	
  	
   	
  	
  name:@"H24CourseNotification"	
  	
  	
  	
  
	
   	
  	
   	
   	
   	
   	
   	
   	
   	
   	
   	
   	
  	
   object:nil];	
  	
  
[[NSNotificationCenter	
  defaultCenter]	
  postNotificationName:@"H24CourseNotification"	
  	
  
	
   	
  	
   	
   	
   	
   	
   	
   	
   	
   	
   	
   	
   	
   	
   	
  	
  object:nil];	
  	
  
[[NSNotificationCenter	
  defaultCenter]	
  removeObserver:self];
Key-Value Observing
‣ KVC - Key Value Coding

‣ KVO - Key Value Observing
KVC
@interface	
  Vehicle	
  :	
  NSObject
@end
KVC
@interface	
  Vehicle	
  :	
  NSObject
@end
@property	
  NSString	
  *maker;
KVC
@interface	
  Vehicle	
  :	
  NSObject
@end
myCar.maker	
  
[myCar	
  maker]
myCar.maker	
  =	
  @"Ford";	
  
[myCar	
  setMaker:@"Ford"];
@property	
  NSString	
  *maker;
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;
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"];
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"];
KVO
[aVehicle	
  addObserver:self	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  forKeyPath:@"owner"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  options:NSKeyValueObservingOptionNew	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  context:nil];
options:(NSKeyValueObservingOptionNew	
  |	
  NSKeyValueObservingOptionOld)
KVO
- (void)observeValueForKeyPath:(NSString *)keyPath "
ofObject:(id)object "
change:(NSDictionary *)change "
context:(void *)context
KVO
[vehicle	
  removeObserver:self	
  forKeyPath:@"owner"];
Key-Value Observing
‣ KVC - Key Value Coding

‣ KVO - Key Value Observing
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
UIImage
+	
  (UIImage	
  *)imageWithContentsOfFile:(NSString	
  *)path
+	
  (UIImage	
  *)imageNamed:(NSString	
  *)name
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
iOS Application Development
App states
Slide Hello24 Ltd. (c) 2014
App states
122
Active
Inactive
Running
Suspende
Running
Not running
Background
Slide Hello24 Ltd. (c) 2014
No background
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
Slide Hello24 Ltd. (c) 2014
AppDelegate callbacks
‣ application:willFinishLaunchingWithOptions:

‣ application:didFinishLaunchingWithOptions:

‣ applicationDidBecomeActive:

‣ applicationWillResignActive:

‣ applicationDidEnterBackground:

‣ applicationWillEnterForeground:

‣ applicationWillTerminate:
125
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
126
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
App life cycle - app start
127
ForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
1
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
128
Active
Inactive
Running
Suspended
willFinishLaunchingWithOptions:
1
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
129
Active
Inactive
Running
Suspended
2
willFinishLaunchingWithOptions:
1
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
130
Active
Inactive
Running
Suspended
2
willFinishLaunchingWithOptions:
1
didFinishLaunchingWithOptions:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
131
Active
Inactive
Running
Suspended
2
willFinishLaunchingWithOptions:
1
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle - inactive
132
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
133
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
134
Active
Inactive
Running
Suspended
applicationDidResignActive:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
135
Active
Inactive
Running
Suspended
applicationDidResignActive:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
136
Active
Inactive
Running
Suspended
applicationDidResignActive:
applicationDidBecomeActive:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle - background
137
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
138
Active
Inactive
Running
Suspended
1
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
139
Active
Inactive
Running
Suspended
1
applicationDidResignActive:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
140
Active
Inactive
Running
Suspended
1
applicationDidResignActive:
2
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
141
Active
Inactive
Running
Suspended
1
applicationDidResignActive:
2
applicationDidEnterBackground:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
142
Active
Inactive
Running
Suspended
1
applicationDidResignActive:
2
applicationDidEnterBackground:
7
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
143
Active
Inactive
Running
Suspended
1
applicationDidResignActive:
2
applicationDidEnterBackground:
7 8
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
144
Active
Inactive
Running
Suspended
1
applicationDidResignActive:
2
applicationDidEnterBackground:
7 8
9
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:
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:
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:
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle - terminate
148
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
149
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
150
Active
Inactive
Running
Suspended
Slide Hello24 Ltd. (c) 2014
Foreground
Background
Not running
App life cycle
151
Active
Inactive
Running
Suspended
applicationWillTerminate:
iOS Application Development
Debug & Testing
Instruments
Instruments - Leaks
Instruments - Allocations
Instruments - Zombies
Instruments - Time Profiler
Instruments
Network Link Conditioner
Network Link Conditioner
Network Link Conditioner on device
Pony Debugger
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.
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];
Pony Debugger
Pony Debugger
Reveal
iOS Application Development
Ad-Hoc distribution
TestFlight
TestFlight
TestFlight
TestFlight
HockeyApp
HockeyApp
HockeyApp
iOS Application Development
Publishing
iTunes Connect
New App
Pricing Matrix
Categories
App Rating
Review
http://reviewtimes.shinydevelopment.com/
Ready for sale!
Newsstand apps
Newsstand apps
iAd
iAd
iAd
iOS Application Development
What is an app?
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
The apps
The apps
The IPA
The App
The plan
‣ Why iOS?

‣ Tools

‣ Storyboarding

‣ Objective-C

‣ Design patterns

‣ Debug & Testing

‣ Ad-Hoc distribution

‣ Publishing in the app store
Thank you!
@pardel

!
hello24.com

paul@hello24.com

Mais conteúdo relacionado

Destaque

Tuning Android Applications (Part One)
Tuning Android Applications (Part One)Tuning Android Applications (Part One)
Tuning Android Applications (Part One)CommonsWare
 
Objective-C for Java developers
Objective-C for Java developersObjective-C for Java developers
Objective-C for Java developersFábio Bernardo
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK toolsHaribabu Nandyal Padmanaban
 
Performance optimization for Android
Performance optimization for AndroidPerformance optimization for Android
Performance optimization for AndroidArslan Anwar
 
LAS16-201: ART JIT in Android N
LAS16-201: ART JIT in Android NLAS16-201: ART JIT in Android N
LAS16-201: ART JIT in Android NLinaro
 
Tuning android for low ram devices
Tuning android for low ram devicesTuning android for low ram devices
Tuning android for low ram devicesDroidcon Berlin
 
Android Performance Best Practices
Android Performance Best Practices Android Performance Best Practices
Android Performance Best Practices Amgad Muhammad
 
Objective-C for Java Developers
Objective-C for Java DevelopersObjective-C for Java Developers
Objective-C for Java DevelopersBob McCune
 
Java Garbage Collection, Monitoring, and Tuning
Java Garbage Collection, Monitoring, and TuningJava Garbage Collection, Monitoring, and Tuning
Java Garbage Collection, Monitoring, and TuningCarol McDonald
 
Jvm Performance Tunning
Jvm Performance TunningJvm Performance Tunning
Jvm Performance TunningTerry Cho
 
Layer architecture of ios (1)
Layer architecture of ios (1)Layer architecture of ios (1)
Layer architecture of ios (1)dwipalp
 
Building iOS App Project & Architecture
Building iOS App Project & ArchitectureBuilding iOS App Project & Architecture
Building iOS App Project & ArchitectureMassimo Oliviero
 
MySQL Performance Tuning: Top 10 Tips
MySQL Performance Tuning: Top 10 TipsMySQL Performance Tuning: Top 10 Tips
MySQL Performance Tuning: Top 10 TipsOSSCube
 
Google ART (Android RunTime)
Google ART (Android RunTime)Google ART (Android RunTime)
Google ART (Android RunTime)Niraj Solanke
 
Designing better user interfaces
Designing better user interfacesDesigning better user interfaces
Designing better user interfacesJohan Ronsse
 
Android & iOS Automation Using Appium
Android & iOS Automation Using AppiumAndroid & iOS Automation Using Appium
Android & iOS Automation Using AppiumMindfire Solutions
 
iOS for Android Developers (with Swift)
iOS for Android Developers (with Swift)iOS for Android Developers (with Swift)
iOS for Android Developers (with Swift)David Truxall
 

Destaque (20)

Tuning Android Applications (Part One)
Tuning Android Applications (Part One)Tuning Android Applications (Part One)
Tuning Android Applications (Part One)
 
Objective-C for Java developers
Objective-C for Java developersObjective-C for Java developers
Objective-C for Java developers
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
 
Introduction to ART (Android Runtime)
Introduction to ART (Android Runtime)Introduction to ART (Android Runtime)
Introduction to ART (Android Runtime)
 
iOS Application Testing
iOS Application TestingiOS Application Testing
iOS Application Testing
 
Performance optimization for Android
Performance optimization for AndroidPerformance optimization for Android
Performance optimization for Android
 
LAS16-201: ART JIT in Android N
LAS16-201: ART JIT in Android NLAS16-201: ART JIT in Android N
LAS16-201: ART JIT in Android N
 
Tuning android for low ram devices
Tuning android for low ram devicesTuning android for low ram devices
Tuning android for low ram devices
 
Android Performance Best Practices
Android Performance Best Practices Android Performance Best Practices
Android Performance Best Practices
 
Objective-C for Java Developers
Objective-C for Java DevelopersObjective-C for Java Developers
Objective-C for Java Developers
 
Java Garbage Collection, Monitoring, and Tuning
Java Garbage Collection, Monitoring, and TuningJava Garbage Collection, Monitoring, and Tuning
Java Garbage Collection, Monitoring, and Tuning
 
Jvm Performance Tunning
Jvm Performance TunningJvm Performance Tunning
Jvm Performance Tunning
 
Layer architecture of ios (1)
Layer architecture of ios (1)Layer architecture of ios (1)
Layer architecture of ios (1)
 
Building iOS App Project & Architecture
Building iOS App Project & ArchitectureBuilding iOS App Project & Architecture
Building iOS App Project & Architecture
 
MySQL Performance Tuning: Top 10 Tips
MySQL Performance Tuning: Top 10 TipsMySQL Performance Tuning: Top 10 Tips
MySQL Performance Tuning: Top 10 Tips
 
Google ART (Android RunTime)
Google ART (Android RunTime)Google ART (Android RunTime)
Google ART (Android RunTime)
 
Designing better user interfaces
Designing better user interfacesDesigning better user interfaces
Designing better user interfaces
 
Android & iOS Automation Using Appium
Android & iOS Automation Using AppiumAndroid & iOS Automation Using Appium
Android & iOS Automation Using Appium
 
Architecting iOS Project
Architecting iOS ProjectArchitecting iOS Project
Architecting iOS Project
 
iOS for Android Developers (with Swift)
iOS for Android Developers (with Swift)iOS for Android Developers (with Swift)
iOS for Android Developers (with Swift)
 

Semelhante a iOS Developer Overview - DevWeek 2014

RubyMotion
RubyMotionRubyMotion
RubyMotionMark
 
iOS,From Development to Distribution
iOS,From Development to DistributioniOS,From Development to Distribution
iOS,From Development to DistributionTunvir Rahman Tusher
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftOleksandr Stepanov
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularTodd Anglin
 
Cross Platform Mobile App Development
Cross Platform Mobile App DevelopmentCross Platform Mobile App Development
Cross Platform Mobile App DevelopmentAnnmarie Lanesey
 
Flutter festival - building ui's with flutter
Flutter festival - building ui's with flutterFlutter festival - building ui's with flutter
Flutter festival - building ui's with flutterApoorv Pandey
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentanistar sung
 
One Page to Test Them All!
One Page to Test Them All!One Page to Test Them All!
One Page to Test Them All!Thoughtworks
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsFITC
 
Empowering the Mobile Web - Mills
Empowering the Mobile Web - MillsEmpowering the Mobile Web - Mills
Empowering the Mobile Web - MillsCodemotion
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"Chris Mills
 
APAC Webinar: Say Hello To Xamarin.Forms
APAC Webinar: Say Hello To Xamarin.FormsAPAC Webinar: Say Hello To Xamarin.Forms
APAC Webinar: Say Hello To Xamarin.FormsNish Anil
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineRicardo Silva
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceJen Looper
 

Semelhante a iOS Developer Overview - DevWeek 2014 (20)

RubyMotion
RubyMotionRubyMotion
RubyMotion
 
Intro to appcelerator
Intro to appceleratorIntro to appcelerator
Intro to appcelerator
 
iOS,From Development to Distribution
iOS,From Development to DistributioniOS,From Development to Distribution
iOS,From Development to Distribution
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
 
Cross Platform Mobile App Development
Cross Platform Mobile App DevelopmentCross Platform Mobile App Development
Cross Platform Mobile App Development
 
React Native
React NativeReact Native
React Native
 
Flutter festival - building ui's with flutter
Flutter festival - building ui's with flutterFlutter festival - building ui's with flutter
Flutter festival - building ui's with flutter
 
Day 1
Day 1Day 1
Day 1
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
 
JavaScript Core
JavaScript CoreJavaScript Core
JavaScript Core
 
One Page to Test Them All!
One Page to Test Them All!One Page to Test Them All!
One Page to Test Them All!
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris Mills
 
Empowering the Mobile Web - Mills
Empowering the Mobile Web - MillsEmpowering the Mobile Web - Mills
Empowering the Mobile Web - Mills
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"
 
APAC Webinar: Say Hello To Xamarin.Forms
APAC Webinar: Say Hello To Xamarin.FormsAPAC Webinar: Say Hello To Xamarin.Forms
APAC Webinar: Say Hello To Xamarin.Forms
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT Conference
 
mobl
moblmobl
mobl
 
NativeScript + Push Notifications
NativeScript + Push NotificationsNativeScript + Push Notifications
NativeScript + Push Notifications
 

Mais de Paul Ardeleanu

Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSPaul Ardeleanu
 
Test or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOSTest or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOSPaul Ardeleanu
 
Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSPaul Ardeleanu
 
Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?Paul Ardeleanu
 
iOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul ArdeleanuiOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul ArdeleanuPaul Ardeleanu
 
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan KorosiiOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan KorosiPaul Ardeleanu
 
iOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasiOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasPaul Ardeleanu
 
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru IliescuiOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru IliescuPaul Ardeleanu
 
7 things one should learn from iOS
7 things one should learn from iOS7 things one should learn from iOS
7 things one should learn from iOSPaul Ardeleanu
 
To swiftly go where no OS has gone before
To swiftly go where no OS has gone beforeTo swiftly go where no OS has gone before
To swiftly go where no OS has gone beforePaul Ardeleanu
 
Prototyping saves your bacon
Prototyping saves your baconPrototyping saves your bacon
Prototyping saves your baconPaul Ardeleanu
 
My talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February MeetupMy talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February MeetupPaul Ardeleanu
 
How to prototype your mobile apps
How to prototype your mobile appsHow to prototype your mobile apps
How to prototype your mobile appsPaul Ardeleanu
 
Prototyping your iPhone/iPad app
Prototyping your iPhone/iPad appPrototyping your iPhone/iPad app
Prototyping your iPhone/iPad appPaul Ardeleanu
 
There is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPadThere is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPadPaul Ardeleanu
 
The Adventure - From idea to the iPhone
The Adventure - From idea to the iPhoneThe Adventure - From idea to the iPhone
The Adventure - From idea to the iPhonePaul Ardeleanu
 

Mais de Paul Ardeleanu (20)

Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOS
 
Test or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOSTest or Go Fishing - A guide on how to write better Swift for iOS
Test or Go Fishing - A guide on how to write better Swift for iOS
 
Prototype your dream
Prototype your dreamPrototype your dream
Prototype your dream
 
Test or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOSTest or Go Fishing - a guide on how to write better Swift for iOS
Test or Go Fishing - a guide on how to write better Swift for iOS
 
Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?Architecting apps - Can we write better code by planning ahead?
Architecting apps - Can we write better code by planning ahead?
 
iOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul ArdeleanuiOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
iOSNeXT.ro - 10 reasons you'll love Swift - Paul Ardeleanu
 
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan KorosiiOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
iOSNeXT.ro - Scout mapping & navigation SDK for iOS developers - Zoltan Korosi
 
iOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark FilipasiOSNeXT.ro - Catwalk15 - Mark Filipas
iOSNeXT.ro - Catwalk15 - Mark Filipas
 
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru IliescuiOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
iOSNeXT.ro - Lessons learnt as Indie Developer in Romania - Alexandru Iliescu
 
7 things one should learn from iOS
7 things one should learn from iOS7 things one should learn from iOS
7 things one should learn from iOS
 
iOScon 2014
iOScon 2014 iOScon 2014
iOScon 2014
 
To swiftly go where no OS has gone before
To swiftly go where no OS has gone beforeTo swiftly go where no OS has gone before
To swiftly go where no OS has gone before
 
Prototyping saves your bacon
Prototyping saves your baconPrototyping saves your bacon
Prototyping saves your bacon
 
My talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February MeetupMy talk @ Timisoara Mobile Development Group February Meetup
My talk @ Timisoara Mobile Development Group February Meetup
 
How to prototype your mobile apps
How to prototype your mobile appsHow to prototype your mobile apps
How to prototype your mobile apps
 
Native vs html5
Native vs html5Native vs html5
Native vs html5
 
Prototyping your iPhone/iPad app
Prototyping your iPhone/iPad appPrototyping your iPhone/iPad app
Prototyping your iPhone/iPad app
 
Whats new in iOS5
Whats new in iOS5Whats new in iOS5
Whats new in iOS5
 
There is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPadThere is no spoon - iPhone vs. iPad
There is no spoon - iPhone vs. iPad
 
The Adventure - From idea to the iPhone
The Adventure - From idea to the iPhoneThe Adventure - From idea to the iPhone
The Adventure - From idea to the iPhone
 

Último

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 

Último (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 

iOS Developer Overview - DevWeek 2014