{{위키데이터 속성 추적}}
{{파일 포맷 정보
| 이름 = 애플리케이션 번들
| 확장자 = .app, .framework, .kext, .plugin, .docset, .xpc, .qlgenerator, .component, .saver, .mdimporter 등등...
| MIME = application/xml
| UTI = com.apple.application-bundle
| UTI 구조 = com.apple.application
| 내용 = [[실행 파일]], [[메타데이터]], 기타 번들, 애플리케이션에서 필요한 파일들
}}

[[NeXTSTEP]], [[OPENSTEP]], [[GNUstep]], 그리고 이것들의 후손작이라 할 수 있는 [[macOS]]와 [[iOS]], [[tvOS]], [[watchOS]]에서의 '''번들'''(bundle)은 정의된 구조와 파일 확장자를 갖는 [[디렉터리]]로, 개념상 관련된 파일들을 모두 하나로 묶어주는 역할을 한다.

보통 이런 번들은 [[애플리케이션]], 프레임워크나 플러그인의 실행 파일을 포함하고 있다. 이런 번들들은 실행 코드란 걸 알려주는 파일이 있으며, 그리고 인터페이스 빌더나 스트링 같은 같은 리소스 파일, 틀, 사진, 음악 등등을 모두 다 집어넣고 있다. 다른 OS, 예를 들어 [[마이크로소프트 윈도우]] 같은 경우, 이런 리소스들은 컴파일시 실행파일 안으로 들어간다. 구 [[Mac OS]]에서도 비슷한 개념을 다뤘는데, 이는 파일의 리소스 포크에다가 추가적인 [[메타데이터]]를 다는 것이었다.

프로그램적으로 번들은 [[코코아 (API)|코코아]] 클래스 중 <code>NSBundle</code>을 쓰거나, NeXTSTEP과 GNUStep의 파운데이션 프레임워크, 그리고 [[코어 파운데이션]]의 <code>CFBundle</code>으로 접근할 수 있다. 이런 번들의 UTI는 <code>com.apple.bundle</code>를 사용한다.<ref>{{웹 인용|title=System-Declared Uniform Type Identifiers|work=Uniform Type Identifiers Reference|url=http://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1|publisher=[[애플]]|accessdate=2017-02-16}}</ref> 기본적으로 이들 번들파일은 [[파인더 (소프트웨어)|파인더]]에서 하나의 파일로 보이며, 패키지 열기로 내용물을 보거나 수정할 수 있다.

== 애플리케이션 번들 ==
애플리케이션 번들은 디렉터리 계층을 가지는데, 맨 윗 디렉터리의 끝은 <code>.app</code> 확장자로 끝난다. 애플리케이션 번들의 경우 그 아래에 <code>Contents</code> 디렉터리가 자리하며, 이 <code>Contents</code> 디렉터리 안에 보통 다른 디렉터리가 들어간다. 이 <code>Contents</code> 중 맥의 경우 <code>MacOS</code>, [[GNUStep]] 같은 경우엔 애플리케이션의 이름 파일이 존재하고, 여기에 애플리케이션의 실행파일이 담긴다. 그리고 <code>Contents</code> 안에 리소스 폴더가 자리하고 있으며, 여기에 애플리케이션의 인터페이스 빌더 파일, nib 파일이 자리한다. 그리고 <code>Contents</code> 디렉터리 아래엔 없을수도 있지만 <code>Plugins</code>, <code>Frameworks</code>, 그리고 <code>Shared Frameworks</code>가 있어서 애플리케이션의 실행을 돕는다. 그리고 애플의 코드 서명을 받았을경우 <code>_CodeSignature</code>가 추가된다.

== 프레임워크 번들 ==
macOS의 프레임 워크도 마찬가지로 번들로 저장되며, 맨 윗 디렉터리의 끝은 <code>.framework</code> 확장자로 끝난다. 그 아래 대렉터리엔 <code>Versions</code> 디렉터리가 자리하는데, 이 디렉터리엔 프레임워크의 한 버전 혹은 여러 버전이 있으며, 각각의 디렉터리 안에는 프레임워크의 다이내막 라이브러리 코드를 포함하고 있다. <code>Versions</code> 디렉터리는 또한 현재 버전의 <code>Current</code> 디렉터리로의 심볼릭 링크가 포함되어 있다.<ref>{{웹 인용|title=Anatomy of Framework Bundles|url=http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html|publisher=Apple Inc.|accessdate=2011-09-03}}</ref>

== 적재가능한 번들 ==
적재가능한 번들에는 런타임에서 불러올수 있는 코드를 저장한다.<ref>{{웹 인용 |url=http://developer.apple.com/documentation/Cocoa/Conceptual/LoadingCode/Concepts/AboutLoadableBundles.html |제목=Code Loading Programming Topics for Cocoa: About Loadable Bundles<!-- Bot generated title --> |확인날짜=2007년 11월 4일 |보존url=https://web.archive.org/web/20080905204925/http://developer.apple.com/documentation/Cocoa/Conceptual/LoadingCode/Concepts/AboutLoadableBundles.html |보존날짜=2008년 9월 5일 |url-status=dead }}</ref> 이런 적재가능한 번들은 <code>.bundle</code>로 끝나며, 종종 플러그인에 사용되는데, 제일 대표적인 번들은 [[메일 (애플)]]에서 볼 수 있다.<ref>{{웹 인용 |url=http://www.tikouka.net/mailapp/ |제목=Apple Mail plug-ins and tools<!-- Bot generated title --> |확인날짜=2017-02-16 |archive-date=2009-03-08 |archive-url=https://web.archive.org/web/20090308133400/http://tikouka.net/mailapp/ }}</ref><ref>{{웹 인용 |url=http://hawkwings.net/plugins.htm |제목=Hawk Wings — Plug-ins for Apple Mail<!-- Bot generated title --> |확인날짜=2007년 11월 4일 |보존url=https://web.archive.org/web/20070831180432/http://www.hawkwings.net/plugins.htm |보존날짜=2007년 8월 31일 |url-status=dead }}</ref>

== 기타 번들들 ==
여러 macOS 소프트웨어들은 이 번들 포맷을 활용한다. 대표적인 예를 보자면 [[스크리브너]] 같은 경우엔 <code>.scriv</code>로 끝난다. 그러나, 윈도우에서는 이런 번들 개념이 없는터라 디렉터리 상태로 저장한다.

== .lproj ==
애플리케이션 번들에 포함된 '''.lproj''' 폴더는 [[소프트웨어]]의 [[국제화와 지역화]] 파일을 담고 있다. .lproj 폴더는 macOS의 언어 선택에 따라 그 앞의 문자에 따라 선택된다. 예를 들어 <code>ko.lproj</code> 같은 경우, 한국어로 설정된 macOS에서 한글로 프로그램을 띄어준다. 보통 이들 폴더에는 [[.nib]] 파일이나 필요한 스트링 파일이나 이미지를 넣을 수 있다.

== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html Bundle Programming Guide] at Apple Developer Connection
* [http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSBundle.html NSBundle documentation] from the GNUstep project
* [http://www.sveinbjorn.org/platypus Platypus] — a tool to create application bundles around scripts
* [http://filext.com/file-extension/lproj File extension details]

{{macOS}}

[[분류:MacOS]]
[[분류:NeXT]]
[[분류:GNUstep]]
[[분류:MacOS 개발]]