번들 구조

표준 번들 타입의 구조와 컨텐츠를 설명합니다.

원문 출처 https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1

번들 구조는 번들 유형과 타겟 플랫폼에 따라 달라질 수 있습니다. 다음 섹션에서는 MacOS와 iOS 모두에서 가장 일반적으로 사용되는 번들 구조를 설명합니다.

알림

번들이 실행 가능한 코드를 패키징하는 한 가지 방법이기는 하지만, 지원되는 유일한 방법은 아닙니다. UNIX 셸 스크립트 및 커맨드라인 도구는 번들 구조를 사용하지 않으며 정적/동적 공유 라이브러리도 사용하지 않습니다.

애플리케이션 번들

애플리케이션 번들은 개발자가 생성하는 가장 일반적인 유형의 번들입니다. 애플리케이션 번들은 애플리케이션의 성공적인 작동에 필요한 모든 것을 저장합니다. 애플리케이션 번들의 구조는 애플리케이션 플랫폼에 따라 다르지만, 번들을 사용하는 방법은 두 플랫폼 모두에서 동일합니다. 이 장에서는 iOS 애플리케이션과 MacOS 애플리케이션의 번들 구조를 둘 다 설명합니다.

애플리케이션 번들에는 무슨 파일이 들어가나요?

다음 표에는 애플리케이션 번들 내에서 찾을 수 있는 파일 유형이 요약되어 있습니다. 이러한 파일의 정확한 위치는 플랫폼마다 다르며 일부 리소스는 전혀 지원되지 않을 수 있습니다. 예제와 자세한 내용은 이 장의 플랫폼별 번들 섹션을 참조하세요.

애플리케이션 번들에 포함된 대부분의 리소스가 선택 사항이지만 항상 그런것은 아닙니다. 예를 들어 iOS 애플리케이션에는 일반적으로 애플리케이션 아이콘과 기본 화면에 대한 추가 이미지 리소스가 필요합니다. 또한 대부분의 Mac 앱에는 시스템에서 제공하는 기본 아이콘 대신 커스텀 아이콘이 포함되어 있습니다.

iOS 애플리케이션 분석

Xcode에서 제공하는 프로젝트 템플릿은 iPhone 또는 iPad 애플리케이션의 번들을 설정하는 데 필요한 대부분의 작업을 수행합니다. 그러나 번들 구조를 이해하면 사용자 지정 파일을 저장할 위치를 결정하는 데 도움이 됩니다. iOS 애플리케이션의 번들 구조는 모바일 장치의 요구에 더 잘 맞춰져 있습니다. 외부 디렉토리가 거의 없는 비교적 평평한 구조를 사용하여 디스크 공간을 절약하고 파일에 대한 액세스를 간소화합니다.

iOS 애플리케이션 번들 구조

일반적인 iOS 애플리케이션 번들에는 실행 파일과 애플리케이션에서 사용하는 모든 리소스(예: 응용프로그램 아이콘, 기타 이미지 및 지역화된 콘텐츠)가 최상위 번들 디렉토리에 포함되어 있습니다. 다음 예제는 MyApp이라는 간단한 iPhone 애플리케이션의 구조를 보여줍니다. 하위 디렉토리에 있어야 하는 파일은 지역화해야 하는 파일뿐이지만 사용자 자신의 응용 프로그램에 추가 하위 디렉토리를 생성하여 리소스 및 기타 관련 파일을 구성할 수 있습니다.

MyApp

다음 표는 MyApp의 내용을 설명합니다. 이 애플리케이션 자체는 데모용으로만 사용할 수 있지만 포함된 많은 파일은 애플리케이션 번들로 검색할 때 iOS에서 찾을 수 있는 특정 파일들을 나타냅니다. 지원하는 기능에 따라 자신의 번들에 이러한 파일의 일부 또는 전체가 포함됩니다.

알림

