4. UIKit / App Structure - App extensions

김동현·2022년 12월 21일
0

UI Kit 스터디

목록 보기
4/6

App Extension

사용자가 다른 앱이나 시스템과 상호작용 하는 동안 사용자 지정 기능과 콘텐츠를 사용할 수 있도록 해주는 것

💡 app extension은 다른 app에서 독립적으로 실행되는 별도의 실행 바이너리
  • host app: 익스텐션이 시작되고 사용되는 애플리케이션

  • extension type: 익스텐션의 종류

    • Today Extension
    • Share Extension
    • Action Extension
    • Photo Editing Extension
  • extension point: extension type이 제공되는 방식. 익스텐션이 구현될 수 있도록 공개된 iOS 운영체제의 영역


app extension 예시

Share Extension

사용자가 호스트 앱에서 공유 버튼을 눌렀을 때 나타나는 뷰 패널에 표시됨

Photo Editing Extension

현재 두개의 포토 에디팅 익스텐션 옵션 포함 중


App Extension의 생명주기

앱 익스텐션은 앱이 아니기 때문에 생명주기와 환경이 다름

  1. 사용자가 앱 익스텐션을 선택함(사용자 작업에 대한 응답으로 요청을 보낼 때 익스텐션의 생명주기가 시작 )
    1. 호스트 앱에서 텍스트를 선택 → 공유 버튼 누름 → 앱 익스텐션 프로그램 선택 의 과정을 진행한다 했을 때, 호스트 앱은 “선택한 텍스트를 포함한 요청”을 익스텐션에 보낼 것임 : 해당 과정을 일반화한 것이 1번 단계!
  2. 시스템이 호스트 앱의 요청으로부터 받은 항목을 사용하여 작업을 수행
    1. //익스텐션 프로그램은 호스트 앱의 컨텍스트 내에서 뷰를 표시한 다음, 요청으로부터 받은 내용을 사용하여 작업을 수행함
    2. 위의 예시라면, 익스텐션 프로그램은 선택한 텍스트를 받을 것임
  3. 호스트 앱의 요청을 완료함. 익스텐션 프로그램의 작업이 완료되면, 해당 결과가 호스트 앱에 반영됨
  4. 앱 익스텐션이 작업을 수행한 직후, 익스텐션을 종료

App Extension의 통신 방법

앱 익스텐션은 호스트 앱과만 직접 통신함 (앱 익스텐션을 포함하고 있는 앱은 호스트 앱과 직접 통신하지 않음)

시스템은 호스트 앱을 대신해서 앱 익스텐션을 열고, 호스트가 제공하는 익스텐션 컨텍스트에서 데이터를 전달함

익스텐션은 UI를 화면에 표시하고 특정 상황에 따라 호스트에게 데이터를 반환함

이때, 앱 익스텐션과 해당 앱 익스텐션을 포함하고 있는 앱을 점선으로 연결한 이유는, 앱 익스텐션과 이를 포함하는 앱이 간접적으로만 소통하기 때문임(일반적으로 앱 익스텐션이 실행되는 동안 이를 포함하는 앱은 실행되지 않음)

Today widget(얘가 유일하게 익스텐션과 포함하는 앱이 소통함)은 NSExtensionContext 클래스 안에 있는 openURL:completionHandler라는 메소드를 사용함으로써 앱 익스텐션을 포함하고 있는 앱을 열어달라고 요청할 수 있음

모든 앱 익스텐션 및 이를 포함하는 앱은 private로 정의된 공유 컨테이너 내의 공유 데이터에 접근할 수 있음

profile
디자인과 개발을 모두 할줄 아는 능력있는 개발자가 되고싶습니다.

0개의 댓글