본문 바로가기
iOS/설명

[iOS] Bundle

by Sky Titan 2022. 4. 22.
728x90
 

Apple Developer Documentation

 

developer.apple.com

 

 

[iOS - swift] 번들과 패키지(Bundle, package), Framework 개념

Bundle이란 실행 가능한 코드와 그 코드가 사용하는 자원을 포함하고 있는 디렉토리 가지고 있는 내용 - info.plist, assets, string 파일 등 프레임워크 번들은 dynamic library에서 사용하는 코드와 자원을

ios-development.tistory.com

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

댓글