BLOG ARTICLE Application | 1 ARTICLE FOUND

  1. 2008.08.28 OS X의 번들(Bundle) 둘러보기 (2)

1. 번들이란?
번들은 일반 사용자에게는 일반적으로 하나의 파일로 보이지만, 내부적으로 많은 서브디렉토리와 파일을 가지고 있는 특정한 목적에 사용되는 디렉토리 입니다. 번들은 OS X에서 어플리케이션, 동적라이브러리, 플러그인등 실행 가능한 용도외에도 키노트나 페이지의 복잡한 문서구조에도 사용됩니다.

이런 구조는 복잡한 환경과 옵션을 각각의 서브 디렉토리로 저장하고, 내부에서 사용하는 파일들을 번들 내부에 감춤으로써 보다 쉽고 편리하게 관리할 수 있습니다. 

1) 번들의 종류
대표적인 어플리케이션 번들을 포함하여 번들에는 다양한 종류가 있습니다. 번들의 이름은 확장자로 구별이 되기도 하는데 아래는 흔히 볼수 있는 번들의 확장자입니다.

  • .app - 일반적인 어플리케이션 번들입니다.
  • .wgdt - 데쉬보드에서 실행되는 위젯입니다.
  • .framework - 동적 라이브러리와 관련된 *.h, *.dylib와 이미지나 사운드의 리소스와 관련 문서들을 포함한 프레임워크 번들 입니다.
  • .bundle - 필요로 하는 어플리케이션 실행시에 동적으로 로드되고 링크되어 필요한 모듈을 제공하는 번들입니다.
  • .pkg - PackageMaker를 사용하여 시스템에 인스톨되는 패키지 번들입니다.

이외에 다양한 목적들로 사용되는 많은 번들이 있습니다. 번들은 종류에 따라 내부구조가 다르게 구성되어 있습니다.

2) info.plist
실행가능한 대부분의 번들들은 내부에 자신의 정보를 가지고 있는 info.plist란 XML 형식의 파일을 가지고 있습니다. (plist 파일은 /Developer/Applications/Utilities/Property List Editor를 이용하면 편리하게 관리할 수 있습니다) info.plist의 내용들은 시스템들이 관리할 수 있는 정보에 대해서 알려 줍니다. 아래는 Ruby.framework의 info.plist의 내용입니다.

사용자 삽입 이미지

info.plist에는 아이콘, 번들의 종류, 실행파일, 버젼등의 다양한 정보를 가지고 있습니다. 위는 Bundle OS Type code가 FMWK로 이 번들은 프레임워크임을 나타냅니다. (어플리케이션은 APPL입니다)

또한 info.plist에는 실행파일이 처리 가능한 문서들의 타입에 관한 정보도 포함되어 있습니다. 아래는 iTunes의 info.plist의 Document types중 9번째 아이템인 MP3 파일에 관한 정보입니다.

사용자 삽입 이미지

문서의 타입명과 아이콘, 해당 파일의 역활이 설정되어 있습니다. 해당 파일에 대한 어플리케이션의 역활을 Editor, Viewer, Shell등으로 지정할 수 있습니다.


2. 번들의 내부구조
1) FrameWork
아래는 /System/Library/Frameworks/ 아래 있는 Ruby.Framework의 내부구조입니다. inpo.plist 파일은 Versions/1.8/Resources 디렉토리 아래 있습니다.

사용자 삽입 이미지

Headers/
Versions/1.8/Headers의 심볼릭 링크입니다.
Resources/
Versions/1.8/Resources의 심볼릭 링크입니다.
Ruby
Versions/1.8/usr/lib/libruby.1.dylib 파일의 심볼릭 링크입니다.
Versions/
현재 시스템에서 루비 1.8만있기 때문에 1.8 디렉토리만 있으며, Versions 밑에는 여러 버젼의 디렉토리를 포함할 수 있습니다.
1.8/
각 서브 디렉토리에는 헤더파일, 동적 라이브러리, 실행파일과 필요한 리소스등, 프레임워크에서 실제 사용되는 파일들로 구성되어 있습니다.
current/
1.8 디렉토리가 심볼릭 링크가 되어 있으며 현재버젼을 의미합니다.
 
사용자 삽입 이미지

터미널에서 확인해 보면 ruby의 실행파일은 위 루비 프레임워크의 Current에 링크된 버젼을 사용하고 있음을 알 수 있습니다.

2) Application
사용자 삽입 이미지
어플리케이션의 번들은 좌측과 같이 해당 어플리케이션을 우클릭한 후에 '패키지 내용보기'를 클릭하면 확인할 수 있습니다.


아래는 이전에 소개했던 ClassDump라는 어플리케이션의 번들 구조입니다.

사용자 삽입 이미지

Application은 기본적으로 Contents 디렉토리 밑에 info.plist 파일, 실행파일이 위치하는 /MacOS 폴더와 함께 다양한 리소스를 포함하고 있는 /Resource 디렉토리로 구성되어 있습니다. /Resource 디렉토리에는 nib 파일들과 이미지, 사운드, 동영상등의 리소스 파일들이 위치합니다.

또한 /Resource 디렉토리 밑에는 각 언어별로 로컬라이징된 리소스들이 *.lpoj (localized project folder) 확장자를 가진 서브디렉토리들이 위치하고 있습니다. English.lpoj에는 이름과 같이 영문으로된 문자, 이미지, nib등의 리소스가 포함되어 있습니다. English.lpoj만 있기 때문에 이 어플리케이션은 영어외에는 지원하지 않는 것을 알 수 있습니다.

어플리케이션 번들에는 생성툴에서 만들어진 디렉토리, 파일 외에 사용자가 용도에 따라 서브디렉토리를 만들거나 데이터 파일을 저장할 수 있습니다. 위의 Resources/ 디렉토리에는 class-dump란 커멘드라인 유틸리티가 포함되어 있습니다. (아마 GUI 뒷단에서 시스템에 관련된 실질적인 처리를 하고 파이프로 GUI 어플리케이션과 통신을 하는 핵심 유틸리티 같습니다)

이외에 어플리케이션, 프래임워크등의 또 다른 번들도 내부에 포함할 수 있으며, 파이어폭스의 경우에는 윈도우즈 파이어폭스의 폴더내의 파일들이 /MacOS 디렉토리내에 실행파일과 같이 위치하고 있습니다.

사용자 삽입 이미지
좌측은 페이지에서 작성된 번들파일의 내용입니다. 페이지는 데이터를 xml 형식으로 gz으로 압축하여 보관하는 것으로 짐작할 수 있습니다.

파인더의 퀵룩에서 빠른 처리를 위해 QuickLook 디렉토리에 썸브네일 이미지를 따로 보관하고 있습니다.

일부만 소개했지만 번들은 이와 같이 OS X에서 다양하게 사용되고, 중요한 부분을 차지하고 있습니다.

코코아에서는 NSBundle을 이용하여 번들에 접근하고 관리할 수 있습니다. 번들 프로그래밍에 대한 자세한 내용은 ADCBundle Programming Guide 문서를 참고하시기 바랍니다.

'기타' 카테고리의 다른 글

OS X 루트계정 활성화  (6) 2008.10.08
nib 파일 둘러보기  (7) 2008.09.01
OS X의 번들(Bundle) 둘러보기  (2) 2008.08.28
맥 OS X에서 CHM 파일 보기  (4) 2008.08.19
ClassDumper - 응용프로그램 Class Viewer  (0) 2008.08.07
레밍스와 유사한 게임 - Pingus  (6) 2008.07.23