extension in ios

78
App Extensions in iOS 李 俊河

Upload: qohj

Post on 17-Jul-2015

305 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Extension in iOS

App Extensions in iOS

李 俊河

Page 2: Extension in iOS

• App Extensions란?

• Extension Point의 종류

• App Extensions의 기초 동작 1. App Extensions의 라이프 사이클2. App Extensions의 데이터 전달방법

- App Groups- Embedded Framework- NSUserDefaults의 경우- CoreData의 경우

• 주의사항

Page 3: Extension in iOS

iOS8 & OS X - Yosemite부터 새로 추가된 개념으로써

App Extensions란?

Page 4: Extension in iOS

공유, 통지센터, 키보드 등 iOS 시스템의 특정 영역과 연결지어서 그 영역의 기능을 확장시켜줍니다

App Extensions란?

Page 5: Extension in iOS

그 각각의 영역을 Extension Point 라고 합니다

App Extensions란?

Page 6: Extension in iOS

Extension Point의 종류는 조금 있다가 하구요

App Extensions란?

Page 7: Extension in iOS

그 전에 두가지 용어의 개념을 알고 지나갑시다

App Extensions란?

Page 8: Extension in iOS

Host app 과 Containing app

App Extensions란?

Page 9: Extension in iOS

먼저 Host app 부터 설명드리자면

App Extensions란?

Page 10: Extension in iOS

유저가 App Extensions를 선택할 수 있도록 되어있는 어플을 말합니다

App Extensions란?

Page 11: Extension in iOS

Safari , Photo(기본 사진앱) 등이 여기에 속합니다

App Extensions란?

Page 12: Extension in iOS

그 다음 Containing app 은요

App Extensions란?

Page 13: Extension in iOS

App Extensions가 포함되어 있는 어플을 지칭합니다

App Extensions란?

Page 14: Extension in iOS

참고로 Containing app에는

App Extensions란?

Page 15: Extension in iOS

몇개든지 App Extensions를 넣을 수 있다고 합니다(확인 안해봄)

App Extensions란?

Page 16: Extension in iOS

이제 Extension Point에 어떤 종류가 있는지 알아보죠

App Extensions란?

Page 17: Extension in iOS

• Extension Point는 크게 7가지 종류가 있습니다.

Extension Point의 종류

Today

Share

Action

Photo Editing

Finder Sync

Document Provider

Custom Keyboard

Page 18: Extension in iOS

Extension Point의 종류

Today

• 앱을 기동하지않고 해당 앱의 일부 기능들을 간이 형식으로 쓸 수 있게 하는 Extension

• 위젯이라고도 부름

Page 19: Extension in iOS

Extension Point의 종류

Share

• Host app 에 있는 버튼을 눌러 정보를 SNS등으로 타 유저와 공유하는 Extension

Page 20: Extension in iOS

Extension Point의 종류

Action

• Host app 상에서 표시되는 컨텐츠를 조작 혹은 표시하는 Extension

Page 21: Extension in iOS

Extension Point의 종류

Photo Editing(iOS Only)

• 사진(iOS 기본앱)으로 사진이나 동영상을 편집하는 Extension

Page 22: Extension in iOS

Extension Point의 종류

Photo Editing(iOS Only)

• 사진(iOS 기본앱)으로 사진이나 동영상을 편집하는 Extension

• 사진 앱 안에서 해당 Extension을 추가로 불러서 그 기능을 빌려쓰는 느낌

Page 23: Extension in iOS

Extension Point의 종류

Finder Sync(OS X Only)

• 파일의 동기상태에 관한 정보를 Finder에 직접 표시하는 Extension

Page 24: Extension in iOS

Extension Point의 종류

Document provider(iOS Only)

• Containing app 안에 있는 파일을 Host app이 조작할 수 있도록 하는 Extension

Page 25: Extension in iOS

Extension Point의 종류

Document provider(iOS Only)

• Containing app 안에 있는 파일을 Host app이 조작할 수 있도록 하는 Extension

• Import / Export / Open / Move의 조작을 할 수 있음

• 각 조작은 직접 구현할 필요가 있음

Page 26: Extension in iOS

Extension Point의 종류

Custom Keyboard(iOS Only)

• 키보드를 커스터마이징 해서 여러 앱 상에서 사용 가능하도록 하는 Extension

Page 27: Extension in iOS

–Johnny Appleseed