iOS 앱 번들에는 "Resources"라는 이름의 사용자 지정 폴더가 포함될 수 없습니다.

iOS 애플리케이션은 국제화되어야 하며 지원하는 각 언어에 대한 language.lproj 폴더가 있어야 합니다. 국제화를 위해 애플리케이션 커스텀 리소스의 지역화 버전을 제공하거나 언어별 프로젝트 디렉토리에 동일한 이름의 파일을 배치하여 Launch 이미지를 로컬화할 수도 있습니다. 그러나 지역화 버전을 제공하는 경우에도 항상 해당 파일의 기본 버전을 애플리케이션 번들의 최상위 수준에 포함해야 합니다. 기본 버전은 특정 위치 지정을 사용할 수 없는 경우에 사용됩니다. 지역화된 리소스에 대한 자세한 내용은 번들의 지역화된 리소스를 참조하세요.

The Information Property List File

모든 iOS 애플리케이션에는 애플리케이션의 구성 정보가 포함된 Information Property list(Info.plist) 파일이 있어야 합니다. 새 iOS 애플리케이션 프로젝트를 만들 때 Xcode는 자동으로 이 파일을 생성하고 일부 주요 프로퍼티 값을 설정합니다. 표 2-3에는 명시적으로 설정해야 하는 몇 가지 추가 키가 나열되어 있습니다. (키에는 비교적 모호한 실제 이름과 Xcode상에서 표시되는 이름이 있습니다. Xcode상에서 표시되는 이름은 괄호안에 명시되어있고 편집기에서 Information Property를 마우스 우클릭해서 나타나는 메뉴에서 Show Raw keys/values를 선택하여 모든 키의 실제 이름을 볼 수 있습니다.)

표 2-3 Info.plist 파일의 필수 키

표 2-4에는 방금 설명된 키 외에 iOS 애플리케이션에서 일반적으로 사용하는 몇 가지 키가 나열되어 있습니다. 이러한 키는 필수적이지는 않지만 대부분은 시작 시 애플리케이션의 구성을 조정하는 방법을 제공합니다. 이러한 키를 제공하면 응용 프로그램이 시스템에서 적절하게 제시되도록 할 수 있습니다.

표 2-4 Info.plist 파일에 일반적으로 포함되는 키

애플리케이션 아이콘과 이미지

애플리케이션 아이콘과 시작 이미지는 모든 애플리케이에 있어야 하는 표준 그래픽입니다. 모든 애플리케이션은 기기의 홈 화면과 앱 스토어에 표시할 아이콘을 지정해야 합니다. 또한 여러 가지 상황에서 사용할 수 있는 아이콘들을 지정할 수 있습니다. 예를 들어 애플리케이션은 검색 결과를 표시할 때 사용할 아이콘의 작은 버전을 제공할 수 있으며 시작 이미지는 앱이 시작될때 사용자에게 시각적 피드백을 제공합니다.

아이콘 및 시작 이미지를 나타내는 데 사용되는 이미지 파일은 모두 번들의 루트 레벨에 있어야 합니다. 시스템에서 이러한 이미지를 식별하는 방법은 여러가지가 있지만 애플리케이션 아이콘을 지정하는 권장 방법은 CFBundleIconFiles 키를 사용하는 것입니다. 애플리케이션에서 아이콘을 지정하고 이미지를 시작하는 방법에 대한 자세한 내용은 iOS용 앱 프로그래밍 가이드의 고급 앱 트릭에서 이러한 항목에 대한 설명을 참조하십시오.

참고

번들 루트 레벨의 아이콘과 시작 이미지 외에도 애플리케이션의 언어별 프로젝트 하위 디렉토리에 지역화된 버전의 시작 이미지를 포함할 수도 있습니다. 애플리케이션에 지역화된 리소스를 포함하는 방법에 대한 자세한 내용은 번들의 지역화된 리소스를 참조하십시오.

iOS 애플리케이션 리소스

