Info.plist = Information Property List
애플리케이션, 프레임워크, 플러그인과 같은 번들 실행파일에 필수적인 구성요소에 관한 정보를 저장하는 파일이다.
XCode project를 만들 때 Info.plist 파일이 자동으로 만들어진다.
파일은 Unicode UTF-8으로 인코딩되며, 내용은 XML으로 구성되며 root XML node는 key-value pair 형식의 딕셔너리이다.
key : property name
value : configuration
프로젝트에 생성된 Info.plist에서도 수정할 수 있고,
xcodeproj - project editor - Info 에서도 수정 가능함
1. Core Foundation Keys
Core Foundation 프레임워크는 런타임동안 번들을 위한 기본 인프라를 제공한다.
결과적으로, 이 프레임워크에서 인식되는 많은 키는 번들 자체의 정의에 필수적이며 번들의 내용을 결정하는 데 중요한 역할을 한다.
접두사 CF를 사용함
Key | Xcode name | Platform / Description |
CFAppleHelpAnchor | “Help file” | macOS 번들의 초기 HTML 도움말 파일 |
CFBundleAllowMixedLocalizations | “Localized resources can be mixed” | iOS, macOS 번들이 프레임워크에서 현지화된 문자열 검색을 지원하는지 여부 |
CFBundleDevelopmentRegion | “Localization native development region” | iOS, macOS (Recommended) 번들의 기본 언어와 지역을 언어 ID로 지정 |
CFBundleDisplayName | “Bundle display name” | iOS, macOS (Required, Localizable) 사용자에게 표시되고 Siri가 사용하는 번들의 표시 이름을 지정 |
CFBundleDocumentTypes | “Document types” | iOS, macOS 하나 이상의 document type을 앱과 연결하는 딕셔너리 배열 |
CFBundleExecutable | “Executable file” | iOS, macOS (Recommended) 번들의 메인 실행 파일의 이름 |
CFBundleHelpBookFolder | “Help Book directory name” | macOS 번들의 도움말 파일이 들어있는 폴더 이름 |
CFBundleHelpBookName | “Help Book identifier” | macOS 번들의 Help Viewer가 시작될 때 표시할 도움말 파일의 이름 |
CFBundleIconFile | “Icon file” | iOS, macOS 번들의 아이콘이 포함된 파일 식별 |
CFBundleIconName | “Icon Name” | macOS 10.13 and later (Recommended for iOS 11 and later.) 앱 아이콘을 나타내는 번들의 Asset 카탈로그의 Asset 이름 |
CFBundleIconFiles | “Icon files” | iOS 3.2 and later (Recommended for iOS 10 and earlier.) 배열의 각 문자열에는 아이콘 파일의 이름이 포함되어 있음 |
CFBundleIcons | None | iOS 5.0 and later, tvOS 9 and later 번들의 아이콘 이미지 파일명 |
CFBundleIdentifier | “Bundle identifier” | iOS, macOS (Recommended) 번들의 앱 유형을 지정하는 식별자 문자열. 문자열은 알파벳(A-Z, a-z), 점("."), 하이픈("-")의 로마 알파벳만 사용하는 역방향 DNS 형식이어야 한다. |
CFBundleInfoDictionaryVersion | “InfoDictionary version” | iOS, macOS (Recommended) Info.plist의 버전정보 |
CFBundleLocalizations | “Localizations” | iOS, macOS 앱의 현지화정보를 포함하여 현지화된 리소스를 다루도록 함 |
CFBundleName | “Bundle name” | iOS, macOS (Recommended, Localizable) CFBundleDisplayName의 값이 없는 상황에서 사용자에게 표시될 수 있는 번들의 짧은 이름 |
CFBundlePackageType | “Bundle OS Type code” | iOS, macOS 번들의 타입을 식별하는 코드. 4글자로 이루어짐 |
CFBundleShortVersionString | “Bundle versions string, short” | iOS, macOS (Localizable) 번들의 릴리즈 버전 번호 |
CFBundleSpokenName | "Accessibility bundle name” | iOS, macOS TTS(text-to-speech)에서의 번들 이름 |
CFBundleURLTypes | “URL types” | iOS, macOS 앱에서 지원하는 URL 체계(http, ftp 등)를 설명하는 딕셔너리 배열 |
CFBundleVersion | “Bundle version” | iOS, macOS (Recommended) 번들의 빌드 버전 번호 |
CFPlugInDynamicRegistration | “Plug-in should be registered dynamically” | macOS 호스트가 이 플러그인을 로드하는 방법을 지정. 값이 YES인 경우, 호스트는 dynamic registration function을 사용하여 이 플러그인을 로드하려고 시도함 값이 NO인 경우, 호스트는 CFPlugInFactories에 포함된 static registration information과, CFPlugInTypes 키를 사용함 |
CFPlugInDynamicRegistrationFunction | "Plug-in dynamic registration function name” | macOS 플러그인을 동적으로 등록할 때 사용할 기능을 식별합니다. |
CFPlugInFactories | “Plug-in factory interfaces” | macOS 플러그인을 정적으로 등록할 때 사용함 사전의 각 key는 UUID (universally unique ID)이다. value는 호출할 plug-in factory function의 이름을 가진 문자열이다. |
CFPlugInTypes | “Plug-in types” | macOS 플러그인을 정적으로 등록할 때 사용함 |
CFPlugInUnloadFunction | “Plug-in unload function name” | macOS 메모리에서 플러그인 코드를 언로드할 때 호출할 함수의 이름 |
2. Launch Services Keys
Launch Services는 macOS의 Core Services 프레임워크에 속함
앱을 실행하고 문서 유형을 앱에 매칭하는 것에 대한 지원을 제공함
iOS에서 Launch Services는 비공개 API이지만 iOS 앱의 실행 환경을 조정하는 데 내부적으로 사용됨사용함
접두사 LS를 사용함
Key | Xcode name | Platform / Description |
LSApplicationCategoryType | “Application Category” | macOS 앱의 타입에 해당하는 UTI 앱스토어에서 이를 사용하여 앱의 카테고리를 결정함 |
LSApplicationQueriesSchemes | None | iOS 9.0 and later 앱이 UIApplication 클래스의 canOpenURL: 메서드와 함께 사용할 수 있는 URL scheme을 지정 |
LSArchitecturePriority | “Architecture priority” | macOS 앱이 지원하는 아키텍처를 식별하는 문자열 배열, 이 배열의 문자열 순서는 아키텍처에 대해 실행 우선 순위를 지시함 |
LSBackgroundOnly | “Application is background only” | macOS 앱이 백그라운드에서만 실행될지 지정 |
LSEnvironment | “Environment variables” | macOS 앱을 실행하기 전에 설정할 환경 변수를 정의 (key/value pair) |
LSFileQuarantineEnabled | “File quarantine enabled” | macOS 앱이 만든 파일이 기본적으로 격리되는지 여부를 지정 |
LSFileQuarantineExcludedPathPatterns | None | macOS 파일을 자동으로 격리해서는 안 되는 디렉토리를 지정 |
LSGetAppDiedEvents | “Application should get App Died events” | macOS 자식 프로세스 중 하나가 종료될 때 운영 체제가 이 앱에 알릴지 여부 |
LSMinimumSystemVersion | “Minimum system version” | macOS 앱을 실행하는 데 필요한 최소 버전의 macOS |
LSMinimumSystemVersionByArchitecture | “Minimum system versions, per-architecture” | macOS 주어진 플랫폼 아키텍처를 실행하는 데 필요한 최소 버전의 macOS |
LSMultipleInstancesProhibited | “Application prohibits multiple instances” | macOS 한 명의 사용자 또는 여러 사용자가 동시에 앱을 실행할 수 있는지 여부 |
LSRequiresIPhoneOS | “Application requires iPhone environment” | iOS 앱이 iOS 앱인지 여부 |
LSRequiresNativeExecution | “Application requires native environment” | macOS 앱이 Rosetta emulation과 달리 인텔 기반 Mac에서 기본적으로 실행되어야 하는지 여부 |
LSSupportsOpeningDocumentsInPlace | None | iOS 앱이 다른 앱에서 복사본이 아닌 원본 문서를 직접 열 수 있도록 함 |
LSUIElement | “Application is agent (UIElement)” | macOS 앱이 에이전트 앱인지 여부 즉 Dock 또는 Force Quit 창에 나타나지 않아야 하는 앱인지 지정 |
LSUIPresentationMode | “Application UI Presentation Mode” | macOS 앱이 실행될 때 시스템 UI element들을 보이게 함 |
LSVisibleInClassic | “Application is visible in Classic” | macOS 에이전트 앱 또는 백그라운드 전용 앱이 클래식 환경의 다른 앱에 표시되는지 여부 |
MinimumOSVersion | “Minimum system version” | iOS 이거 쓰지말고 LSMinimumSystemVersion 쓸 것 |
3. Cocoa Keys
Cocoa 및 Cocoa Touch는 macOS, iOS, tvOS 및 watchOS에서 실행되는 앱을 정의하는 데 사용되는 환경을 말한다.
코코아 환경과 관련된 키는 Interface Builder nib 파일을 지원, 번들이 판매하는 다른 사용자와 대면하는 기능을 지원
접두사 NS를 사용함
Key | Xcode name | Platform / Description |
GCSupportedGameControllers | (none) | tvOS 9.0 and later, iOS 7.0 and later, macOS 10.9 and later 앱에 필요하거나 허용되는 게임 컨트롤러 유형을 지정 |
GCSupportsMultipleMicroGamepads | (none) | tvOS Apple TV 리모컨과 Apple TV Remote 앱이 게임 컨트롤러로 작동하도록 함 |
GKGameCenterBadgingDisabled | (none) | iOS 7.0 and later 앱이 배지되었는지 여부 |
GKShowChallengeBanners | (none) | iOS 7.0 and later 앱 내에 배너의 표시 여부 |
NETestAppMapping | (none) | iOS 9.0 and later, macOS 10.11 and later MDM 서버를 사용하지 않고 앱별 VPN 앱 확장 프로그램을 테스트할 수 있도록 함 |
NFCReaderUsageDescription | "Privacy - NFC Reader Usage Description” | iOS 11 and later Privacy 정책 - 앱이 장치의 NFC reader를 사용해야 하는 이유 |
NSAppleMusicUsageDescription | “Privacy - Media Library Usage Description” | iOS Privacy 정책 - 앱이 media library를 사용해야 하는 이유 |
NSAppleScriptEnabled | “Scriptable” | macOS AppleScript가 활성화되어 있는지 여부 |
NSAppTransportSecurity | (none) | iOS 9.0 and later, macOS 10.11 and later iOS / macOS 앱 및 앱 Extension의 HTTP 연결에 대한 기본 보안에 대한 변경 사항 |
NSBluetoothPeripheralUsageDescription | “Privacy - Bluetooth Peripheral Usage Description” | iOS 6.0 and later Privacy 정책 - 앱이 블루투스를 사용해야 하는 이유 |
NSCalendarsUsageDescription | “Privacy - Calendars Usage Description” | iOS 6.0 and later Privacy 정책 - 앱이 사용자의 캘린더에 액세스하는 이유 |
NSCameraUsageDescription | “Privacy - Camera Usage Description” | iOS 7.0 and later Privacy 정책 - 앱이 카메라에 액세스하는 이유 |
NSContactsUsageDescription | “Privacy - Contacts Usage Description” | iOS 6.0 and later, OS X v10.8 and later Privacy 정책 - 앱이 사용자의 연락처에 액세스하는 이유 |
NSDockTilePlugIn | ”Dock Tile Plugin path” | macOS 앱의 Dock 타일 플러그인의 이름 |
NSFaceIDUsageDescription | "Privacy - Face ID Usage Description” | iOS 11 and later Privacy 정책 - 앱이 Facd ID를 사용하는 이유 |
NSHealthClinicalHealthRecordsShareUsageDescription | (none) | iOS 12.0 and later 유저의 의료기록에 접근하는 것에 대한 설명 |
NSHealthRequiredReadAuthorizationTypeIdentifier | (none) | iOS 12.0 and later 이 키에는 3개 이상의 HealthKit 유형 식별자가 포함되어야 하며, 사용자가 필요한 모든 유형에 대한 권한을 승인하지 않으면 HKErrorRequiredAuthorizationDenied 오류와 함께 인증이 실패함 - for read |
NSHealthRequiredWriteAuthorizationTypeIdentifiers | (none) | iOS 12.0 and later 이 키에는 3개 이상의 HealthKit 유형 식별자가 포함되어야 하며, 사용자가 필요한 모든 유형에 대한 권한을 승인하지 않으면 HKErrorRequiredAuthorizationDenied 오류와 함께 인증이 실패함 - for write |
NSHealthShareUsageDescription | "Privacy - Health Share Usage Description” | iOS 8.0 and later Privacy 정책 - 사용자의 건강 데이터를 읽는 이유 |
NSHealthUpdateUsageDescription | "Privacy - Health Update Usage Description” | iOS 8.0 and later Privacy 정책 - 사용자의 건강 데이터를 변경하는 이유 |
NSHomeKitUsageDescription | “Privacy - HomeKit Usage Description” | iOS, watchOS Privacy 정책 - 사용자의 HomeKit 설정에 액세스하는 이유 |
NSHumanReadableCopyright | “Copyright (human-readable)” | macOS (Localizable) 번들에 대한 저작권 고지 |
NSJavaNeeded | “Cocoa Java application” | macOS 프로그램에 실행 중인 Java VM이 필요한지 여부 |
NSJavaPath | “Java classpaths” | macOS 구성 요소 앞에 NSJavaRoot가 있는 클래스에 대한 경로 배열 |
NSJavaRoot | “Java root directory” | macOS 자바 클래스를 포함하는 root directory. |
NSLocationAlwaysUsageDescription | “Privacy - Location Always Usage Description” | iOS 8.0 and later, macOS 10.10 and later Privacy 정책 - 앱에 사용자의 위치정보가 항상 필요한 이유 |
NSLocationWhenInUseUsageDescription | “Privacy - Location When In Use Usage Description” | iOS 8.0 and later, macOS 10.10 and later Privacy 정책앱을 사용하는 동안 사용자의 위치 정보에 액세스하는 이유 |
NSMainNibFile | “Main nib file base name” | iOS, macOS 앱의 메인 nib 파일의 이름 |
NSMicrophoneUsageDescription | “Privacy - Microphone Usage Description” | iOS 7.0 and later Privacy 정책 - 앱이 장치의 마이크에 액세스하는 이유 |
NSMotionUsageDescription | “Privacy - Motion Usage Description” | iOS 7.0 and later Privacy 정책 - 앱이 장치의 가속도계(accelerometer)에 액세스하는 이유 |
NSPersistentStoreTypeKey | “Core Data persistent store type” | macOS 영구 문서 유형과 관련된 Core Data 영구 저장소 유형. |
NSPhotoLibraryAddUsageDescription | "Privacy - Photo Library Additions Usage Description” | iOS 11 and later Privacy 정책 - 앱이 사용자의 사진첩에 write-only 액세스를 얻는 이유 |
NSPhotoLibraryUsageDescription | “Privacy - Photo Library Usage Description” | iOS 6.0 and later Privacy 정책 - 앱이 사용자의 사진첩에 액세스하는 이유 |
NSPrefPaneIconFile | “Preference Pane icon file” | macOS 시스템 환경설정 앱의 환경설정 패널을 나타내는 데 사용되는 이미지 파일 리소스의 이름 |
NSPrefPaneIconLabel | “Preference Pane icon label” | macOS 시스템 환경설정 앱의 환경설정 패널 아이콘 아래에 표시되는 환경설정 패널의 이름 |
NSPrincipalClass | “Principal class” | macOS 번들의 메인 class의 이름 |
NSRemindersUsageDescription | “Privacy - Reminders Usage Description” | iOS 6.0 and later Privacy 정책 - 앱이 사용자의 미리알림(reminder)에 액세스하는 이유 |
NSServices | “Services” | macOS 앱에서 제공하는 서비스를 지정하는 딕셔너리 배열 |
NSSiriUsageDescription | (none) | iOS 10 and later 앱이 시리에게 사용자 데이터를 전달하는 이유 |
NSSpeechRecognitionUsageDescription | (none) | iOS 앱이 애플의 음석인식 서버에 사용자데이터를 전달하는 이유 |
NSSupportsAutomaticTermination | (none) | OS X v10.7 and later 메모리를 되찾기 위해 앱을 죽일 수 있는지 여부 |
NSSupportsPurgeableLocalStorage | (none) | iOS 9.3 and later 앱이 사용자 데이터의 비로컬 저장소에 의존할 수 있다고 선언 |
NSSupportsSuddenTermination | (none) | macOS 더 빠른 종료 / 로그아웃 작업을 허용하기 위해 앱을 죽일 수 있는지 여부 |
NSUbiquitousContainer | (none) | iOS, macOS 각 컨테이너에 대한 iCloud Drive 설정을 지정 |
NSUbiquitousContainerIsDocumentScopePublic | (none) | iOS, macOS iCloud Drive에서 이 컨테이너의 콘텐츠 공유 여부 |
NSUbiquitousContainerName | (none) | iOS, macOS iCloud Drive에서 이 컨테이너의 이름 |
NSUbiquitousContainerSupportedFolderLevels | (none) | iOS, macOS 컨테이너의 문서 디렉토리 내의 최대 폴더 레벨 수 |
NSUbiquitousDisplaySet | (none) | iOS, macOS 앱이 볼 수 있는 모바일 문서 데이터 |
NSUserActivityTypes | (none) | iOS, macOS 앱이 지원하는 사용자 활동 유형 |
NSUserNotificationAlertStyle | (none) | macOS 알림 스타일이 배너, 경고 또는 없음이어야 하는지 지정합니다. 기본값은 배너 |
NSVideoSubscriberAccountUsageDescription | “Privacy - TV Provider Usage Description” | tvOS Privacy 정책 - 앱이 사용자의 TV 공급자 계정에 액세스하는 이유 |
UTExportedTypeDeclarations | “Exported Type UTIs” | iOS 5.0 and later, OS X v10.7 and later 앱이 소유하고 지원하는 UTI 기반 유형을 지정하는 딕셔너리 배열 |
UTImportedTypeDeclarations | “Imported Type UTIs” | iOS, macOS 앱이 지원하지만 소유하지는 않는 UTI 기반 유형을 지정하는 딕셔너리 배열 |
4. macOS Keys
Key | Xcode name | Description |
APInstallerURL | “Installation directory base file URL” | 설치하려는 파일의 URL 기반 경로 |
APFiles | “Installation files” | 설치할 수 있는 파일이나 디렉토리를 설명하는 딕셔너리 배열 |
ATSApplicationFontsPath | “Application fonts resource path” | 단일 폰트파일 경로 또는 번들의 리소스에 있는 폰트 파일의 디렉토리 경로 |
CSResourcesFileMapped | “Resources should be file-mapped” | True - Core Services 루틴은 번들의 리소스 파일을 읽는 대신 메모리에 매핑 |
NSMainStoryboardFile | “Main storyboard file base name” | 앱의 스토리보드 리소스 파일의 이름 |
QLSandboxUnsupported | None | Quick Look 플러그인이 샌드박싱을 지원하지 않는다고 지정 |
QuartzGLEnable | None | 앱이 Quartz GL을 사용하는지 여부 |
5. iOS Keys
iOS 프레임워크는 iOS 앱을 만드는 데 필요한 인프라를 제공
접두사 UI를 사용함
Key | Xcodename | Platform / Description |
CoreSpotlightContinuation | (none) | iOS 10.0 and later 앱의 Spotlight query continuation 지원 여부 |
INAlternativeAppNames | (none) | iOS 11.0 and later 사용자가 Siri에서 앱을 참조할 수 있는 대체 이름 |
MKDirectionsApplicationSupportedModes | (none) | iOS 6.0 and later 앱이 제공할 수 있는 방향 유형 |
UIAppFonts | “Fonts provided by application” | iOS 3.2 and later 앱에서 사용하는 특유의 폰트 리스트 |
UIApplicationExitsOnSuspend | “Application does not run in background” | iOS 4.0 and later 앱이 백그라운드에서 실행되는 것이 아니라 종료되는지 여부 |
UIApplicationShortcutItems | (none) | iOS 9.0 and later static Home screen quick actions for the app 홈 화면 빠른 작업 |
UIApplicationShortcutWidget | (none) | iOS 10.0 and later 둘 이상의 위젯이 있는 앱의 홈 화면 빠른 작업으로 사용할 위젯의 번들 ID |
UIAppSupportsHDR | "Supports HDR color mode” | tvOS 11.2 and later 앱이 Apple TV 4K에서 HDR 모드를 지원하는지 여부 |
UIBackgroundModes | “Required background modes” | iOS 4.0 and later, watchOS 4.0 and later 앱이 백그라운드에서 계속 실행되어야 한다고 지정 |
UIDeviceFamily | “Targeted device family” | iOS 3.2 and later Xcode에 의해 자동으로 삽입되어 앱의 대상 장치를 정의 |
UIFileSharingEnabled | “Application supports iTunes file sharing” | iOS 3.2 and later 앱이 iTunes를 통해 사용자의 컴퓨터와 파일을 공유할지 여부 |
UIInterfaceOrientation | “Initial interface orientation” | iOS 앱 UI의 초기 방향(orientation) |
UILaunchImageFile | “Launch image” | iOS 3.2 and later 앱의 실행 이미지의 이름 |
UILaunchImages | (none) | iOS 7 and later 앱의 실행 이미지 |
UILaunchStoryboardName | (none) | iOS 9 and later 앱에 사용할 실행 이미지를 생성할 스토리보드를 지정 |
UILaunchStoryboards | (none) | iOS 9 and later 앱의 실행 이미지를 생성할 여러 스토리보드에 대한 정보를 지정 |
UINewsstandApp | (none) | iOS 5 and later 앱이 Newsstand에서 콘텐츠를 제공하는지 여부 |
UIPrerenderedIcon | “Icon already includes gloss effects” | iOS 앱의 아이콘에 이미 광택 효과(shine effect)가 포함되어 있는지 여부 |
UIRequiredDeviceCapabilities | “Required device capabilities” | iOS 3 and later 앱을 실행하는 데 필요한 장치 관련 기능 |
UIRequiresPersistentWiFi | “Application uses Wi-Fi” | iOS 앱에 와이파이 연결이 필요한지 여부 |
UIStatusBarHidden | “Status bar is initially hidden” | iOS 앱이 실행될 때 상태 표시줄이 처음에 숨겨지는지 여부 |
UIStatusBarStyle | “Status bar style” | iOS 앱이 실행될 때 상태 표시줄의 스타일 |
UISupportedExternalAccessoryProtocols | “Supported external accessory protocols” | iOS 3 and later 연결된 하드웨어 액세서리와의 통신에 지원되는 통신 프로토콜을 지정 |
UISupportedInterfaceOrientations | “Supported interface orientations” | iOS 3.2 and later 앱이 지원하는 인터페이스 방향(orientation)을 지정 |
UISupportsDocumentBrowser | “Supports Document Browser” | iOS 11 and later 앱이 문서 기반 앱이라고 지정 |
UIUserInterfaceStyle | “User Interface Style” | tvOS 10.0 and later tvOS 앱에서 선호하는 사용자 인터페이스 모양을 밝거나 어둡게 지정 |
UIViewControllerBasedStatusBarAppearance | (none) | iOS 7.0 and later 뷰 컨트롤러가 상태 표시줄 스타일을 결정하는지 여부 |
UIViewEdgeAntialiasing | “Renders with edge antialiasing” | iOS 3.0 and later 그림이 픽셀 경계에 정렬되지 않을 때 코어 애니메이션 레이어가 안티앨리어싱을 사용하는지 여부 |
UIViewGroupOpacity | “Renders with group opacity” | iOS 3.0 and later 코어 애니메이션 레이어가 슈퍼레이어의 불투명도를 상속(inherit)하는지 여부 |
UIWhitePointAdaptivityStyle | (none) | iOS 9.3 and later True Tone 디스플레이가 있는 장치에서 사용할 앱의 화이트 포인트 적응 스타일을 지정 |
키 값들에 대한 자세한 정보는 아래에서 확인 가능
About Info.plist Keys and Values
About Info.plist Keys and Values To provide a better experience for users, iOS and macOS rely on the presence of special metadata in each app or bundle. This metadata is used in many different ways. Some of it is displayed to the user, some of it is used i
developer.apple.com
https://developer.apple.com/documentation/bundleresources/information_property_list
'iOS' 카테고리의 다른 글
스토리보드에서 뷰의 가장자리를 둥글게 만들기 (0) | 2022.06.01 |
---|---|
xcode ) Project editor 둘러보기 (0) | 2022.05.31 |
Xcode ) Storyboard - Object Library (0) | 2022.05.29 |
swift - 사용자의 위치정보 얻기 (0) | 2022.05.26 |
swift - Extension (0) | 2022.05.13 |