Skip to content

Instantly share code, notes, and snippets.

@okstring
Last active August 17, 2021 14:05
Show Gist options
  • Save okstring/1b3588cdba8a416df56939c25d366967 to your computer and use it in GitHub Desktop.
Save okstring/1b3588cdba8a416df56939c25d366967 to your computer and use it in GitHub Desktop.

Bundle

A representation of the code and resources stored in a bundle directory on disk.

디스크의 번들 디렉토리에 저장된 코드 및 리소스의 표현입니다.

개요

Apple은 번들을 사용하여 앱, 프레임워크, 플러그인 및 기타 여러 특정 유형의 콘텐츠를 나타냅니다. 번들은 포함된 리소스를 잘 정의된 하위 디렉토리로 구성하며, 번들 구조는 플랫폼과 번들 유형에 따라 달라집니다. 번들 개체를 사용하면 번들의 구조를 모르는 상태에서 번들의 리소스에 액세스할 수 있습니다.

bundle object는 번들 구조, 사용자 기본 설정, 사용 가능한 지역화 및 기타 관련 요소를 고려하여 항목을 찾기 위한 단일 인터페이스를 제공합니다. 모든 실행 파일은 bundle object를 사용하여 앱 번들 내부 또는 다른 곳에 있는 알려진 번들에서 리소스를 찾을 수 있습니다.

번들 개체를 사용하여 컨테이너 디렉토리나 파일 시스템의 다른 부분에서 파일을 찾지 않습니다. 번들 개체를 사용하는 일반적인 패턴은 다음과 같습니다.

  1. 원하는 번들 디렉토리에 대한 번들 개체를 생성합니다.
  2. 번들 개체의 방법을 사용하여 필요한 리소스를 찾거나 로드합니다.
  3. 다른 시스템 API를 사용하여 리소스와 상호 작용합니다.

자주 사용하는 일부 유형의 리소스를 번들 없이 찾아서 열 수 있습니다. 예를 들어 이미지를 로드할 때 UIImage 또는 NSImage 이미지의 init(named:) 메소드를 사용하여 이미지를 자산 카탈로그에 저장하고 로드합니다. 마찬가지로 문자열 리소스의 경우 전체 .strings 파일을 직접 로드하는 대신 NSLocalizedString을 사용하여 개별 문자열을 로드합니다.


번들은 다른 위치로 옮기기만 하면 어플리케이션이나 다른 소프트웨어 파일들을 쉽게 설치, 재배치할 수 있게 도와줍니다. 번들은 internationalization에 있어 중요한 요소입니다. 로컬 리소스를 특별히 이름 지어진 번들의 하위 디렉토리(specially named subdirectories of a bundle)에 저장합니다. 프로그램적 설비들(programmatic facilities)은 유저의 언어 선호도(a user’s language preferences)와 관련된 위치에서 로컬 리소스를 찾습니다.

Xcode 프로젝트들은 대부분 빌드할 때 하나의 번들을 만듭니다. 그렇기 때문에 직접 번들을 구성할 필요가 거의 없죠. 그렇더라도 그 구조를 이해하고 어떻게 그 안에 있는 코드와 리소스에 접근 하는지는 이해하는 건 중요합니다.


애플리케이션 번들의 파일 유형

파일 설명
Info.plist 파일 (필수) 응용 프로그램에 대한 구성 정보를 포함 하는 구조화된 파일 입니다. 시스템은 이 파일의 존재에 의존하여 애플리케이션 및 관련 파일에 대한 관련 정보를 식별합니다.
Executable (필수) 모든 응용 프로그램에는 실행 파일이 있어야 합니다. 이 파일에는 응용 프로그램의 기본 진입점과 응용 프로그램 대상에 정적으로 연결된 코드가 포함되어 있습니다.
Resource files 애플리케이션의 실행 파일 외부에 있는 데이터 파일입니다. 리소스는 일반적으로 image, icon, sound, nib file, 문자열 파일, 구성 파일(configuration files) 및 데이터 파일로 구성됩니다 . 대부분의 리소스 파일은 특정 언어 또는 지역에 맞게 localizations되거나 모든 localizations에서 공유할 수 있습니다. 번들 디렉토리 구조에서 리소스 파일의 배치는 iOS 또는 Mac 앱을 개발 중인지 여부에 따라 다릅니다.
Other support files Mac 앱은 비공개 프레임워크 , 플러그인, 문서 템플릿 및 애플리케이션에 필수적인 기타 사용자 지정 데이터 리소스와 같은 고급 리소스를 추가로 포함할 수 있습니다. iOS 애플리케이션 번들에 사용자 지정 데이터 리소스를 포함할 수 있지만 사용자 지정 프레임워크 또는 플러그인은 포함할 수 없습니다.