iOS 애플리케이션에서 로컬이 아닌 리소스는 애플리케이션 실행 파일 및 Info.plist 파일과 함께 번들 디렉토리의 루 레벨에 위치합니다. 대부분의 iOS 애플리케이션에는 루트 레벨에 애플리케이션 아이콘, 시작 이미지 및 하나 이상의 nib 파일을 포함하고 있습니다. 대부분의 비로컬 리소스는 이 최상위 디렉토리에 배치해야 하지만 하위 디렉토리를 생성하여 리소스 파일을 구성할 수도 있습니다. 지역화된 리소스는 하나 이상의 언어별 하위 디렉토리에 배치되어야 하며, 이 하위 디렉토리는 번들의 지역화된 리소스에 대해 자세히 설명합니다.

목록 2-2는 지역화된 리소스와 지역화되지 않은 리소스를 모두 포함하는 가상 애플리케이을 보여 줍니다. 지역화되지 않은 리소스는 Hand.png, MainWindow.nib, MyAppViewController.nib와 WaterSounds 디렉토리 컨텐츠들이고 en.lproj 및 jp.lproj 디렉토리에 있는 항목들은 지역화된 리소스에 해당됩니다.

목록 2-2 애플리케이션 내의 지역화된 리소스와 지역화되지 않은 리소스들

MyApp.app/
   Info.plist
   MyApp
   Default.png
   Icon.png
   Hand.png
   MainWindow.nib
   MyAppViewController.nib
   WaterSounds/
      Water1.aiff
      Water2.aiff
   en.lproj/
      CustomView.nib
      bird.png
      Bye.txt
      Localizable.strings
   jp.lproj/
      CustomView.nib
      bird.png
      Bye.txt
      Localizable.strings

애플리케이션 번들에서 리소스 파일을 찾는 방법에 대한 자세한 내용은 번들 콘텐츠 액세스를 참조하세요. 리소스 파일을 로드하고 프로그램에서 사용하는 방법에 대한 자세한 내용은 리소스 프로그래밍 가이드를 참조하세요.

macOS 애플리케이션 분석

Xcode에서 제공하는 프로젝트 템플릿은 개발 중에 Mac 앱 번들을 설정하는 데 필요한 대부분의 작업을 수행합니다. 그러나 번들 구조를 이해하면 사용자 지정 파일을 저장할 위치를 결정하는 데 도움이 됩니다. MacOS 번들은 조직된 구조를 사용하여 번들 로드 코드가 번들에서 리소스와 기타 중요한 파일을 쉽게 찾을 수 있도록 합니다. 또한 계층적 특성은 시스템이 다른 애플리케이션의 (문서 유형을 구현하기 위해 사용하는) 디렉토리 패키지와 같은 코드 번들을 구별하는 데 도움이 됩니다.

macOS 애플리케이션 번들 구조

Mac 애플리케이션 번들의 기본 구조는 매우 간단합니다. 번들의 최상위에는 Contents라는 디렉토리가 있습니다. 이 디렉토리에는 애플리케이션에 필요한 리소스, 실행 파일, 개인 프레임워크, 개인 플러그인 및 지원 파일을 비롯한 모든 항목이 포함됩니다. Contents 디렉토리는 불필요하게 보일 수 있지만 이전 버전의 Mac OS에서 볼 수 있는 레거시 번들 또는 문서 유형과 모던 스타일 번들을 구분짓는 역할을 합니다.

Listing 2-3은 Contents 디렉토리에서 찾을 가능성이 있는 즉각적인 파일과 디렉토리를 포함하여 일반적인 애플리케이션 번들의 상위 레벨 구조를 보여줍니다. 이 구조는 모든 Mac 애플리케이션의 핵심을 나타냅니다.

목록 2-3 Mac App의 기본 구조

MyApp.app/
   Contents/
      Info.plist
      MacOS/
      Resources/

