https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW2
1. 앱 확장이란?
- 정의:
앱 확장은 하나의 앱이 다른 앱이나 시스템의 일부 기능에 자신의 기능이나 콘텐츠를 “확장”하여 제공할 수 있도록 하는 독립적인 실행 단위이다.
- 목적:
사용자에게 보다 통합된 경험을 제공하고, 앱이 자신의 기능을 다른 컨텍스트(예: 다른 앱이나 시스템 전반)에서 활용할 수 있도록 한다.
2. 앱 확장의 구조 및 동작 방식

-
별도의 번들과 프로세스:
- 앱 확장은 메인 앱과 별도의 번들로 존재하며, 독립된 프로세스로 실행된다.
- 이로 인해 보안성과 안정성이 강화되며, 메인 앱과의 충돌이나 자원 경쟁을 줄일 수 있다.
-
제한된 환경:
- 확장은 메모리, 실행 시간 등 시스템 자원에 대해 제한적인 환경 내에서 동작한다.
- 시스템은 확장이 너무 많은 자원을 사용하지 못하도록 제어하여, 전체 사용자 경험에 부정적인 영향을 주지 않도록 한다.
3. 앱 확장의 통신 방식
4. 앱 확장의 사용 사례 및 제공 기능
-
사용 사례:
- Share 확장: 사용자가 콘텐츠를 다른 앱이나 서비스로 공유할 수 있도록 지원한다.
- Action 확장: 특정 작업(예: 텍스트 편집, 이미지 처리 등)을 수행할 수 있는 UI를 제공한다.
- Today 위젯: 알림 센터나 홈 화면에서 빠르게 확인할 수 있는 정보를 표시한다.
- 사진 편집 확장 등: 사진이나 동영상 등의 미디어 편집 기능을 다른 앱 내에서 사용할 수 있게 한다.
-
호스트 앱과의 상호작용:
- 확장은 호스트 앱(또는 시스템) 내의 제한된 컨텍스트에서 실행되며, 데이터 공유나 작업 실행을 위해 미리 정의된 인터페이스(API)를 사용한다.
- 이러한 제한된 상호작용을 통해, 확장은 자신의 기능을 제공하면서도 보안과 성능 측면에서 안전하게 동작할 수 있다.
5. 개발 및 구현 가이드라인
-
정보 등록(Info.plist 설정):
- 확장 기능을 구현할 때, Info.plist 파일에 해당 확장이 어떤 역할을 하는지, 어떤 확장 포인트(extension point identifier)를 사용하는지를 명시한다.
-
Xcode 내 확장 타겟(Target):
- 앱 확장은 메인 앱과 별개의 타겟으로 관리된다.
- Xcode에서는 확장을 위한 전용 템플릿과 설정을 제공하여 개발자가 손쉽게 구현할 수 있도록 돕는다.
-
UI 디자인 및 사용자 경험:
- 확장이 제공하는 UI는 호스트 앱이나 시스템 UI와 일관성을 유지해야 한다.
- Apple의 Human Interface Guidelines를 따름으로써, 사용자가 자연스럽고 일관된 경험을 얻을 수 있도록 설계해야 한다.
-
제한 및 성능 고려:
- 확장은 제한된 메모리와 실행 시간을 고려해 설계되어야 하며, 시스템 리소스를 과도하게 사용하지 않도록 주의해야 한다.
- 필요한 경우, 호스트 앱과 데이터를 주고받는 방식(예: 컨테이너 앱을 통한 데이터 공유)에 대한 이해가 필요하다.
6. 보안 및 개인정보 보호
- 격리된 실행 환경:
- 앱 확장은 별도의 프로세스에서 실행되므로, 메인 앱과의 데이터 충돌이나 보안 문제가 발생할 가능성이 줄어든다.
- 제한된 데이터 접근:
- 확장은 사용자의 개인정보나 민감한 데이터에 접근하는 경우, 엄격한 제한을 받는다.
- 이를 통해 사용자 데이터의 안전을 보장하며, 시스템 전체의 신뢰성을 유지한다.
7. 배포 및 업데이트
-
번들링:
- 앱 확장은 메인 앱의 일부로 번들링되어 배포된다.
- 사용자에게 제공되는 확장은 메인 앱과 함께 설치되며, 업데이트도 함께 이루어진다.
-
디버깅과 테스트:
- 확장은 독립된 대상(target)으로 개발되기 때문에, Xcode 내에서 별도의 디버깅 세션을 통해 테스트할 수 있다.
- 다양한 시나리오에서 호스트 앱과의 상호작용, UI 반응, 성능 등을 꼼꼼하게 확인하는 것이 중요하다.