사용자가 다른 앱이나 시스템과 상호작용 하는 동안 사용자 지정 기능과 콘텐츠를 사용할 수 있도록 해주는 것
💡 app extension은 다른 app에서 독립적으로 실행되는 별도의 실행 바이너리host app: 익스텐션이 시작되고 사용되는 애플리케이션
extension type: 익스텐션의 종류
extension point: extension type이 제공되는 방식. 익스텐션이 구현될 수 있도록 공개된 iOS 운영체제의 영역
Share Extension
사용자가 호스트 앱에서 공유 버튼을 눌렀을 때 나타나는 뷰 패널에 표시됨
Photo Editing Extension
현재 두개의 포토 에디팅 익스텐션 옵션 포함 중
앱 익스텐션은 앱이 아니기 때문에 생명주기와 환경이 다름
앱 익스텐션은 호스트 앱과만 직접 통신함 (앱 익스텐션을 포함하고 있는 앱은 호스트 앱과 직접 통신하지 않음)
시스템은 호스트 앱을 대신해서 앱 익스텐션을 열고, 호스트가 제공하는 익스텐션 컨텍스트에서 데이터를 전달함
익스텐션은 UI를 화면에 표시하고 특정 상황에 따라 호스트에게 데이터를 반환함
이때, 앱 익스텐션과 해당 앱 익스텐션을 포함하고 있는 앱을 점선으로 연결한 이유는, 앱 익스텐션과 이를 포함하는 앱이 간접적으로만 소통하기 때문임(일반적으로 앱 익스텐션이 실행되는 동안 이를 포함하는 앱은 실행되지 않음)
Today widget(얘가 유일하게 익스텐션과 포함하는 앱이 소통함)은 NSExtensionContext 클래스 안에 있는 openURL:completionHandler라는 메소드를 사용함으로써 앱 익스텐션을 포함하고 있는 앱을 열어달라고 요청할 수 있음
모든 앱 익스텐션 및 이를 포함하는 앱은 private로 정의된 공유 컨테이너 내의 공유 데이터에 접근할 수 있음