Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1...

117
© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC14 Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks Matt Gamble iOS Notifications Engineer Guy Fullerton iOS Social & Accounts Engineer

Transcript of Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1...

Page 1: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC14

Creating Extensions for iOS and OS X, Part 1Extending Apps

Session 205 Ian Baird iOS Frameworks Engineer

Frameworks

!

Matt Gamble iOS Notifications Engineer

!

Guy Fullerton iOS Social & Accounts Engineer

Page 2: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Agenda

Extensions and Extension Points

Page 3: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Agenda

Extensions and Extension Points

Today Extensions

Page 4: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Agenda

Extensions and Extension Points

Today Extensions

Share Extensions

Page 5: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extensions?

Page 6: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 7: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 8: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 9: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 10: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 11: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 12: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 13: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 14: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 15: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

FilePicker Screenshot

Page 16: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 17: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 18: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Delivering Extensions

Page 19: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Delivering Extensions

Extension Container

Page 20: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Delivering Extensions

Extension Container

Page 21: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Delivering Extensions

Extension Container

Page 22: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Binding

Page 23: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Binding

NotificationCenter.framework Today Widget

Page 24: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extensions?

Purpose built binaries

Page 25: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extensions?

Purpose built binaries

Not apps

Page 26: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extensions?

Purpose built binaries

Not apps

Accessed via Apple frameworks code

Page 27: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extensions?

Purpose built binaries

Not apps

Accessed via Apple frameworks code

Not app to app IPC

Page 28: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extensions?

Purpose built binaries

Not apps

Accessed via Apple frameworks code

Not app to app IPC• Still use -[UIApplication openURL:]

Page 29: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Overview

Mark extensible parts of the system

Page 30: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Overview

Mark extensible parts of the system

Packaged in System Frameworks

Page 31: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Overview

Mark extensible parts of the system

Packaged in System Frameworks

Combine API and Policy

Page 32: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Policy

Launch characteristics

Page 33: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Policy

Launch characteristics

Presentation

Page 34: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

What are Extension Points?Policy

Launch characteristics

Presentation

View controller and non view

Page 35: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 36: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 37: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activating Extensions

Extension Host Extension

Page 38: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activating Extensions

Extension Host Extension

Page 39: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Extension Host Extension

Page 40: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Directly Launch

Extension Host Extension

Page 41: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Summary

Small pieces of functionality

Page 42: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Summary

Small pieces of functionality

Extend the system in new and interesting ways

Page 43: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Summary

Small pieces of functionality

Extend the system in new and interesting ways

Extension Points mark extendable parts of the system

Page 44: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center ExtensionsThe widgets you need and deserve

Matt Gamble iOS Notifications Engineer

Page 45: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 46: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 47: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsWidgets are view controllers

Page 48: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsWidgets are view controllers

Lifecycle, containment, etc.

Page 49: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsWidgets are view controllers

Lifecycle, containment, etc.

Appearance calls: - (void)viewWillAppear:(BOOL)animated; - (void)viewDidAppear:(BOOL)animated; - (void)viewWillDisappear:(BOOL)animated; - (void)viewDidDisappear:(BOOL)animated;

Page 50: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsWidgets are view controllers

Lifecycle, containment, etc.

Appearance calls: - (void)viewWillAppear:(BOOL)animated; - (void)viewDidAppear:(BOOL)animated; - (void)viewWillDisappear:(BOOL)animated; - (void)viewDidDisappear:(BOOL)animated;

Page 51: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsPerformance

Page 52: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsPerformance

Load cached data for seamless transitions

Page 53: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsPerformance

Load cached data for seamless transitions

Kick off expensive operations early and in the background

Page 54: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsPerformance

Load cached data for seamless transitions

Kick off expensive operations early and in the background

Cache fetched data (see “Load cached data for seamless transitions”)

Page 55: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

Page 56: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

The Notification Center sets the frames

Page 57: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

The Notification Center sets the frames

Adjusting Height

Page 58: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

The Notification Center sets the frames

Adjusting Height

1. Auto layout

Page 59: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

The Notification Center sets the frames

Adjusting Height

1. Auto layout

2. setPreferredContentSize:

Page 60: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

The Notification Center sets the frames

Adjusting Height

1. Auto layout

2. setPreferredContentSize:

Same across iOS and OS X

Page 61: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsHandling layout

Page 62: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center Widgets

- (IBAction)action:(id)sender { !

CGSize updatedSize = [self preferredContentSize]; updatedSize.height = 100.0; !

[self setPreferredContentSize:updatedSize]; !

}

Handling layout

Page 63: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center Widgets

- (IBAction)action:(id)sender { !

CGSize updatedSize = [self preferredContentSize]; updatedSize.height = 100.0; !

[self setPreferredContentSize:updatedSize]; !

}

Handling layout

Page 64: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsAnimating along with height changes

Page 65: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsAnimating along with height changes

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition: ^(id<UIViewControllerTransitionCoordinatorContext> context) { [view setAlpha:0.0]; } completion: ^(id<UIViewControllerTransitionCoordinatorContext> context) { [view removeFromSuperview]; } ]; }

Page 66: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsAnimating along with height changes

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition: ^(id<UIViewControllerTransitionCoordinatorContext> context) { [view setAlpha:0.0]; } completion: ^(id<UIViewControllerTransitionCoordinatorContext> context) { [view removeFromSuperview]; } ]; }

Page 67: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsAnimating along with height changes

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition: ^(id<UIViewControllerTransitionCoordinatorContext> context) { [view setAlpha:0.0]; } completion: ^(id<UIViewControllerTransitionCoordinatorContext> context) { [view removeFromSuperview]; } ]; }

Page 68: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

- (void)viewWillTransitionToSize:(NSSize)newSize { ! [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { ! [view setAlpha:0.0]; ! } completionHandler:^{ ! [view removeFromSuperview]; ! }]; }

Notification Center WidgetsAnimating along with height changes

Page 69: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

- (void)viewWillTransitionToSize:(NSSize)newSize { ! [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { ! [view setAlpha:0.0]; ! } completionHandler:^{ ! [view removeFromSuperview]; ! }]; }

Notification Center WidgetsAnimating along with height changes

Page 70: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

- (void)viewWillTransitionToSize:(NSSize)newSize { ! [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { ! [view setAlpha:0.0]; ! } completionHandler:^{ ! [view removeFromSuperview]; ! }]; }

Notification Center WidgetsAnimating along with height changes

Page 71: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

Page 72: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { ! [self performUpdate]; ! NCUpdateResult updateResult; if (/* Hey look, I have new content! */) { updateResult = NCUpdateResultNewData; } else if ( /* Hm, nothing new here. */) { updateResult = NCUpdateResultNoData; } else if ( /* Uh-oh… */) { updateResult = NCUpdateResultFailed; } completionHandler(updateResult); }

Page 73: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { ! [self performUpdate]; ! NCUpdateResult updateResult; if (/* Hey look, I have new content! */) { updateResult = NCUpdateResultNewData; } else if ( /* Hm, nothing new here. */) { updateResult = NCUpdateResultNoData; } else if ( /* Uh-oh… */) { updateResult = NCUpdateResultFailed; } completionHandler(updateResult); }

Page 74: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { ! [self performUpdate]; ! NCUpdateResult updateResult; if (/* Hey look, I have new content! */) { updateResult = NCUpdateResultNewData; } else if ( /* Hm, nothing new here. */) { updateResult = NCUpdateResultNoData; } else if ( /* Uh-oh… */) { updateResult = NCUpdateResultFailed; } completionHandler(updateResult); }

Page 75: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { ! [self performUpdate]; ! NCUpdateResult updateResult; if (/* Hey look, I have new content! */) { updateResult = NCUpdateResultNewData; } else if ( /* Hm, nothing new here. */) { updateResult = NCUpdateResultNoData; } else if ( /* Uh-oh… */) { updateResult = NCUpdateResultFailed; } completionHandler(updateResult); }

Page 76: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { ! [self performUpdate]; ! NCUpdateResult updateResult; if (/* Hey look, I have new content! */) { updateResult = NCUpdateResultNewData; } else if ( /* Hm, nothing new here. */) { updateResult = NCUpdateResultNoData; } else if ( /* Uh-oh… */) { updateResult = NCUpdateResultFailed; } completionHandler(updateResult); }

Page 77: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsNCWidgetProviding

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { ! [self performUpdate]; ! NCUpdateResult updateResult; if (/* Hey look, I have new content! */) { updateResult = NCUpdateResultNewData; } else if ( /* Hm, nothing new here. */) { updateResult = NCUpdateResultNoData; } else if ( /* Uh-oh… */) { updateResult = NCUpdateResultFailed; } completionHandler(updateResult); }

Page 78: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

DemoClowning around

Page 79: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsSummary

Page 80: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsSummary

Widgets are view controllers

Page 81: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsSummary

Widgets are view controllers

Widgets should resume immediately

Page 82: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsSummary

Widgets are view controllers

Widgets should resume immediately

Notification Center handles layout • Express preferred height with constraints or preferredContentSize

Page 83: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsSummary

Widgets are view controllers

Widgets should resume immediately

Notification Center handles layout • Express preferred height with constraints or preferredContentSize

Animate content along with resize animation

Page 84: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Notification Center WidgetsSummary

Widgets are view controllers

Widgets should resume immediately

Notification Center handles layout • Express preferred height with constraints or preferredContentSize

Animate content along with resize animation

Handle update requests

Page 85: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Share Extensions