Listing 2-1 Bundle structure of an iOS application - iOS application의 번들 구조(예시)

MyApp.app
   MyApp
   MyAppIcon.png
   MySearchIcon.png
   Info.plist
   Default.png
   MainWindow.nib
   Settings.bundle
   MySettingsIcon.png
   iTunesArtwork
   en.lproj
      MyImage.png
   fr.lproj
      MyImage.png
파일 설명
MyApp (필수) 애플리케이션 코드가 포함된 실행 파일입니다. 이 파일의 이름은 응용 프로그램 이름에서 .app확장자를 뺀 것과 같습니다 .
Application icons( MyAppIcon.png, MySearchIcon.pngMySettingsIcon.png) (권장) 애플리케이션 아이콘은 애플리케이션을 나타내기 위해 특정 시간에 사용됩니다.
Info.plist (필수) 이 파일에는 bundle ID, 버전 번호 및 표시 이름과 같은 애플리케이션에 대한 구성 정보가 포함되어 있습니다.
Launch images(Default.png) - deprecated (필수 / 권장) 애플리케이션의 초기 인터페이스를 특정 방향으로 보여주는 하나 이상의 이미지. 시스템은 애플리케이션이 창과 사용자 인터페이스를 로드할 때까지 제공된 시작 이미지 중 하나를 임시 배경으로 사용합니다. 응용 프로그램에서 시작 이미지를 제공하지 않으면 응용 프로그램이 시작되는 동안 검정색 배경이 표시됩니다.
MainWindow.nib (권장) 응용 프로그램의 기본 nib 파일 에는 응용 프로그램 시작 시 로드할 기본 인터페이스 개체가 포함되어 있습니다. 일반적으로 이 nib 파일에는 응용 프로그램의 기본 창 개체와 응용 프로그램 delegate object 의 인스턴스가 포함되어 있습니다 . 다른 인터페이스 객체는 추가 nib 파일에서 로드되거나 애플리케이션에서 프로그래밍 방식으로 생성됩니다. (메인 nib 파일의 이름은 파일의 NSMainNibFile키에 다른 값을 할당하여 변경할 수 있습니다 Info.plist
Settings.bundle Settings bundle은 설정 애플리케이션에 추가하려는 애플리케이션별 기본 설정이 포함된 특별한 유형의 플러그인입니다. 이 번들은 기본 설정을 구성하고 표시하기 위한 속성 목록 및 기타 리소스 파일을 포함합니다.
Custom resource files 현지화되지 않은 리소스는 최상위 디렉토리에 배치되고 현지화된 리소스는 애플리케이션 번들의 언어별 하위 디렉토리에 배치됩니다. 리소스는 nib 파일, 이미지, 사운드 파일, 구성 파일, 문자열 파일 및 애플리케이션에 필요한 기타 사용자 지정 데이터 파일로 구성됩니다.

https://medium.com/banksalad/user-defaults-for-testing-ios-application-a492c52cd87f

https://developer.apple.com/documentation/foundation/bundle

https://woongsios.tistory.com/92

https://nshipster.co.kr/bundles-and-packages/

https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW13

https://fernando.kr/ios/2020-07-29-ios-setting-bundle/

https://stackoverflow.com/questions/64309509/uiimagenamed-works-but-bundle-main-urlforresource-withextension-doesnt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment