iOS 기본 (swift)
[iOS - swift] 번들과 패키지(Bundle, package), Framework 개념
jake-kim
2021. 2. 12. 19:42
Bundle이란
- 실행 가능한 코드와 그 코드가 사용하는 자원을 포함하고 있는 디렉토리
- 가지고 있는 내용 - info.plist, assets, string 파일 등
- 프레임워크 번들은 dynamic library에서 사용하는 코드와 자원을 포함
- 모든 앱 Bundle은 앱에 대한 정보가 담긴 info.plist파일을 갖음
Package란
- Finder가 사용자에게 단일 파일로 보여주는 디렉토리


- package는 macOS에서 디렉토리를 추상화하는 방법 중 하나
- 가지고 있는 내용 - .app, .playground, .plugin 등
- Bundle Display Name: Bundle은 사용자에게 보여지는 이름과 실제 Bundle이 사용하는 File System의 이름을 따로 관리
- Finder에서 이름을 변경하는 것은 Display Name만 변경하는 것
- 대표적으로 .app이 생략된 Display Name을 사용
NSBundle이란
- Bundle에 포함된 코드와 리소스에 대한 표현
- NSBundle은 ObjectiveC를 통해 만들어진 Foundation Class이며 Bundle 디렉토리 안에 포함된 리소스에 쉽게 접근할 수 있도록 제공되는 객체
Main Bundle이란
- Bundle은 여러가지가 있지만, mainBundle은 앱이 실행되는 코드가 있는 Bundle 디렉토리에 접근할 수 있게 도와주는 bundle

- 접근
print(Bundle.main.bundleURL) // main bundle의 위치
print(Bundle.main.bundleIdentifier)
// Bundle에 있는 이미지에 접근
Bundle.main.url(forResource: "ImageName", withExtension: "jpg")
Copy Bundle Resource
- mainBundle에 들아가 있는 리소스 파일들은 빌드할 때 추가가 됨
- Xcode의 Build Phase에 존재 - "Copy Bundle Resources"
- 해당 항목에서 앱에 추가할 리소스를 결정
- 해당 항목에 없는 리소스는 Project Navigator에 추가되어 있어도 실제로 Bundle에서는 접근할 수 없음

Framewrok
- 공유자원 (dynamic library, nib 파일, 이미지 파일)을 단일 패키지 형태로 담고 있는 디렉토리
- framework는 library와 달리 리소스를 포함할 수 있고 framework을 모듈 배포에 있어서 더 많은 활용이 가능
- framework는 파일 시스템의 Bundle로 패키징되어 Core Foundation Bundle Service를 이용할 수 있음
- NSBundle class로 접근 가능
* 참고
nshipster.co.kr/bundles-and-packages/
hcn1519.github.io/articles/2019-11/framework_basic
hcn1519.github.io/articles/2018-12/bundle