표 2-5는 Contents 디렉토리에서 찾을 수있는 디렉토리와 각 디렉토리의 목적을 나열합니다. 이 목록은 엄격하게 구분된 것은 아니지만 공통된 용도로 사용되는 디렉토리를 나타냅니다.

표 2-5 Contents 디렉토리의 하위 디렉토리

애플리케이션 번들은 수년간 발전해 왔지만 전반적인 목표는 같았습니다. 번들 구조는 애플리케이션이 리소스를 더 쉽게 찾을 수 있도록 하는 동시에 사용자가 이러한 리소스에 간섭하는 것을 더 어렵게 만듭니다.. Finder는 대부분의 번들을 불투명 엔터티로 처리하므로, 일반 사용자가 애플리케이션에 필요한 리소스를 이동하거나 삭제하기가 어렵습니다.

The Information Property List File

Finder에서 애플리케이션 번들을 인식하게 하려면 Information Property List (Info.plist) 파일을 포함시켜야합니다. 이 파일에는 번들 구성을 식별하는 XML 특성 목록 데이터가 들어 있습니다. 최소 번들의 경우 이 파일에는 거의 정보가 없으며 대부분 번들의 이름과 식별자뿐입니다. 더 복잡한 번들의 경우, Info.plist 파일은 더 많은 정보를 포함합니다.

중요

번들 리소스는 검색시 대소문자를 구분합니다. 따라서 Information Proper 파일의 이름은 대문자 "I"로 시작해야합니다.

표 2-6은 Info.plist 파일에 항상 포함해야 하는 키를 나열합니다. Xcode는 새 프로젝트를 만들 때 이러한 모든 키를 자동으로 제공합니다. (키에는 비교적 모호한 실제 이름과 Xcode상에서 표시되는 이름이 있습니다. Xcode상에서 표시되는 이름은 괄호안에 명시되어있고 편집기에서 Information Property를 마우스 우클릭해서 나타나는 메뉴에서 Show Raw keys/values를 선택하여 모든 키의 실제 이름을 볼 수 있습니다.)

표 2-6 Info.plist 파일에 필요한 키

표 2-7 Info.plist 파일에 권장되는 키

The exact information you put into your Info.plist file is dependent on your bundle’s needs and can be localized as necessary. For more information on this file, see Runtime Configuration Guidelines.

리소스 디렉토리

리소스 디렉토리에는 모든 이미지, 음원, nib 파일, 문자열 리소스, 아이콘 파일, 데이터 파일 및 구성 파일이 포함됩니다. 이 디렉토리의 내용은 지역화된 리소스 파일과 지역화되지 않은 리소스 파일을 저장할 수 있는 영역으로 추가로 세분화됩니다. 로컬이 아닌 리소스는 리소스 디렉토리 자체의 최상위 수준 또는 사용자가 정의하는 하위 디렉토리에 있습니다. 로컬화된 리소스는 언어별 프로젝트 하위 디렉토리에 상주하며, 특정 지역화와 일치하도록 이름이 지정됩니다.

Resources 디렉토리가 어떻게 구성되어 있는지 확인하는 가장 좋은 방법은 예제를 살펴 보는 것입니다. Listing 2-4는 지역화 된 리소스와 그렇지 않은 리소스를 모두 포함하는 가상의 애플리케이션을 보여줍니다. Hand.tiff, MyApp.icns 및 WaterSounds 디렉토리의 컨텐츠는 지역화되지 않은 리소스이고, en.lproj 디렉토리와 jp.lproj 디렉토리, 그리고 해당 디렉토리의 컨텐츠들이 모두 지역화된 리소스에 해당합니다.

목록 2-4 Mac App의 지역화된 리소스와 지역화되지 않은 리소스들

