본문 바로가기
공부/[iOS&Swift]

[iOS] Xcode - Info.plist에 대하여

by 인생은아름다워 2022. 2. 10.

Info.plist란 Information Property List의 약자이다. 공부를 시작하기 전에 정보, 속성을 가지고 있는 어떤 리스트 정도로 예상해 봤다.

→ 공식문서를 읽어보니 정확한 Info.plist의 내용은 다음과 같았다.

iOS와 macOC는 더 나은 User experience를 위해서 앱이나 번들 안의 특별한 메타데이터에 의존한다고 한다. 이 메타데이터들은 user에게 직접 보여주기도 하고, system에서 app launching을 위해 사용하기도 한다. App이나 bundle이 이 메타데이터들을 시스템에게 제공하기 위해서 어떤 특정한 파일을 사용하는데, 이 파일이 Information Property List, 줄여서 Info.plist인 것이다!

사용 예시 : 번들(앱)이 어떤 아이콘을 가질지, 어떤 문서를 지원할지 등등

이번 글에서는 간단하게 Info.plist에 대해 알아보고 그 Key들에 대해 알아본다.

✏️ Information Property List(Info.plist)

Property list란 시스템이 런타임에 엑세스할 수 있는 임의의 데이터를 구조화하는 방법이다. Info.plist도 번들에 대한 구성 데이터를 포함하는 property list의 일종이다. Xcode에서는 일반적으로 프로젝트 생성 시 초기 key - value 쌍을 통해 적절한 기본값들로 Info.plist를 지정해주며, 원한다면 프로젝트에 맞게 key - value 쌍을 수정하거나 추가할 수 있다.

Info.plist는 UTF-8로 인코딩 되며, XML파일로 나타난다. 원한다면 직접 수정할 수 있지만, 굳이 그럴 필요 없이 Xcode상에서 원하는 설정 값들을 골라주는 방식으로 사용하면 될 것 같다.

Info.plist의 Key들은 몇 가지 유형(?)으로 나눠져 있으며, 그 유형들은 다음과 같다.

  • Core Foundation Keys
  • iOS Keys
  • App Extension Keys
  • 그 외(macOS, watchOS등은 이 포스팅에서 제외)

✏️ Core Foundation Keys

번들의 기본 뼈대(infrastructure)를 제공하는 Core Foundation 프레임워크와 관련된 key들이다. 이 프레임워크에서 인식하는 많은 키가 번들을 정의하는 데 기본이 되며 번들의 내용을 결정하는데 중요한 역할을 한다.

아래의 표에서 iOS에 해당하는 Core Foundation key들을 살펴본다.

Localized resources can be mixed 프레임워크에서 localized된 리소스를 검색하기 위해 Foundation tool에서 사용
Localization native development region (Recommended) 언어 ID로 번들의 기본 언어 및 지역
Bundle display name (Required, Localizable) 번들의 사용자가 볼 수 있는 이름. Siri에서 사용하고 iOS의 홈 화면에 표시
Document types 번들에서 지원하는 문서 유형을 설명하는 Dictionary 배열
Executable file (Recommended) 번들의 실행파일 이름
Icon files 번들 아이콘 이미지 파일의 이름을 지정하기 위한 최상위 키
Bundle identifier (Recommended) 번들의 앱 유형을 지정하는 식별자 문자열
InfoDictionary version (Recommended) Info.plist 형식에 대한 버전 정보
Localizations 자체 localized된 리소스를 처리하는 앱에 대한 localize 정보를 포함
Bundle name (Recommended, Localizable) 16자 미만의 번들 이름(앱 이름)
Bundle OS Type code 번들 유형을 식별하는 4자리 코드
Bundle version string, short (Localizable) 번들의 릴리즈 버전 번호 문자열
Accessibility bundle name 앱의 음성 이름
URL types 번들에서 지원하는 URL체계를 설명하는 Dictionary 배열
Bundle version (Recommended) 번들에 대한 빌드 버전 번호 문자열

✏️ iOS Keys

iOS 프레임워크는 iOS 애플리케이션을 만드는데 필요한 인프라를 제공한다. 위에서 본 Core foundation framework는 번들을 위한 기초 인프라였다면, iOS framework는 iOS 애플리케이션을 위한 infrastructure라고 생각하면 될 것 같다.

다음과 같은 Info.plist의 Key들을 이용하여 애플리케이션의 실행 시점의 모습과 실행 중의 동작을 설정할 수 있다.

Fonts provided by application 앱의 Font 리스트를 지정
Application does not run in background 앱이 백그라운드에서 실행되는 대신 종료될지의 여부를 결정
Required background modes 앱이 백그라운드에서 계속해서 실행될지를 결정
Targeted device family 앱의 대상 device를 정의하기 위해 Xcode에 의해 자동으로 설정
Initial interface orientation 앱의 인터페이스 초기 방향을 지정
Launch image 앱의 시작 이미지 이름을 지정
Icon already includes gloss effects 앱 아이콘에 gloss(광택)효과가 포함되어있는지 여부 결정
Required device capabilities 앱을 실행하는 데 필요한 기기 관련 기능을 지정
Application uses Wi-Fi Wi-Fi 연결이 필요한지를 결정
Status bar is initially hidden 앱이 시작됐을 때 status bar를 숨길지 여부 결정
Status bar style 앱이 실행될 때 status bar의 스타일을 지정
Supported external accessory protocols 연결된 하드웨어 액세서리와의 통신에 지원되는 통신 프로토콜을 지정
Supported interface orientations 앱이 지원하는 인터페이스 방향을 지정
Supports Document Browser 앱이 문서 기반 앱임을 지정
Renders with edge antialiasing Drawing에서 픽셀 경계에 맞춰지지 않을 때 core animation 레이어가 안티 앨리어싱을 사용할지 여부를 지정
Renders with group opacity Core animation 레이어가 상위 레이어의 불투명도를 상속할지 여부 지정

✏️ Privacy 관련 Keys

개인 정보와 관련된 Key들이 많이 있는데, 아마도 이러한 사항들이 엄격하게 지켜져야 하기 때문에 많은 항목들이 있는 것이 아닌가 생각된다. 가만히 이름들을 보면 평소 애플리케이션을 사용할 때 나왔던 pop up alert들과 연관 있는 것 같기도 하고...

Access to a File Provide Domain Usage Description 앱이 파일 공급자가 관리하는 파일에 엑세스해야 하는 이유를 사용자에게 알려주는 메세지
AppleEvents Sending Usage Description 앱이 Apple 이벤트를 보낼 수 있는 기능을 요청하는 이유를 사용자에게 알려주는 메시지
Bluetooth Always Usage Description 앱이 Bluetooth에 엑세스해야 하는 이유를 사용자에게 알려주는 메시지
Bluetooth Peripheral Usage Description 앱이 Bluetooth 주변장치에 연결하는 기능을 요청하는 이유를 사용자에게 알려주는 메시지
Calendars Usage Description 앱이 사용자의 캘린더 데이터에 대한 엑세스를 요청하는 이유를 사용자에게 알려주는 메시지
Camera Usage Description 앱이 카메라에 대한 엑세스를 요청하는 이유를 사용자에게 알려주는 메시지
Contacts Usage Description 앱이 사용자의 연락처에 대한 엑세스를 요청하는 이유를 사용자에게 알려주는 메시지
Desktop Folder Usage Description 앱이 사용자의 폴더에 엑세스해야하는 이유를 사용자에게 알려주는 메시지
Documents Folder Usage Description 앱이 사용자의 문서 폴더에 엑세스해야하는 이유를 사용자에게 알려주는 메시지
Downloads Folder Usage Description 앱이 다운로드폴더에 엑세스해야하는 이유를 사용자에게 알려주는 메시지
Driver Extension Usage Description 앱이 시스템 확장 번들을 설치하려고 하는 이유를 사용자에게 알려주는 메시지
... ...

🗒️ 결론

Info.plist는 번들(또는 애플리케이션)의 설정들을 key - value쌍으로 시스템에게 제공하는 것을 도와주는 파일이다! 엄청나게 많은 설정들이 있기 때문에, 이런 것들이 있다고 알아두고 필요할 때 찾아서 사용하면 될 것이며 처음보는 표현이 나오더라도 당황하지 말고 검색하자~!

🍎 참고 문서

애플 공식문서 - About Info.plist

iOSoo님의 개발 블로그 - Info.plist - Privacy

댓글