Guy Fullerton iOS Social & Accounts Engineer

Page 86: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Share Extensions

Page 87: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Share Extensions

Page 88: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 89: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 90: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 91: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation
Page 92: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Share Extensions

Display name

Activation rules

Implement a ViewController

Upload the content

Signal completion/cancellation

Page 93: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Display Name

Page 94: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

CFBundleDisplayName

Display Name

Page 95: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation Rules

Page 96: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation Rules

extensionContext

image 1

image 2

video

Page 97: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation Rules

extensionContext

image 1

image 2

video

Photo Sharing Extension

Social Network Extension

Video Sharing Extension

Microblog Extension

Page 98: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation Rules

???extensionContext

image 1

image 2

video

Photo Sharing Extension

Social Network Extension

Video Sharing Extension

Microblog Extension

Page 99: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation RulesPredicate

Page 100: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation RulesPredicate

SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image").@count == 1).@count == 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf").@count == 1).@count == 1

Page 101: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation RulesCondensed rules

Page 102: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Activation RulesWeb content

NSExtensionActivationSupportsWebURLWithMaxCount !

NSExtensionActivationSupportsWebPageWithMaxCount

Page 103: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Implement Your ViewControllersubclass UI/NSViewController

Page 104: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Implement Your ViewControllersubclass SLComposeServiceViewController

Page 105: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

UploadNSURLSession

- (void)didSelectPost { NSString *confName = @“com.example.photouploader.backgroundconfiguration”; NSURLSessionConfiguration *conf = [NSURLSessionConfiguration backgroundSessionConfiguration:confName]; !

NSURLSession *session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:nil]; !

NSURLRequest *request = [self requestForExtensionItems]; NSURLSessionUploadTask *upload = [session uploadTaskWithStreamedRequest:request]; [upload resume]; !

[self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; }

Page 106: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

UploadNSURLSession

- (void)didSelectPost { NSString *confName = @“com.example.photouploader.backgroundconfiguration”; NSURLSessionConfiguration *conf = [NSURLSessionConfiguration backgroundSessionConfiguration:confName]; !

NSURLSession *session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:nil]; !

NSURLRequest *request = [self requestForExtensionItems]; NSURLSessionUploadTask *upload = [session uploadTaskWithStreamedRequest:request]; [upload resume]; !

[self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; }

Page 107: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

UploadNSURLSession

- (void)didSelectPost { NSString *confName = @“com.example.photouploader.backgroundconfiguration”; NSURLSessionConfiguration *conf = [NSURLSessionConfiguration backgroundSessionConfiguration:confName]; !

NSURLSession *session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:nil]; !

NSURLRequest *request = [self requestForExtensionItems]; NSURLSessionUploadTask *upload = [session uploadTaskWithStreamedRequest:request]; [upload resume]; !

[self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; }

Page 108: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Completion

- (void)didSelectPost { NSString *confName = @“com.example.photoblog.backgroundconfiguration”; NSURLSessionConfiguration *conf = [NSURLSessionConfiguration backgroundSessionConfiguration:confName]; !

NSURLSession *session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:nil]; !

NSURLRequest *request = [self requestForExtensionItems]; NSURLSessionUploadTask *upload = [session uploadTaskWithStreamedRequest:request]; [upload resume]; !

[self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; }

Page 109: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Cancellation

- (void)didSelectCancel { NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil]; [self.extensionContext cancelRequestWithError:error]; }

Page 110: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Cancellation

- (void)didSelectCancel { NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil]; [self.extensionContext cancelRequestWithError:error]; }

Page 111: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Performance

Display your Share UI quickly!

SLComposeServiceViewContrller -presentationAnimationDidFinish

Page 112: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

DemoPhoto blog extension

Page 113: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Share Extensions

SLComposeServiceViewController for standard UI

UI/NSViewController for custom UI

Activation rules

Use Background NSURLSession

Page 114: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Summary

Extend both iOS and OS X

Today Widgets

Share extensions

Page 115: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

More Information

Jake Behrens App Frameworks Evangelist [email protected]

Documentation App Extension Programming Guide http://apple.com

Apple Developer Forums http://devforums.apple.com

Page 116: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation

Related Sessions

• Creating Extensions, Part 2 Mission Wednesday 11:30AM

Services Location Sunday 0:00PM

Tools Location Sunday 0:00PM

Media Location Sunday 0:00PM

Graphics and Games Location Sunday 0:00PM

Core OS Location Sunday 0:00PM

• Extensions Lab Frameworks Lab A Tuesday 3:15PM

• Extensions Lab Frameworks Lab B Thursday 2:00PM

Labs

Page 117: Creating Extensions for iOS and OS X, Part 1 · Creating Extensions for iOS and OS X, Part 1 Extending Apps Session 205 Ian Baird iOS Frameworks Engineer Frameworks! ... Presentation