1. 유저가 App Extension 선택

App Extensions의 기초 동작

App Extensions의 라이프 사이클

Page 28: Extension in iOS

–Johnny Appleseed

2. 시스템이 App Extension 실행

App Extensions의 기초 동작

App Extensions의 라이프 사이클

Page 29: Extension in iOS

–Johnny Appleseed

3. App Extension 코드 실행

App Extensions의 기초 동작

App Extensions의 라이프 사이클

Page 30: Extension in iOS

–Johnny Appleseed

4. 시스템이 App Extension 종료

App Extensions의 라이프 사이클

App Extensions의 기초 동작

Page 31: Extension in iOS

Host app과 Containing app은 직접 통신할 수 없습니다

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 32: Extension in iOS

그래서 그 사이를 App Extension이 연결시켜주는 방법으로 통신을 합니다

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 33: Extension in iOS

그 전에

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 34: Extension in iOS

Host app ↔ App Extension ↔ Containing app간에 데이터를 공유하려면 두가지 사전준비가 필요합니다

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 35: Extension in iOS

사전준비 1. App Groups

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 36: Extension in iOS

App Extensions의 기초 동작

App GroupsApp Extension과 Containing app이 서로의 데이터를 하나의 Group Id를 가진 공용 컨테이너 안에서 공유 할수있게 합니다

Page 37: Extension in iOS

App Extensions의 기초 동작

App Groups

iOS DevCenter에서 「App groups」를 생성합니다

Page 38: Extension in iOS

App Extensions의 기초 동작

App Groups실제 프로젝트에서 Targets→Capabilities→App Groups를 ON

Page 39: Extension in iOS

App Extensions의 기초 동작

App Groups그 후 표시되는 App Groups를 확인한 뒤 체크표시를 하면 해당 Target에 해당하는 「.entitlements」파일이 생성됩니다

Page 40: Extension in iOS

App Extensions의 기초 동작

App GroupsApp Extension쪽의 Target에도 같은 처리를 해주면 완료입니다

Page 41: Extension in iOS

사전준비 2. EmbeddedFramework

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 42: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework

App Extension과 Containing app이 공통된 클래스나 리소스를 사용할 때 필요합니다

Page 43: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework

프로젝트 상에서 File→New→Target을 선택

Page 44: Extension in iOS

App Extensions의 기초 동작

EmbeddedFrameworkFramework&Library → Cocoa Touch Framework 선택

Page 45: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework적당히 이름을 채워넣으면 생성완료

Page 46: Extension in iOS

App Extensions의 기초 동작

EmbeddedFrameworkTargets에 이런식으로 표시됩니다

Page 47: Extension in iOS

App Extensions의 기초 동작

EmbeddedFrameworkGeneral → Deployment Info → App Extensions의

Allow app extension API only 항목에 체크

Page 48: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework프로젝트의Target → General → Embedded Binaries와 Linked Frameworks and Libraries에 생성한 EmbeddedFramework가 존재하는지 확인 후 존재하지 않으면 추가시켜줍니다

Page 49: Extension in iOS

App Extensions의 기초 동작

EmbeddedFrameworkApp Extensions의 Target에도 같은 확인을 합니다 (Linked Frameworks and Libraries만)

Page 50: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework공용할 클래스의 .h파일을 EmbeddedFramework Target의 Build Phases→ Headers→Project에 추가합니다

Page 51: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework공용할 클래스의 .m파일은 EmbeddedFramework Target의 Build Phases→ Compile Sources에 추가합니다

Page 52: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework공용할 클래스 중 EmbeddedFramework외부에서 사용할 클래스는 해당 .h파일을 Headers→Project에서 Headers→Public로 이동시킨 뒤

Page 53: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework

EmbeddedFramework를 생성할때 함께 만들어진 .h파일 (이 경우에서는 EmbeddedDB.h)의 밑에 아래와 같은 방식으로 써줍니다

Page 54: Extension in iOS

App Extensions의 기초 동작

EmbeddedFramework

실제 사용할 클래스에서는 @import 방식으로 선언해주면 OK

Page 55: Extension in iOS

이제 사전준비가 끝났으니

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 56: Extension in iOS

실제로 공용 컨테이너를 쓰는 법을 알아봅시다

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 57: Extension in iOS

