iOS Extension

32
iOS Extension Jason 2 014/12/09

Transcript of iOS Extension

Page 1: iOS Extension

iOS ExtensionJason

2014/12/09

Page 2: iOS Extension

擴展 (Extension)

是 iOS 8 和 OSX 10.10 加入的一個非常大的

功能,讓開發者可以通過系統提供給我們的擴展接入點 (Extension point),來為系統特定的服務提供某些附加的功能。

Page 3: iOS Extension

擴展種類

Today Extension -在下拉的通知中心「今天」界面中添加widget

Share Extension -點擊分享按鈕後將網站或相片透過應用分享

Action Extension -點擊Action按鈕後透過判斷上下文來將內容發送到應用

Photo Editing Extension -在系統的照片應用中提供照片編輯的能力

Document Provider Extension -提供和管理文件內容

Customer Keyboard Extension -提供可以用在所有應用的替代系統鍵盤的自定義鍵盤或輸入法

Page 4: iOS Extension

情境-編輯相片

Page 5: iOS Extension

情境-編輯相片

使用 Photo Editing Extension

Page 6: iOS Extension

三個角色

Page 7: iOS Extension

Host App

使用者透過此App來啟動Extension,就叫做Host App。

Today Share / Action Photo Editing

Today.app Chrome.app Photo.app

Page 8: iOS Extension

Containing App

此App包含一個以上的Extension,就叫做Containing

App。

Page 9: iOS Extension

App Extension

客製化地擴展功能和內容,即叫做App

Extension。它能透過擴展接入點被開啟。

Page 10: iOS Extension

Today Extension使用流程

Page 11: iOS Extension

App Extension溝通

Today.ap

p

Dropbox

Today

View

Database

Dropbox.a

pp

Open

URL

Page 12: iOS Extension

App Extension溝通

Page 13: iOS Extension

Share Extension使用流程

Page 14: iOS Extension

Share Extension使用流程

Page 15: iOS Extension

App Extension溝通

Page 16: iOS Extension

透過Apple Framework存取

Page 17: iOS Extension

透過Apple Framework存取

Page 18: iOS Extension
Page 19: iOS Extension
Page 20: iOS Extension
Page 21: iOS Extension

分開運行

不同的行程

分開的位址空間

獨立執行

分別系統優化

Page 22: iOS Extension

共享資源

App群組

UserDefault

FileManager

Page 23: iOS Extension

共享資源

NSURL *directory = [[NSFileManager defaultManager]containerURLForSecurityApplicationGroupIdentifier:@"group.domain"];

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.domain"];

Page 24: iOS Extension

共用程式碼

相同的資料模型Data Model

相同的邏輯Logic

相同的視圖View

Page 25: iOS Extension

共用程式碼

相同的框架Framework

相同的靜態程式庫Static Library

Page 26: iOS Extension

共用程式碼

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];

Page 27: iOS Extension

The basic life cycle of an app

extension

Page 28: iOS Extension

An app extension

communicates directly only

with the host app

Page 29: iOS Extension

An app extension can

communicate indirectly with its

containing app

Page 30: iOS Extension

An app extension's container is

distinct from its containing

app's container

Page 31: iOS Extension

Demo

Page 32: iOS Extension

參考

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/