ios extension

Post on 28-Jan-2018

96 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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/

top related