728x90
Bundle
- Bundle은 disk에 저장된 번들 디렉토리에 있는 리소스와 코드의 표현이다.
- 즉, 실행 가능한 코드와 코드가 사용하는 리소스들을 포함하고 있는 디렉토리.
- info.plist, Assets, string 파일 등
- framework Bundle은 dynamic library에서 사용하는 코드와 리소스를 포함한다.
- 모든 앱 Bundle은 앱에 대한 정보가 담긴 info.plist파일을 가진다.
- Bundle object를 사용하면 bundle의 구조를 몰라도 bundle에 있는 리소스들에 접근할 수 있다.
- 일부 자주 사용되는 리소스들은 bundle없이 저장되거나 오픈할 수 있다.
- UIImage나 NSImage의 경우 init(named:)메서드로 image를 asset 카탈로그에 저장하고 로드할 수 있다.
- 비슷하게, string 리소스의 경우에도 NSLocalizedString으로 개별 string들을 .strings 파일을 통째로 불러오지 않고도 로드할 수 있다.
Bundle을 찾고 열기
- 리소스를 불러오기 전에, 먼저 어느 bundle에서 이걸 포함하고 있는지 명확히 해야한다.
- Bundle클래스는 여러 개의 constructor들을 가지고 있지만, 그 중에서 가장 많이 쓰이는 것은 'main'이다.
- main bundle은 현재 실행 중인 코드가 포함된 bundle디렉토리를 표현한다.
- 그렇기에, main번들 객체는 앱에 저장된 리소스들에 접근할 수 있게 해준다.
- 만약 플러그인, 프레임워크, 혹은 다른 번들화된 컨텐츠들과 상호작용하려면, 특정 bundle 객체를 생성할 수 있는 메서드를 사용해야한다.
- 만약 어떤 프레임워크에 연결하려고 하면, 'init(for:)' 메서드를 이용해서 해당 프레임워크에 정의되어있는 클래스를 기반으로 프레임워크 bundle을 불러올 수 있다.
- 리소스가 불러와지지 않는다면 Build Phases의 Copy Bundle Resources에 해당 리소스가 추가되어있는지 확인해야함
let mainBundle = Bundle.main
let myBundle2 = Bundle(for: SecondViewController.self)
Bundle에서 특정 리소스의 path불러오기
if let path = Bundle.main.path(forResource: "icon", ofType: "png") {
print(path)
}
728x90
'iOS > 설명' 카테고리의 다른 글
[iOS] performBatchUpdates (0) | 2022.04.24 |
---|---|
[iOS] json파일 dictionary로 불러오기 (0) | 2022.04.22 |
[iOS] 앱 terminate되게 하는 법 (0) | 2022.04.22 |
[iOS] 레이아웃 update cycle (0) | 2022.04.18 |
[iOS] autoresizingMask (0) | 2022.04.16 |
댓글