티스토리 뷰
안녕하세요.
몇일만에 글을 적는것 같습니다.
iOS 8.0 이전에서는 custom URL Scheme를 이용하거나, custom pasteboard 등을 이용하여 어플리케이션 간에 데이터를 전달하는것만 가능하였으나,
8.0에서는 익스텐션이라는 기능이 추가가 되면서, 앱전환이 이루어지지 않아도, 다른앱의 정보를 가져와서 사용할수 있고, 추가적인 기능을 사용할수 있게 되었다.
안드로이드에서 생각한다면 ContentProvider정도로 생각하면 될것 같기는 합니다.
익스텐션의 특징
1. 앱이 아니다.
2. 애플 framework 코드를 통해서만 접근된다.
3. App to app IPC (Inter-Process Communication)가 아니다.
4. 빌드될때 추가적은 타겟을 통해 따로 빌드되며 설치될때는 앱과 같이 설치, 삭제될때도 앱과 함께 삭제된다. (바이너리 자체도 앱과 독립적)
5. 실행시에도 앱과는 완전히 다른 독립 프로세스(process)로 실행되기 때문에 완전히 다른 주소공간(Isolated address space)를 가지게 된다.
대략 이야기는 이런데요.
그냥 쉽게 말하면 앱과 함께 포함이 되어서 설치되는 또 다른 앱을 포함하고 있다고 생각하면 됩니다. ^^
익스텐션의 종류
1. 투데이 익스텐션 (Today Extension)
- 알림센터 내부에 투데이 부분에 앱에서 원하는 기능을 위젯형태로 추가 할 수 있음.
2. 공유 익스텐션 (Share Extension)
- 사용자가 무언가를 SNS로 공유하려고 할 경우에, 트위터나 페이스북이 아닌 경우라도 바로 포스팅할 수 있도록 하여줌
3. 사진 편집 익스텐션 (Photo Editing Extension)
- 사진 편집이 가능 (설명할것이 없네요. ^^)
4. 액션 익스텐션 (Action Extension)
- 이미지, 사운드 등 알려진 형식의 데이터나, 새롭게 정의된 커스텀 타입의 특정 데이터들을 이용할 경우, 해당 형식의 데이터를 인식하고 처리할 수 있는 익스텐션이 OS에 등록되어 있다면 사용자의 액션에 의해 해당 익스텐션을 사용할 수 있게 된다.
앱 <-> 인스텐션의 데이터 공유 방법
App Group라는 새로운 개념이 생기게 되었다. 앱과 익스텐션은 동일한 앱그룹에 속하며 동일 앱그룹 내에서는 저장소와 일반적인 데이터들을 공유 할 수 있게 허용된다.
이렇게 데이터를 공유하여서 사용하는 부분에서는 당연하게 synchronization가 필수적인 부분이다.
동기화 방법
CoreData나 sqlite를 이용하면 이미 당연스럽게도 동기화 기능이 제공되고 있으며,
커스텀하여서 사용하고 싶은 경우에는 inter-process 동기화 방법을 제공하는 NSFileCoordination을 이용하여 동기화를 하면 된다고 합니다. ^^
NSUserDefaults의 경우에는 기본적으로 다른 NSUserDefaults를 가지기 때문에, 앱에서 쓰던 설정값을 익스텐션에서는 사용하지 못하게 된다.
그래서 설정값을 공유하려면 다음과 같이 명시적으로 shared domain을 생성하여서 사용하여야 합니다.
NSUserDefaults *sharedDefaults = [[NSDefaults alloc] initWithSuiteName:@"com.TestApp.shared"];
키 체인 공유
bundle seed ID만 같으면 앱/앱 간에도 키체인을 공유하는 것이 기존에도 가능 하였는데요. 키체인 액세스 그룹에 bundle seed ID가 같게 되어 있으면 손쉽게 키체인을 공유할 수 있게 되어 있습니다.
예) AAAAA.com.TestApp -> AAAAA가 bundle seed ID
'Mobile > iOS' 카테고리의 다른 글
[iOS]UIKit Dynamics (0) | 2016.04.10 |
---|---|
[iOS]앱 개발시 사용 가능한 애니메이션 기능의 차이점 (0) | 2016.04.10 |
[iOS]카메라 사용시 전후면 사용 (0) | 2016.04.08 |
[iOS]UIImage를 NSData로 변경후 저장 (0) | 2016.04.05 |
[iOS]UILabel 2줄 이상 표시하기 (0) | 2016.04.05 |
- Total
- Today
- Yesterday
- cocoapods
- Linux
- intellij
- tomcat
- docker
- windows10
- rxswift
- centos8
- Kotlin
- golang
- github
- android
- git
- war
- Xcode
- ubuntu
- php
- SWIFT
- Java
- Spring
- nodejs
- go
- Gradle
- MySQL
- Python
- enum
- CentOS
- Codable
- Windows
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |