App Extension으로 영향력을 증대하기
앱익스텐션은 앱을 뛰어 넘어 컨텐츠와 기능을 더 확장할 수 있게 한다.
임의작업을 활설화하기 위해 앱익스텐션을 작성할 수 있다. 예를 들어 브라우저에서 당신의 소셜서비스에 유저가 포스팅하도록 공유 익스텐션을 제공할 수 있다. 또는 유저가 좋아하는 팀을 따라잡기 위해 알림센터에서 현재 점수를 표시하는 투데이 위젯을 제공할 수 있다. 시스템 키보드를 대체하는 커스텀 키보드를 제공할 수도 있다.
iOS와 macOS에서 몇가지 타입의 앱익스텐션을 정의한다.
앱익스텐션이 활성화된 하나의 시스템영역은 하나의 익스텐션포인트로 부른다.
익스텐션포인트는 사용정책과 해당 영역에서 앱익스텐션을 생성할 때 사용하는 API들을 제공한다.
다음 표는 iOS와 macOS에서 제공하는 앱익스텐션의 목록을 제공하며 각 익스텐션의 익스텐션포인트를 예로 들고 있다.
Action(iOS, macOS; UI, nonUI)
- host앱에서 컨텐츠를 다루거나 표시한다.
Audio Unit(iOS, macOS; UI, nonUI)
- host앱에 전달할 오디오스트림을 생성하거나 host앱으로부터 오디오스트림을 받아서 수정 한 후 host앱으로 다시 전달한다.
Broadcast UI(iOS, tvOS)
Broadcast Upload(iOS, tvOS)
Call Directory(iOS)
- 전화번호를 구별하고 블럭한다. CallKit Framework로 구현 가능하다.
Content Blocker(iOS, macOS)
- 컨텐츠블로킹앱이 규칙을 업데이트 했는지 표시(UI없음)
Custom Keyboard(iOS)
- 시스템키보드를 대체함.
Document Provider(iOS; ui, nonUI)
- 파일저장소에 접근하고 조작한다.
Finder Sync(macOS)
- Finder에 파일 동기화 상태를 바로 반영(Ui없음)
Game App(watchOS)
- Apple Watch에서 게임앱을 작성할 수 있게 해줌.
iMessage(iOS)
- 메세지앱과 상호작용
Intents(iOS)
- Siri와 통합하여 작업을 처리할 수 있다. SiriKit Programming Guide참조
Notification Content(iOS)
Notification Service(iOS)
Photo Editing(iOS, macOS)
- 사진앱으로 사진이나 비디오를 편집
Share(iOS, macOS)
- wetsite나 컨텐츠들을 공유하는 포스팅
Smart Card Token(macOS)
Spotlight Index(iOS)
- 앱 동작 중이 아닌동안에 앱의 컨텐츠를 인덱스함
Sticker Pack(iOS)
- 사용자가 메세지앱에서 사용할 수 있는 스티커셋을 제공
Today(iOS, macOS)
- 알림센터의 투데이에 빠르게 업데이트하거나 빠르게 태스크를 수행
TV Services(tvOS)
VPN(iOS, macOS)
- VPN client
WatchKit App(watchOS)
- 애플워치를 위한 알림UI나 앱을 제공
Xcode Source Editor(macOS)
시스템에서 각 앱익스텐션에 대한 제한된 영역을 정의하기 때문에 작성하려고 하는 앱에 가장 적합한 영역을 선택하는것이 중요하다. 경험공유를 활성하한 앱을 작성하고자 한다면 Share Extension Xcode template로 시작하여 공유익스텐션포인트를 사용해야 한다.
앱익스텐션과 앱은 구별된다.
앱에 익스텐션을 추가하고 배포한다고 해도 앱익스텐션은 바이너리가 분리되고 앱과 독립적으로 동작한다.
앱익스텐션은 새로운 타겟으로 생성하게 된다. 다른 타겟들 처럼 익스텐션타겟도 각각 셋팅과 빌드에 포함되는 파일들을 지정하게 된다. 하나의 앱에 여러개의 익스텐션타겟을 추가할 수 있다.
익스텐션개발을 시작하는 가장 좋은 방법은 xcode가 제공하는 템플릿으로 시작하는 것이다. 각 템플릿들은 익스텐션포인트에 맞는 구현파일과 셋팅을 포함한다.
유저에 앱익스텐션을 배포하려면 앱스토어에 앱과함께 제출하면 된다. 유저가 앱설치 시 익스텐션도 함께 설치된다.
앱익스텐션을 설치한 후 유저는 반드시 활성화하는 액션을 수행해야 한다. 유저는 유형에 따라 익스텐션을 활성화할 수 있다. 예를 들어 투데이위젯 익스텐션인 경우 유저는 익스텐션을 활성화 하기 위해 알림센터의 투데이뷰를 편집할 수 있다. 혹은 어떤 경우는 iOS는 설정에서 macOS는 시스템프리퍼런스에서 활성화 할 수 있다.
각 앱익스텐션 타입별로 서로 다른 작업유형을 활성화함에도 불구하고 대부분의 익스텐션에 공통적인 UX 부분이 있다. 가장 훌룡한 UX는 빠르고 이어지고 하나의 작업에 집중하는 것이다.
유저는 시스템에서 제공되는 일련의 UI에 반을하여 당신의 앱익스텐션을 오픈하게 된다. 예를 들어 공유익스텐션은 시스템에서제공되는 공유버튼에 의해 표시된 목록에서 당신의 앱익스텐션을 선택함으로써 비로소 활성화된다.
대부분의 앱익스텐션이 자체 커스텀 UI요소를 갖고 있지만 앱익스텐션에 진입하기 전까지 유저는 커스텀UI를 보지 않는다. 유저가 당신의 앱익스텐션에 진입할 때 당신의 커스텀 UI는 사용자에세 새로운 맥락으로 이동되었다는것을 알게 한다. 현재 사용중인 앱과 당신의 익스텐션을 구분할 수 있기 때문에 오동작하거나 제대로 수행하지 못하는 액스텐션을 삭제할 수 있게 해준다.