Date post: | 02-Jul-2015 |
Category: |
Software |
Upload: | pin-shih-wang |
View: | 861 times |
Download: | 2 times |
iOS Extension
Prince
⺩王品⼠士 (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 PhotoEdit 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 uploadRate meCacheSync
8:1
See scores from your favorite team
Home
8:1
Today Extension
Widget
How an App Extension Works
Open URL
Shared Resources
Appextension
Hostapp
Containingapp
Request
Response
Appextension
Hostapp
Containingapp
Host app• An app that a user employs to choose an app
extension is called a host app
Hostapp
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
Containingapp
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
Appextension
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 URL
Shared Resources
Appextension
Hostapp
Containingapp
How an App Extension Communicates
Share Extension
Share Extension
Share Extension
Share Extension
Share Extension
Appextension
Hostapp
Containingapp
Pocket AddToPocket Chrome
Server
Appextension
Hostapp
AddToPocket Chrome
Accessed via Apple frameworks code
Appextension
Hostapp
System Framework
Appextension
Hostapp
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.frameworkPhotos.framework
Document Provider any app UIDocumentPickerViewController
Custom Keyboard any app
Hostapp
Extension Type Enter point
Today UIViewController <NCWidgetProviding>
Share SLComposeServiceViewController
Action SLComposeServiceViewController UI and non-UI variants
Photo Editing UIViewController <PHContentEditingController>
Document Provider UIDocumentPickerViewController UI and non-UI variants
Custom Keyboard UIInputViewController
Appextension
Appextension
Hostapp
Containingapp
Pocket AddToPocket Chrome
Server
Appextension
Containingapp
Pocket AddToPocket
Different process
• Isolated address space
• Executes independently
• System optimizes separately
Run Separately
Appextension
Containingapp
Shared Resources
Share Resource
App Group
• UserDefault
• FileManager
Share Resource
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@“group.domain"];
NSURL *directory = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.domain"];
Appextension
Containingapp
Pocket AddToPocket
ServerServer
• Same data model
• Same logic
• Same views
Share Code
Appextension
Containingapp
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