우선은 제일 사용도가 높은(?) NSUserDefaults를 이용하는 경우에 대해서 알아보죠

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 58: Extension in iOS

initWithSuiteName:으로 AppGroups Id를 지정하여 인스턴스 생성

App Extensions의 기초 동작

NSUserDefaults의 경우

Page 59: Extension in iOS

값을 생성하거나 불러올때는 평범한 NSUserDefaults 처럼 쓰면 OK

App Extensions의 기초 동작

NSUserDefaults의 경우

Page 60: Extension in iOS

다음은 CoreData의 경우

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 61: Extension in iOS

실제 DB파일을 읽고 쓸 저장위치를 containerURLForSecurityApplicationGroupIdentifier: 로

AppGroups Id를 지정해주면 OK

App Extensions의 기초 동작

Core Data의 경우

Page 62: Extension in iOS

이렇게 저장되는 정보는 private/var…에 존재하는 appGroups전용 폴더로 들어가기 때문에 탈옥을 하지 않는이상은 안전(?) 하다고 봅니다

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 63: Extension in iOS

참 쉽죠?

App Extensions의 기초 동작

App Extensions의 데이터 전달방법

Page 64: Extension in iOS

App Extensions의 기초 동작

은(는) 4일 해멤

Page 65: Extension in iOS

이런 Extension을 이용하기 위한 몇가지 주의사항에 대해서 이야기 하고자 합니다

주의사항

Page 66: Extension in iOS

1. iOS8에서만 사용 가능합니다

주의사항

Page 67: Extension in iOS

EmbeddedFramework와 관련된 이유가 있습니다만

주의사항

Page 68: Extension in iOS

App Extension자체가 iOS8부터 지원하기 때문이 가장 큽니다

주의사항

Page 69: Extension in iOS

2. Extension을 적용할 앱에는 64비트(arm64) 대응이 필수입니다

주의사항

Page 70: Extension in iOS

이건 뭐 올해 1월부터 애플에서 권고되던 사항이기에 자세한 설명은 생략하겠습니다

주의사항

Page 71: Extension in iOS

3. App Extension상에서 사용할 수 없는 API가 존재합니다

주의사항

Page 72: Extension in iOS

헤더파일에 NS_EXTENSION_UNAVAILABLE 등의 매크로가 붙어있는 API는 사용 할 수 없습니다

주의사항

Page 73: Extension in iOS

4. 카메라와 마이크를 이용할 수 없습니다

주의사항

Page 74: Extension in iOS

5. 백그라운드 상에서 장시간 태스크를 실행할 수 없습니다 (플랫폼마다 다름、자세히 확인 안해봄)

주의사항

Page 75: Extension in iOS

6. 직접적으로 AirDrop을 사용해서 데이터를 송·수신할 수 없습니다

주의사항

Page 76: Extension in iOS

주의사항

대신 UIActivityViewController클래스를 사용함으로써 기존 어플리케이션과 같이 AirDrop을 이용하면 가능하다 합니다

Page 77: Extension in iOS

참고자료

https://developer.apple.com/jp/documentation/UserExperience/Conceptual/MobileHIG/AppExtensions/AppExtensions.html

http://www.raywenderlich.com/83809/ios-8-today-extension-tutorial

http://qiita.com/monoqlo/items/6ed93f0d2e719acd9474

http://www.cnet.com/how-to/how-to-set-up-ios-8-action-extensions-in-safari/

http://dev.classmethod.jp/smartphone/ios8-photo-kit-9/

http://qiita.com/takebayashi/items/f29617d56ceed9ee7e9d

http://www.macstories.net/mac/extensibility-and-automation-changes-in-os-x-yosemite/

http://www.slideshare.net/ssuser9c7e21/document-provider

https://itunes.apple.com/jp/app/morse-code-telegraph-keyboard/id921290705?mt=8

http://dev.classmethod.jp/references/ios-8-app-extension-5/

http://dev.classmethod.jp/references/ios-8-app-extension-6/

http://dev.classmethod.jp/references/ios-8-action-extension/

http://swift-studying.com/blog/swift/?p=508

http://dev.classmethod.jp/references/ios-8-embedded-framework/

http://techblog.yahoo.co.jp/ios/today-widget/

http://stackoverflow.com/questions/24641768/accessing-core-data-sql-database-in-ios-8-extension-sharing-data-between-app-an

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/index.html

Page 78: Extension in iOS

끝입니다