MyApp.app/
   Contents/
      Info.plist
      MacOS/
         MyApp
      Resources/
         Hand.tiff
         MyApp.icns
         WaterSounds/
            Water1.aiff
            Water2.aiff
         en.lproj/
            MyApp.nib
            bird.tiff
            Bye.txt
            InfoPlist.strings
            Localizable.strings
            CitySounds/
               city1.aiff
               city2.aiff
         jp.lproj/
            MyApp.nib
            bird.tiff
            Bye.txt
            InfoPlist.strings
            Localizable.strings
            CitySounds/
               city1.aiff
               city2.aiff

각 언어별 프로젝트 디렉토리에는 동일한 리소스 파일 세트가 포함되어야하며 단일 리소스 파일의 이름은 모든 지역화에서 동일해야합니다. 즉, 특정 파일의 이름은 동일하고 내용만 한 지역에서 다른 지역으로 변경되는 것입니다. 코드에서 리소스 파일을 요청할 때는 원하는 파일의 이름만 지정하면 됩니다. 번들 로드 코드는 사용자의 현재 언어 기본 설정을 참고하여 요청 파일을 검색할 디렉토리를 결정합니다.

애플리케이션 번들에서 리소스 파일을 찾는 방법에 대한 자세한 내용은 번들 컨텐츠 액세스를 참조하세요. 리소스 파일을로드하고 프로그램에서 사용하는 방법에 대한 자세한 내용은 리소스 프로그래밍 가이드를 참조하세요.

애플리케이션 아이콘 파일 최상위 레벨 Resources 디렉토리에 속한 특별한 리소스 중 하나가 애플리케이션 아이콘 파일입니다. 규칙에 따라 이 파일에는 번들의 이름과 .icns의 확장자가 사용됩니다. 이미지 형식은 지원되는 모든 유형이 될 수 있지만 확장자가 지정되지 않으면 시스템은 .icns로 간주합니다.

Information Property List 지역화 애플리케이션의 Info.plist 파일에 있는 키 중 일부는 사용자에게 보여지는 문자열을 포함하기 때문에 macOS는 해당 문자열의 지역화 된 버전을 지정하는 메커니즘을 제공합니다. 각 언어별 프로젝트 디렉토리에는 적절한 현지화를 지정하는 InfoPlist.strings 파일을 포함 할 수 있습니다. 이 파일은 지역화하려는 Info.plist 키와 적절한 변환으로 구성된 항목이 들어있는 문자열 파일(property list가 아님)입니다. 예를 들어, 텍스트 편집기 애플리케이션에서 InfoPlist.strings의 독일어 버전은 다음 문자열을 포함합니다.

CFBundleDisplayName = "TextEdit";
NSHumanReadableCopyright = "Copyright © 1995-2009 Apple Inc.\nAlle Rechte vorbehalten.";

애플리케이션 번들 만들기

애플리케이션 번들을 만드는 가장 간단한 방법은 Xcode를 사용하는 것입니다. 모든 새 애플리케이션 프로젝트에는 적절하게 구성된 애플리케이션 타겟이 포함됩니다. 애플리케이션 타겟은 컴파일 할 소스 파일, 번들에 복사 할 리소스 파일 등을 포함하여 애플리케이션 번들을 작성하는데 필요한 규칙을 정의합니다. 새로운 프로젝트에는 미리 구성된 Info.plist 파일과 일반적으로 몇가지 다른 파일이 포함되어있어 신속하게 시작할 수 있습니다. 프로젝트 윈도우를 사용하여 필요에 따라 사용자화 파일을 추가하고 Info 또는 Inspector 윈도우를 사용하여 해당 파일을 구성 할 수 있습니다. 예를 들어 정보창을 사용하여 번들 내의 리소스 파일에 대한 사용자 지정 위치를 지정할 수 있습니다.

Xcode에서 대상을 구성하는 방법에 대한 정보는 Xcode 빌드 시스템 가이드를 참조하십시오.

프레임워크 번들

프레임워크 번들 분석

프레임워크 번들 만들기

로드 가능한 번들

로드 가능한 번들 분석

로드 가능한 번들 만들기

번들의 지역화된 리소스

Last updated