[iOS 17주차] App Extension Programming

DoyleHWorks·2025년 2월 11일
0

https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW2


1. 앱 확장이란?

  • 정의:
    앱 확장은 하나의 앱이 다른 앱이나 시스템의 일부 기능에 자신의 기능이나 콘텐츠를 “확장”하여 제공할 수 있도록 하는 독립적인 실행 단위이다.
  • 목적:
    사용자에게 보다 통합된 경험을 제공하고, 앱이 자신의 기능을 다른 컨텍스트(예: 다른 앱이나 시스템 전반)에서 활용할 수 있도록 한다.

2. 앱 확장의 구조 및 동작 방식

  • 별도의 번들과 프로세스:

    • 앱 확장은 메인 앱과 별도의 번들로 존재하며, 독립된 프로세스로 실행된다.
    • 이로 인해 보안성과 안정성이 강화되며, 메인 앱과의 충돌이나 자원 경쟁을 줄일 수 있다.
  • 제한된 환경:

    • 확장은 메모리, 실행 시간 등 시스템 자원에 대해 제한적인 환경 내에서 동작한다.
    • 시스템은 확장이 너무 많은 자원을 사용하지 못하도록 제어하여, 전체 사용자 경험에 부정적인 영향을 주지 않도록 한다.

3. 앱 확장의 통신 방식

  • 호스트 앱과의 기본 통신

    • 트랜잭션 방식:
      앱 확장은 주로 요청/응답 모델을 사용하여 호스트 앱과 통신한다. 즉, 호스트 앱이 요청을 보내면 확장이 이를 처리하고 응답을 반환하는 방식이다.
    • 생명주기 및 컨텍스트:
      호스트 앱이 확장을 실행할 때, 시스템은 확장이 작업을 수행하는 데 필요한 데이터를 담은 확장 컨텍스트를 제공한다.

  • 포함 앱(Containing App)과의 직접 통신 없음

    • 프로세스 분리:
      앱 확장과 이를 포함하는 앱(확장을 번들로 제공하는 앱) 사이에는 직접적인 통신이 없다. 종종 확장이 실행되는 동안 포함 앱은 실행되고 있지 않는다.
    • 제한된 간접 접근:
      직접적인 통신은 없지만, Today 위젯(이 확장 유형에만 해당)은 확장 컨텍스트의 openURL:completionHandler: 메서드를 호출하여 간접적으로 포함 앱을 열 수 있다.
  • 공유 데이터 접근

    • 공유 컨테이너:
      확장과 포함 앱은 모두 사적으로 정의된 공유 컨테이너를 통해 데이터를 공유할 수 있다. 이 메커니즘을 통해 두 대상이 직접 통신하지 않고도 정보를 교환할 수 있다.
  • 기본 통신 메커니즘

    • 프로세스 간 통신 (IPC):
      시스템은 호스트 앱과 확장 간의 상호작용을 가능하게 하는 저수준의 프로세스 간 통신을 처리한다.
    • 개발자 추상화:
      개발자는 확장 포인트와 시스템이 제공하는 상위 수준의 API를 사용하므로, 기본적인 IPC 세부 사항에 대해 신경 쓸 필요가 없다.

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 반응, 성능 등을 꼼꼼하게 확인하는 것이 중요하다.

profile
Reciprocity lies in knowing enough

0개의 댓글

관련 채용 정보