iOS ExtensionJason
2014/12/09
擴展 (Extension)
是 iOS 8 和 OSX 10.10 加入的一個非常大的
功能,讓開發者可以通過系統提供給我們的擴展接入點 (Extension point),來為系統特定的服務提供某些附加的功能。
擴展種類
Today Extension -在下拉的通知中心「今天」界面中添加widget
Share Extension -點擊分享按鈕後將網站或相片透過應用分享
Action Extension -點擊Action按鈕後透過判斷上下文來將內容發送到應用
Photo Editing Extension -在系統的照片應用中提供照片編輯的能力
Document Provider Extension -提供和管理文件內容
Customer Keyboard Extension -提供可以用在所有應用的替代系統鍵盤的自定義鍵盤或輸入法
情境-編輯相片
情境-編輯相片
使用 Photo Editing Extension
三個角色
Host App
使用者透過此App來啟動Extension,就叫做Host App。
Today Share / Action Photo Editing
Today.app Chrome.app Photo.app
Containing App
此App包含一個以上的Extension,就叫做Containing
App。
App Extension
客製化地擴展功能和內容,即叫做App
Extension。它能透過擴展接入點被開啟。
Today Extension使用流程
App Extension溝通
Today.ap
p
Dropbox
Today
View
Database
Dropbox.a
pp
Open
URL
App Extension溝通
Share Extension使用流程
Share Extension使用流程
App Extension溝通
透過Apple Framework存取
透過Apple Framework存取
分開運行
不同的行程
分開的位址空間
獨立執行
分別系統優化
共享資源
App群組
UserDefault
FileManager
共享資源
NSURL *directory = [[NSFileManager defaultManager]containerURLForSecurityApplicationGroupIdentifier:@"group.domain"];
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.domain"];
共用程式碼
相同的資料模型Data Model
相同的邏輯Logic
相同的視圖View
共用程式碼
相同的框架Framework
相同的靜態程式庫Static Library
共用程式碼
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.domain"];
NSString *sorPath = [NSStringstringWithFormat:@"%@/Dylib.framework",[[NSBundlemainBundle] bundlePath]];
NSString *desPath = [NSStringstringWithFormat:@"%@/Library/Caches/Dylib.framework",containerURL.path];
BOOL copyResult = [[NSFileManager defaultManager] copyItemAtPath: sorPath toPath:desPath error:&err];
The basic life cycle of an app
extension
An app extension
communicates directly only
with the host app
An app extension can
communicate indirectly with its
containing app
An app extension's container is
distinct from its containing
app's container
Demo
參考
WWDC 2014 Session筆記 - iOS通知中心擴展製作入門http://onevcat.com/2014/08/notification-today-widget/
書籍-iOS 8程式設計實戰205個快速上手的開發技巧
CocoaHeads Taipei 2014/11/13–iOS Extensionhttp://www.slideshare.net/wpsteak/ios-8-extension
Apple Developer–App Extensionshttps://developer.apple.com/app-extensions/
App Extension Programming Guidehttps://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/