iOS extension

2,888 views 60 slides Nov 17, 2014
Slide 1
Slide 1 of 60
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60

About This Presentation

iOS extension
CocoaHeads Taipei 2014/11/13


Slide Content

iOS Extension
Prince

?B (Prince)
@wpsteak
github , linkedin

•App Extensions
•Today Widget & Demo

2007

App

App
Folder
Badge

Scenario 1

Edit a photo
Photo Home Find App Wait App Open
Find Photo Edit Photo

Edit a photo
Photo Select App Edit Photo
Photo Editing Extension

Scenario 2

See scores from your
favorite team
Home Find App Wait App Open
wait for loading
Auto upload
Rate me
Cache
Sync

8:1

See scores from your
favorite team
Home
8:1
Today Extension
Widget

How an App Extension
Works

Open URLShared
Resources
App

extension
Host

app
Containing

app
Request
Response

App

extension
Host

app
Containing

app

Host app
•An app that a user employs to choose an app
extension is called a host app
Host

app
Today.app
Today
Chrome.app
Share/Action
Dropbox.app
Document Provider
Photo.app
Photo Editing

•an app that contains one or more extensions is
called a containing app
Containing app
Containing

app
extension extension extension

•an app that contains one or more extensions is
called a containing app
Containing app

App extension
•an app extension lets you extend custom
functionality and content beyond
App

extension

App extension
•an app extension lets you extend custom
functionality and content beyond

Today Extension

Today Extension

Today Extension

Today Extension

Today Extension

Dropbox
TodayView
Today.app
How an App Extension
Communicates

Dropbox
TodayView
Today.app
Database
How an App Extension
Communicates

Dropbox.app
Dropbox
TodayView
Today.app
Open URL
Database
How an App Extension
Communicates

Open URLShared
Resources
App

extension
Host

app
Containing

app
How an App Extension
Communicates

Share Extension

Share Extension

Share Extension

Share Extension

Share Extension

App

extension
Host

app
Containing

app
Pocket AddToPocket Chrome
Server

App

extension
Host

app
AddToPocket Chrome

Accessed via Apple
frameworks code
App

extension
Host

app
System
Framework

App

extension
Host

app
AddToPocket Chrome
UIActivityViewControllerSLComposeServiceViewController
Accessed via Apple
frameworks code

Extension Type Host App host app use
Today Today.app NotificationCenter.framework
Share any app UIActivityViewController
Action any app UIActivityViewController
Photo Editing Photo.app
PhotosUI.framework

Photos.framework
Document Provider any app UIDocumentPickerViewController
Custom Keyboard any app
Host

app

Extension Type Enter point
Today
UIViewController
<NCWidgetProviding>
Share SLComposeServiceViewController
Action SLComposeServiceViewController UI and non-UI variants
Photo Editing
UIViewController
<PHContentEditingController>
Document ProviderUIDocumentPickerViewController UI and non-UI variants
Custom Keyboard UIInputViewController
App

extension

App

extension
Host

app
Containing

app
Pocket AddToPocket Chrome
Server

App

extension
Containing

app
Pocket AddToPocket
Different process
•Isolated address space
•Executes independently
•System optimizes
separately
Run Separately

App

extension
Containing

appShared
Resources
Share Resource
App Group
•UserDefault
•FileManager

Share Resource
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@“group.domain"];
NSURL *directory = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:@"group.domain"];

App

extension
Containing

app
Pocket AddToPocket
ServerServer
•Same data model
•Same logic
•Same views
Share Code

App

extension
Containing

app
Pocket AddToPocket
ServerServer
•Framework
•Static library
Share Code

Share Code
NSURL *containerURL = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:@"group.domain"];
NSString *sorPath = [NSString stringWithFormat:@"%@/Dylib.framework",[[NSBundle
mainBundle] bundlePath]];
NSString *desPath = [NSString stringWithFormat:@“%@/Library/Caches/
Dylib.framework",containerURL.path];
BOOL copyResult = [[NSFileManager defaultManager] copyItemAtPath: sorPath toPath:desPath
error:&err];

•Containing app is still most important
•Extension cannot without containing app
•Don't have full use of system resources
•Make it seamless
•Make it useful

Demo

Demo
•a light bulb
•sample code
•Wifi Environment

App Extension
•Create an app extension by adding a new target
to an app
•Add necessary libraries to extension target
•ViewController

Load View
•with storyboard
•NSExtensionMainStoryboard
•without interface file
•NSExtensionPrincipalClass

viewController’s life cycle
•initWithCoder:
•viewDidLoad
•widgetMarginInsetsForProposedMarginInsets:
•widgetPerformUpdateWithCompletionHandler:
•viewWillAppear:
•viewDidAppear:

•widgetMarginInsetsForProposedMarginInsets

User Interface
•UIView
•UIButton
•UILabel
•UITextField
•UIScrollView

Some APIs are Unavailable
to App Extensions
•Access a sharedApplication object
•Use any API marked in header files with the NS_EXTENSION_UNAVAILABLE macro,
or similar unavailability macro, or any API in an unavailable framework
•Access the camera or microphone on an iOS device
•Perform long-running background tasks
•The specifics of this limitation vary by platform, as described in the extension point
chapters in this document.
•(An app extension can initiate uploads or downloads using an NSURLSession
object, with results of those operations reported to the containing app.)
•Receive data using AirDrop
•(An app extension can send data using AirDrop in the same way an app does: by
employing the UIActivityViewController class.)

App Store
•NOTE ABOUT 64-BIT ARCHITECTURE
•An app extension target must include the arm64 (iOS) or x86_64 architecture
(OS X) in its Architectures build settings or it will be rejected by the App
Store. Xcode includes the appropriate 64-bit architecture with its “Standard
architectures” setting when you create a new app extension target.
•If your containing app target links to an embedded framework, the app must
also include 64-bit architecture or it will be rejected by the App Store.

App Store

End