macOS 앱의 구조

1 day ago 2

  • macOS 애플리케이션은 명령줄 프로그램보다 복잡한 구성 요소를 가지며, 창과 메뉴 등 인터페이스 자원을 별도 구조로 관리함
  • Classic Mac OS에서는 실행 코드와 리소스가 파일의 리소스 포크에 저장되었으나, Mac OS X부터는 번들(bundle) 구조로 전환됨
  • 앱 번들은 Contents 디렉터리를 중심으로, MacOS·Resources·Frameworks 등의 하위 폴더와 Info.plist 같은 핵심 파일로 구성됨
  • 이후 코드 서명·App Store 영수증·공증(notarization) 등이 추가되며, 보안과 무결성을 강화한 구조로 발전함
  • 이러한 자급적(app bundle) 구조는 설치·업데이트·삭제를 단순화하고, 보안성과 유지관리 효율성을 높이는 핵심 기반이 됨

Classic Mac OS의 앱 구조

  • 초기 Mac OS에서는 창, 메뉴 등 UI 리소스를 실행 파일과 분리해 리소스 포크(resource fork) 에 저장
    • 예시로 QuarkXPress 4.11의 리소스가 ResEdit에서 표시됨
    • 실행 코드는 CODE 리소스에 포함되며, Finder가 인식할 수 있도록 파일 유형(type)과 생성자(creator) 정보가 함께 저장됨

Mac OS X의 번들 구조

  • Mac OS XNeXTSTEP에서 유래한 번들(bundle) 구조를 도입
    • 앱은 .app 확장자를 가진 디렉터리 형태이며, 내부에 Contents 폴더를 포함
    • MacOS 폴더에는 GUI 앱의 실행 파일과 명령줄 도구가 포함됨
    • Resources 폴더에는 앱 아이콘, GUI 구성 요소 등 리소스 파일이 저장됨
    • 일부 앱은 Frameworks 폴더를 포함해 dylib(동적 라이브러리) 를 내장함
  • Info.plist 파일은 필수이며, 실행 파일 이름, 아이콘, 최소 macOS 버전, 문서 유형, 버전 번호 등을 정의
  • PkgInfo 파일은 Classic Mac OS의 유형·생성자 정보를 유지하지만 필수는 아님
  • 앱 실행 시 launchd가 실행 코드를 시작하며, LaunchServicesRunningBoardInfo.plist 정보를 기반으로 초기화 절차를 수행

macOS에서의 보안 및 확장

  • Mac OS X 10.5 Leopard(2007) 부터 코드 서명(Code Signature) 이 도입되어 _CodeSignature 폴더가 추가됨
    • CodeResources 파일에 코드 디렉터리 해시(CDHash)가 포함되어 앱 무결성을 검증
  • App Store 배포 앱은 _MASReceipt 폴더에 스토어 영수증을 포함
  • 2018년 이후에는 공증(notarization) 이 도입되어, Apple이 발급한 티켓(ticket)CodeResources 파일로 번들에 ‘스테이플(staple)’ 가능
  • 현대 앱 번들은 과거에 시스템 폴더에 설치되던 구성 요소를 자체 포함
    • Library 폴더: LaunchDaemons, LoginItems 등
    • XPCServices 폴더: 앱이 사용하는 별도 실행 서비스
    • Plugins / Extensions 폴더: 앱 확장 기능 및 App Intents 포함
    • 일부 앱에는 version.plist 파일도 존재

앱 번들의 이점

  • 모든 구성 요소를 번들 내부에 통합함으로써 설치·업데이트·삭제가 간편해짐
  • 구성 요소 누락 가능성이 줄고, 서명 및 공증 보호를 통해 보안성이 강화됨
  • App Store 앱은 추가적으로 영수증 및 공증 티켓을 포함해 신뢰성을 확보
  • Intel과 Arm 아키텍처 간 구조 차이는 없으며, Mach-O 실행 파일이 두 플랫폼용 코드를 모두 포함하는 유니버설(fat) 바이너리 형태로 저장됨
    • 동일 파일 내에 각 아키텍처별 서명(signature) 이 함께 존재

앱 구조의 시각적 개요

  • 다이어그램에서 연노란색은 필수 또는 거의 모든 앱에 존재하는 구성 요소
  • 녹색은 App Store 배포 앱에서만 존재하는 항목, 파란색은 선택적 공증 티켓을 의미
  • 추가적으로 Automator 워크플로우, 스크립트 등 부가 요소가 포함될 수 있음
  • 전체적으로 macOS 앱은 자급적·보안 중심 구조로 진화해 왔음

Read Entire Article