App Bundle
iOS앱은 코드, 이미지, 사운드와 같이 앱이 작동하는데 필요한 많은 파일로 구성된다. 이러한 모든 파일은 App Bundle이라는 단일 패키지로 결합된다.
App Bundle을 여행에 필요한 모든 것이 들어있는 여행 가방이라고 생각하면 된다. 옷, 신발, 세면도구를 여행가방에 담는 것처럼 개발자는 앱에 필요한 모든 파일을 App Bundle에 담는다. App Bundle에는 각 파일 유형에 대한 특정 구조와 위치가 있으므로 운영체제가 앱을 실행하는데 필요한 항목을 쉽게 찾을 수 있다.
App Bundle은 앱을 실행하는 코드가 포함되어있다. 이 코드는 컴파일되어 사용자 입력 처리와, 화면 정보 표시에 이르기까지 앱의 모든 기능을 처리한다. 코드 이외에도 이미지, 사운드, 비디오 같이 앱이 제대로 작동하는데 필요한 모든 리소스가 포함되어있고, 이러한 리소스는 App Bundle 내의 특정 디렉토리에 저장되므로 쉽게 찾을 수 있다.
App Bundle의 주요 장점 중 하나는 독립형 패키지라는 것이다. 즉, 앱을 실행하는데 필요한 모든 것이 번들에 포함되어 있으므로 종속성을 관리하거나 라이브러리를 별도로 설치하는 것에 대해 걱정할 필요가 없다. 이를 통해 개발자는 앱을 쉽게 배포하고 사용자는 기기에 앱을 설치하고 이용할 수 있다.
App Store에서 앱을 다운로드 하면 실제로 App Bundle을 다운로드 하는 것이다.
높은 수준에서 App Bundle은 특별한 유형의 폴더일 뿐이다. 확장자 ".app"로 끝나는 이름이 있으며 앱을 실행하는데 필요한 모든 파일이 포함되어 있다.
Xcode에서 앱을 빌드하면 빌드 프로세스에서 App Bundle을 생성한다.
App Bundle의 구조
- Excudable file:
- 앱을 실제로 실행하는 파일이다. ".app" 확장자가 없는 앱과 이름이 동일하다. 예를 들어 앱 이름이 "MyCoolApp"인 경우 실행 파일 이름은 "MyCoolApp"이다.
- Info.plist:
- 앱에 대한 메타데이터가 포함된 속성 목록 파일이다. 여기에는 앱 이름, 버전 번호, 번들 식별자 등이 포함된다. 앱이 화면에 표시되는 방식과, 앱 아이콘, 필수 기기 기능(앱이 제대로 작동하는데 필요한 카메라 또는 가속도계), 앱 아이콘, 접근 권한을 포함한다.
- Frameworks:
- 앱에서 타사 프레임워크를 사용하는 경우 App Bundle에 포함된다. "Frameworks"폴더에서 찾을 수 있다.
- Resources:
- 앱의 모든 비 코드 파일이 저장되는 곳이다. 여기에는 이미지, 사운드, 지역화된 문자열 등이 포함된다. "Resource"폴더에서 찾을 수 있다.
- Storyboards & XIBs:
- 앱에서 스토리보드 또는 XIB를 사용하여 사용자 인터페이스를 정의하는 경우 App Bundle에 포함된다.
- Launch Screen:
- 앱이 실행될 때 표시되는 화면이다. "LaunchScreen.storyboard"또는 "LaunchScreen.xib"라는 파일에 정의되어 있으며 App Bundle에 포함되어있다.
- Plug-ins:
- 앱에서 플러그인을 사용하는 경우 App Bundle에 포함된다. "Plug-ins"폴더에서 찾을 수 있다.
- Excutable dependencies(실행 가능한 종속성):
- 앱이 외부라이브러리 또는 프레임워크에 연결되면 App Bundle에 포함된다.
- Data Files:
- 앱이 런타임에 생성된 데이터 파일을 사용하는 경우 "Documents"폴더에 저장된다.
- 이 폴더는 앱이 설치될 때 생성되며 앱의 *샌드박스에 있다
이러한 모든 파일과 폴더는 App Bundle 내에 특정 방식으로 구성된다. 실행 파일은 info.plist파일과 함께 최상위 수준에 있다.
요약하자면 App Bundle은 iOS 앱을 실행하는데 필요한 모든 파일과 리소스가 포함된 특별한 유형의 폴더이다.
운영체제에서 앱을 로드하고 실행하는데 사용하는 특정 구조가 있다. App Bundle의 구조를 이해하는것은 iOS개발의 중요한 부분이며 고품질의 잘 구성된 앱을 구축하는데 필수적이다.
*앱의 샌드박스 구조)
https://clamp-coding.tistory.com/408