-
728x90
Bundle, 번들.
고유명사가 되어버린 "번들"은 말은 많이 들어봤지만
막상 "그래서 번들이 뭐야?" 라고 물으면 대답하기 쉽지 않았습니다. 그래서 번들이 뭔지 한번 살펴보고자 합니다.
apple document 문서의 bundle 을 참고하여 번역했습니다.
부족한 실력으로 인해 오역이나 의역이 꽤나 많이 있을 수 있습니다. 감안하고 봐주세요 😭
번역이 어색한 단어는 굳이 번역하지 않고 영어 발음을 그대로 사용하였고
영어 표현 그대로가 의미 전달에 좋겠다 싶은 부분은 영어 원문을 그대로 사용했습니다.
번들 (Bundle)
번들은 파일 시스템의 디렉토리로서 실행 코드, 이미지, 소리같은 관련 자원(resource 이하 리소스) 등을 한 공간에 그룹짓습니다.
iOS 그리고 OS X에서 applications, frameworks, plug-ins 그리고 다른 기타 소프트웨어 형식들이 번들로 구성되어 있습니다.
번들은 표준화된 계층 (standardized hierarchical structure)을 갖는 디렉토리로서 실행 파일과 그 코드에 사용되는 리소스를 갖고 있고
번들에서 Foundation과 Core Foundation은 코드와 리소스를 찾고 로드하기 위한 설비를 포함하고 있습니다.Note: 어플리케이션은 third-party 개발자들이 IOS를 만들 수 있도록 해주는 유일한 번들의 유형이다.
번들은 사용자와 개발자에게 몇 가지 이점을 주는데요. 번들은 다른 위치로 옮기기만 하면 어플리케이션이나 다른 소프트웨어 파일들을 쉽게 설치, 재배치할 수 있게 도와줍니다. 번들은 internationalization에 있어 중요한 요소입니다. 로컬 리소스를 특별히 이름 지어진 번들의 하위 디렉토리(specially named subdirectories of a bundle)에 저장합니다. 프로그램적 설비들(programmatic facilities)은 유저의 언어 선호도(a user’s language preferences)와 관련된 위치에서 로컬 리소스를 찾습니다.
Xcode 프로젝트들은 대부분 빌드할 때 하나의 번들을 만듭니다. 그렇기 때문에 직접 번들을 구성할 필요가 거의 없죠. 그렇더라도 그 구조를 이해하고 어떻게 그 안에 있는 코드와 리소스에 접근 하는지는 이해하는 건 중요합니다.
번들의 구조와 구성 (Structure and Content of Bundles)
하나의 번들은 실행 코드, 이미지, 사운드, nib 파일, private 프레임워크와 라이브러리, 플러그인, loadable bundles, 기타 다른 코드와 리소스들을 포함할 수 있습니다. 또 information property list (Info.plist) 라고 불리는 실행구성 파일(runtime-configuration file) 도 포함합니다. 이들 각각은 bundle에서 구조적으로 적절한 위치를 갖고 있습니다. 이미지, 사운드, nib 파일과 같은 자원은 Resources 의 하위 항목에 위치하며 로컬화 되거나 비로컬화 될 수도 있습니다. 로컬화된 파일(localized strings의 집합인 strings files 포함) 들은 Resources의 하위에서 lproj 확장자를 갖고 언어나 locale 에 해당하는 이름을 갖습니다.
번들 리소스에 접근하기 (Accessing Bundle Resources)
각각의 어플리케이션은 메인 번들을 갖고있는데, 메인 번들이란 어플리케이션 코드가 들어있는 번들입니다. 유저가 어플리케이션을 실행하면 즉시 필요한 코드와 리소스를 메인 번들 안에서 찾아 메모리에 로드하죠. 그 이후에 필요에따라 동적으로(and lazily) 메인 번들이나 하위 번들에서 필요한 코드나 리소스를 로드할 수 있습니다.
NSBundle 클래스와 절차상의 코드를 위한(for procedural code) Core Foundation의 CFBundleRef opaque type 은 번들에서 리소스를 찾는 방법을 제공해줍니다. Objective-C 에서는 먼저 physical 번들과 일치하는 NSBundle의 인스턴스를 얻어야 합니다. 어플리케이션의 메인 번들을 가져오기 위해서 mainBundle class method를 호출한다. 파일 이름이나 확장자 (선택적으로) 하위 디렉토리 번들이(a filename, extension, and (optionally) a bundle subdirectory) 주어지면 다른 NSBundle의 메소드들은 bundle의 경로를 제공합니다. 이제 마침내 리소스의 경로를 갖게되고 적절한 클래스를 사용해 메모리에 로드할 수 있습니다.
Loadable Bundles
어플리케이션 번들과 마찬가지로 loadable bundles package 실행 코드와 관련 리소스도 로드 되지만, 런타임시에 이러한 번들들을 명시적으로 로드해야 합니다.
(아 어렵네요.. 원문: As with application bundles, loadable bundles package executable code and related resources, but you explicitly load these bundles at runtime.)
high modular, customizable and extensible한 어플리케이션을 디자인하기 위해 loadable bundles를 사용할 수 있습니다. 모든 loadable bundle은 진입점(entry point)인 principal class 를 갖고 있으며, 번들을 로드할 때 반드시 NSBundle에 principal class를 요청해고 리턴된 Class object를 사용해서 클래스 인스턴스를 생성해야 합니다.
쉽게말해 번들은 파일들의 모음이네요! 묶어서 관리하니까 모듈화 재사용성도 좋고 말이죠.
Implementing an iOS Settings Bundle 을 보다가 여기까지 오게 됐는데요.. 다음은 이와 관련된 내용으로 찾아올 것 같습니다.
감사합니다 :)
참고
'iOS' 카테고리의 다른 글
info.plist 파일 옮기기 (0) 2020.04.04 TextView 라인 수 구하기 (0) 2020.03.16 Protocol에서 Optional 선언 (0) 2020.03.04 포토샵, 일러스트 웹, 앱용 이미지 @2x @3x 변환 (0) 2020.03.03 iOS) simulator에서 API error (0) 2020.03.01