in the brain of paul ardeleanu: what's new in ios 4
DESCRIPTION
Skills Matter Presentation: "What's new in iOS 4"TRANSCRIPT
What’s new in iOS4Paul Ardeleanu
@pardel
SkillsMatter - August 12th 2010
SkillsMatter - August 12th 2010
http://pardel.net
What was missing?
Multitasking
Flash
SkillsMatter - August 12th 2010
http://pardel.net
What’s new in iOS4?
Multitasking
Local Notifications
iAd
Game Center
New Frameworks & APIs
SkillsMatter - August 12th 2010
http://pardel.net
1. Multitasking
SkillsMatter - August 12th 2010
http://pardel.net
1. Multitasking ... of a different kind
SkillsMatter - August 12th 2010
http://pardel.net
Multitasking
Fast app switching
Task Completion
Background Audio
Navigation & Location tracking
VoIP
SkillsMatter - August 12th 2010
http://pardel.net
Fast App Switching
Running
Not running
SkillsMatter - August 12th 2010
http://pardel.net
Fast App Switching
Running
Not running
Active
Inactive
SkillsMatter - August 12th 2010
http://pardel.net
Fast App Switching
Running
Not running
Running
Not running
Background
Active
Inactive
SkillsMatter - August 12th 2010
http://pardel.net
Fast App Switching
Running
Not running
Running
Not running
Background
Active
Inactive
Running
Suspended
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
didFinishLaunchingWithOptions:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
applicationDidResignActive:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
applicationDidEnterBackground:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
applicationDidEnterBackground:
applicationDidEnterForeground:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
applicationDidEnterBackground:
applicationDidEnterForeground:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
applicationDidEnterBackground:
applicationDidEnterForeground:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
didFinishLaunchingWithOptions:
applicationDidBecomeActive:
applicationDidResignActive:
applicationDidTerminate:
applicationDidEnterBackground:
applicationDidEnterForeground:
SkillsMatter - August 12th 2010
http://pardel.net
UIApplicationDelegate Callbacks
//// MyAppDelegate.m//
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application
UIApplicationDidEnterBackgroundNotificationUIApplicationDidEnterForegroundNotification
SkillsMatter - August 12th 2010
http://pardel.net
UIApplicationDelegate Callbacks
//// MyAppDelegate.m//
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application
Demo
UIApplicationDidEnterBackgroundNotificationUIApplicationDidEnterForegroundNotification
SkillsMatter - August 12th 2010
http://pardel.net
UIApplicationtypedef enum { UIApplicationStateActive, UIApplicationStateInactive, UIApplicationStateBackground} UIApplicationState;
@property(nonatomic,readonly) UIApplicationState applicationState
[[UIApplication sharedApplication] applicationState]
SkillsMatter - August 12th 2010
http://pardel.net
Best practicesForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
applicationDidEnterBackground:
applicationDidEnterForeground:
SkillsMatter - August 12th 2010
http://pardel.net
Best practicesForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
applicationDidEnterBackground:
applicationDidEnterForeground:
✦ save state✦ minimise memory usage✦ change the UI accordingly✦ stop Bonjour & networking✦ stop shared system data
access & GPU
SkillsMatter - August 12th 2010
http://pardel.net
Best practicesForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
applicationDidEnterBackground:
applicationDidEnterForeground:
✦ save state✦ minimise memory usage✦ change the UI accordingly✦ stop Bonjour & networking✦ stop shared system data
access & GPU
your app can be terminated at any time
SkillsMatter - August 12th 2010
http://pardel.net
No Multitasking
UIApplicationExitsOnSuspend
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
applicationDidEnterBackground:
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
applicationDidEnterBackground:
applicationDidTerminate:
SkillsMatter - August 12th 2010
http://pardel.net
Background Services
Task completion
Background Audio
VoIP
Background Location
SkillsMatter - August 12th 2010
http://pardel.net
Task completionForegroundActive
Inactive
Background
Not running
SkillsMatter - August 12th 2010
http://pardel.net
Task completionForegroundActive
Inactive
BackgroundRunning
Not running
SkillsMatter - August 12th 2010
http://pardel.net
Task completionForegroundActive
Inactive
BackgroundRunning
Not running
SkillsMatter - August 12th 2010
http://pardel.net
Task completionForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
SkillsMatter - August 12th 2010
http://pardel.net
Task completionForegroundActive
Inactive
BackgroundRunning
Not running
SkillsMatter - August 12th 2010
http://pardel.net
Task completionUIApplication
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler;- (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier;
@property(nonatomic,readonly) NSTimeInterval backgroundTimeRemaining;
SkillsMatter - August 12th 2010
http://pardel.net
Task completionUIApplication
typedef NSUInteger UIBackgroundTaskIdentifier;
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler;- (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier;
@property(nonatomic,readonly) NSTimeInterval backgroundTimeRemaining;
SkillsMatter - August 12th 2010
http://pardel.net
Task completion
self.bgTaskId = [app beginBackgroundTaskWithExpirationHandler: ^{ [self stopLongTask];}];...[[UIApplication sharedApplication] endBackgroundTask:self.bgTaskId];
UIApplication
typedef NSUInteger UIBackgroundTaskIdentifier;
- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler;- (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier;
@property(nonatomic,readonly) NSTimeInterval backgroundTimeRemaining;
SkillsMatter - August 12th 2010
http://pardel.net
Background Services
Task completion
Background Audio
VoIP
Background Location
SkillsMatter - August 12th 2010
http://pardel.net
Background Services
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
Background
Not running
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Not running
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Not running
AVAudioSession
AVAudioSessionDelegate
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Not running
AVAudioSession
AVAudioSessionDelegate
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
beginInteruption
AVAudioSession
AVAudioSessionDelegate
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
beginInteruption
AVAudioSession
AVAudioSessionDelegate
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
Running
beginInteruption
AVAudioSession
AVAudioSessionDelegate
endInteruption
SkillsMatter - August 12th 2010
http://pardel.net
App Life CycleForegroundActive
Inactive
BackgroundRunning
Suspended
Not running
Running
beginInteruption
AVAudioSession
AVAudioSessionDelegate
endInterruptionWithFlags:
SkillsMatter - August 12th 2010
http://pardel.net
Background Location Services
Turn by turn directions
Location tracking✦ Significant location changing✦ Region monitoring (iPhone4 only)
SkillsMatter - August 12th 2010
http://pardel.net
Turn by turn directions
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;[locationManager startUpdatingLocation];
SkillsMatter - August 12th 2010
http://pardel.net
Turn by turn directions
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;[locationManager startUpdatingLocation];
extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation;extern const CLLocationAccuracy kCLLocationAccuracyBest;extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;extern const CLLocationAccuracy kCLLocationAccuracyKilometer;extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
SkillsMatter - August 12th 2010
http://pardel.net
Turn by turn directions
kCLLocationAccuracyBestForNavigationUse the highest possible accuracy and combine it with additional sensor data. This level of accuracy is intended for use in navigation applications that require precise position information at all times and are intended to be used only while the device is plugged in.
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;[locationManager startUpdatingLocation];
extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation;extern const CLLocationAccuracy kCLLocationAccuracyBest;extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;extern const CLLocationAccuracy kCLLocationAccuracyKilometer;extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
a) Significant location changing
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
a) Significant location changing
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
a) Significant location changing
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
a) Significant location changing
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
a) Significant location changing
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;[locationManager startMonitoringSignificantLocationChanges];
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
a) Significant location changing
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;[locationManager startMonitoringSignificantLocationChanges];
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
b) Region monitoring (iPhone4 only)
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
b) Region monitoring (iPhone4 only)
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
b) Region monitoring (iPhone4 only)
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
SkillsMatter - August 12th 2010
http://pardel.net
Location tracking
b) Region monitoring (iPhone4 only)
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;CLLocationCoordinate2D regionCenterCoordinate;tempCoordinate.latitude = 51.5245;tempCoordinate.longitude = -0.0995;
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:regionCenterCoordinate radius:10.0 identifier:@"Skills Matter"];[locationManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyNearestTenMeters];
SkillsMatter - August 12th 2010
http://pardel.net
Multitasking
Fast app switching
Task Completion
Background Audio
Navigation & Location tracking
VoIP
SkillsMatter - August 12th 2010
http://pardel.net
2. Local Notifications
SkillsMatter - August 12th 2010
http://pardel.net
Local notifications// check if the local notification class exists Class cls = NSClassFromString(@"UILocalNotification");if (cls != nil) {
// check if the device is supporting multitasking UIDevice* device = [UIDevice currentDevice]; if ([device respondsToSelector:@selector(isMultitaskingSupported)]) { UIApplication* app = [UIApplication sharedApplication]; UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease]; if (alarm) { alarm.fireDate = [NSDate date]; alarm.timeZone = [NSTimeZone defaultTimeZone]; alarm.repeatInterval = 0; alarm.soundName = @"alert.caf"; alarm.alertBody = @"Ha ha"; [app scheduleLocalNotification:alarm]; } }
}
SkillsMatter - August 12th 2010
http://pardel.net
Local notifications// check if the local notification class exists Class cls = NSClassFromString(@"UILocalNotification");if (cls != nil) {
// check if the device is supporting multitasking UIDevice* device = [UIDevice currentDevice]; if ([device respondsToSelector:@selector(isMultitaskingSupported)]) { UIApplication* app = [UIApplication sharedApplication]; UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease]; if (alarm) { alarm.fireDate = [NSDate date]; alarm.timeZone = [NSTimeZone defaultTimeZone]; alarm.repeatInterval = 0; alarm.soundName = @"alert.caf"; alarm.alertBody = @"Ha ha"; [app scheduleLocalNotification:alarm]; } }
}
Demo
SkillsMatter - August 12th 2010
http://pardel.net
iAd
Nov 09 - Google acquires AdMob for $750 million in stock
Jan 10 - Apple acquires Quattro Wireless for $275 million
SkillsMatter - August 12th 2010
http://pardel.net
iAd
CPM + CPC = eCPM
SkillsMatter - August 12th 2010
http://pardel.net
iAd
CPM + CPC = eCPM
SkillsMatter - August 12th 2010
http://pardel.net
iAd
CPM + CPC = eCPM
60% revenues
SkillsMatter - August 12th 2010
http://pardel.net
iAd.frameworkADBannerView
@property(nonatomic, copy) NSSet *requiredContentSizeIdentifiers;@property (nonatomic, copy) NSString *currentContentSizeIdentifier;
@property(nonatomic, readonly) BOOL bannerLoaded;@property(nonatomic, readonly) BOOL bannerViewActionInProgress;
- (void)cancelBannerViewAction;
@property(nonatomic, assign) id<ADBannerViewDelegate> delegate;
SkillsMatter - August 12th 2010
http://pardel.net
iAd.frameworkADBannerView
@property(nonatomic, copy) NSSet *requiredContentSizeIdentifiers;@property (nonatomic, copy) NSString *currentContentSizeIdentifier;
@property(nonatomic, readonly) BOOL bannerLoaded;@property(nonatomic, readonly) BOOL bannerViewActionInProgress;
- (void)cancelBannerViewAction;
@property(nonatomic, assign) id<ADBannerViewDelegate> delegate;
SkillsMatter - August 12th 2010
http://pardel.net
iAd.frameworkADBannerView
@property(nonatomic, copy) NSSet *requiredContentSizeIdentifiers;@property (nonatomic, copy) NSString *currentContentSizeIdentifier;
@property(nonatomic, readonly) BOOL bannerLoaded;@property(nonatomic, readonly) BOOL bannerViewActionInProgress;
- (void)cancelBannerViewAction;
@property(nonatomic, assign) id<ADBannerViewDelegate> delegate;
SkillsMatter - August 12th 2010
http://pardel.net
iAd.frameworkADBannerView
ADBannerContentSizeIdentifier320x50ADBannerContentSizeIdentifier480x32
@property(nonatomic, copy) NSSet *requiredContentSizeIdentifiers;@property (nonatomic, copy) NSString *currentContentSizeIdentifier;
@property(nonatomic, readonly) BOOL bannerLoaded;@property(nonatomic, readonly) BOOL bannerViewActionInProgress;
- (void)cancelBannerViewAction;
@property(nonatomic, assign) id<ADBannerViewDelegate> delegate;
SkillsMatter - August 12th 2010
http://pardel.net
iAd.framework
ADBannerViewDelegate
ADBannerView
- (void)bannerViewDidLoadAd:(ADBannerView *)banner;
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave;- (void)bannerViewActionDidFinish:(ADBannerView *)banner;
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error;
SkillsMatter - August 12th 2010
http://pardel.net
iAd.framework
ADBannerViewDelegate
Demo
ADBannerView
- (void)bannerViewDidLoadAd:(ADBannerView *)banner;
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave;- (void)bannerViewActionDidFinish:(ADBannerView *)banner;
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error;
SkillsMatter - August 12th 2010
http://pardel.net
iAd JS
✦ Banner✦ Main advertising screen
HTML5 + CSS3
SkillsMatter - August 12th 2010
http://pardel.net
4. Game Center
SkillsMatter - August 12th 2010
http://pardel.net
Game Center
✦ Beta✦ Social gaming network✦ Leaderboards & Achievements
SkillsMatter - August 12th 2010
http://pardel.net
5. New Frameworks & APIs
SkillsMatter - August 12th 2010
http://pardel.net
Block Objectsself.bgTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ [self stopLongTask];}];
SkillsMatter - August 12th 2010
http://pardel.net
Block Objectsself.bgTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ [self stopLongTask];}];
an object with some code
respond to NSObject methods
available in C
SkillsMatter - August 12th 2010
http://pardel.net
Blocks
returnType (^myBlockName) (argumentType) = ^(argumentType argumentName){ returnType x; ... return x;}
SkillsMatter - August 12th 2010
http://pardel.net
Blocks
returnType (^myBlockName) (argumentType) = ^(argumentType argumentName){ returnType x; ... return x;}
int (^myBlock) (int) = ^(int num) { return num * multiplier; }
SkillsMatter - August 12th 2010
http://pardel.net
Blocks
returnType (^myBlockName) (argumentType) = ^(argumentType argumentName){ returnType x; ... return x;}
int (^myBlock) (int) = ^(int num) { return num * multiplier; }
int multiplier = 5;
SkillsMatter - August 12th 2010
http://pardel.net
Blocks
returnType (^myBlockName) (argumentType) = ^(argumentType argumentName){ returnType x; ... return x;}
int (^myBlock) (int) = ^(int num) { return num * multiplier; }
int multiplier = 5;
myBlock(7);
SkillsMatter - August 12th 2010
http://pardel.net
New Frameworks
Quick Look
Event Kit
Core Motion
Core Telephony
Data Protection
SkillsMatter - August 12th 2010
http://pardel.net
Event Kit
EKEventStore@property(nonatomic, readonly) NSArray *calendars@property(nonatomic, readonly) EKCalendar *defaultCalendarForNewEvents
SkillsMatter - August 12th 2010
http://pardel.net
Event Kit
EKEventStore@property(nonatomic, readonly) NSArray *calendars@property(nonatomic, readonly) EKCalendar *defaultCalendarForNewEvents
EKCalendar
SkillsMatter - August 12th 2010
http://pardel.net
Event Kit
EKEventStore@property(nonatomic, readonly) NSArray *calendars@property(nonatomic, readonly) EKCalendar *defaultCalendarForNewEvents
EKCalendartypedef enum { EKCalendarTypeLocal, EKCalendarTypeCalDAV, EKCalendarTypeExchange, EKCalendarTypeSubscription, EKCalendarTypeBirthday,} EKCalendarType;
SkillsMatter - August 12th 2010
http://pardel.net
Event Kit
EKEventStore@property(nonatomic, readonly) NSArray *calendars@property(nonatomic, readonly) EKCalendar *defaultCalendarForNewEvents
EKCalendar EKEventtypedef enum { EKCalendarTypeLocal, EKCalendarTypeCalDAV, EKCalendarTypeExchange, EKCalendarTypeSubscription, EKCalendarTypeBirthday,} EKCalendarType;
alarms -> EKAlarmorganizer, attendees -> EKParticipantrecurrenceRule -> EKRecurrenceRule
SkillsMatter - August 12th 2010
http://pardel.net
New API’s
Block related methods
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
Photo Library Access
MapKit improvements
SkillsMatter - August 12th 2010
http://pardel.net
iPhone & iPad Application Development Course
Sep 29th to Oct 1st
http://skillsmatter.com/course/os-mobile-server/iphone-ipad-application-development
SkillsMatter - August 12th 2010
http://pardel.net
iPhone & iPad Application Development Course
Sep 29th to Oct 1st
http://skillsmatter.com/course/os-mobile-server/iphone-ipad-application-development
SkillsMatter - August 12th 2010
http://pardel.net
PROGRAMME
Day 1: Introduction to iOS development I • The development environment • Objective C crash course • Foundation framework • Memory management • The iPhone Dev Center
Day 3: Advance Features I • Touch & Gestures • Camera & Photo Library access • Core Location • Event Kit • Core Motion • Web Services (inc. XML & JSON Parsers) • Threading • Localisation
Day 2: Introduction to iOS development II • Design patterns (MVC, Delegation, etc.) • Table views, Navigation, Tab bar • Data Persistence (Preferences, SQLite & Code Data) • Animation • Core Graphics
Day 4: Advance Features II • Documents Sharing • Multitasking • Local notifications • iPad Specific topics • Testing and Optimisation (Instruments) • Submitting your application to the App Store
SkillsMatter - August 12th 2010
http://pardel.net
Thank you
http://pardel.nethttp://twitter.com/pardel