Info.plist: 정의, 필수 키 및 시작 구성

저자: IT Sectr 게시일: 2026-05-31 읽는 시간: 8 분

Info.plist는 iOS 및 macOS 애플리케이션을 위한 XML 구성 파일로, 메타데이터, 권한 및 시설정을 포함합니다. 시스템은 애플리케이션 코드 초기화 전에 이를 처리합니다. Apple Developer, 2025에 따르면, Info.plist가 올바르게 구성되지 않으면 애플리케이션은 App Store 리뷰를 통과할 수 없습니다. Info.plist는 번들 식별자, 빌드 버전, 요청된 권한 및 지원되는 화면 방향을 정의합니다.

주요 포인트

  • Info.plist는 plist 형식의 iOS/macOS 애플리케이션 구성 키를 포함한 XML 딕셔너리입니다
  • Bundle identifier는 서명 및 서비스를 위한 Apple 생태계의 고유한 애플리케이션 식별자입니다
  • 개인정보보호 키(NSCameraUsageDescription)는 카메라, 마이크 및 위치 정보 접근에 필수입니다
  • Custom URL schemes는 딥 링크를 위해 CFBundleURLTypes 키를 통해 구성됩니다
  • UIRequiredDeviceCapabilities는 App Store 설치를 위한 최소 기기 요구사항을 설정합니다

Info.plist란?

Info.plist는 루트 요소가 dict이고 프로퍼티 리스트 형태의 키-값 쌍을 포함한 XML 형식의 파일입니다. 애플리케이션 번듨 안에 위치하며, 코드 실행 전에 각 시작시 시스템이 읽습니다. plist 형식은 문자열, 숫자, 배열, 딕셔너리, 날짜 및 봈리안 값을 지원하여 복잡한 구성을 설명할 수 있습니다.

Apple은 애플리케이션의 정체성, 기능 및 요구사항을 정의하기 위해 Info.plist를 사용합니다. 일부 키를 변경하려면 번들을 재빌드해야 합니다. 빌드를 업로드할 때 App Store이 확인하는 메타데이터에 영향을 미치기 때문입니다. 예를 들어, 출시 후 CFBundleVersion 또는 CFBundleIdentifier를 변경하면 앱 업데이트 과정이 깨질 수 있습니다. App Store Connect가 버전을 식별하는 데 이 값을 사용하기 때문입니다.

Xcode에서 프로젝트를 만들 때 기본 키가 자동으로 생성되지만, 대부분의 설정은 애플리케이션의 기능이 발전함에 따라 수동으로 추가됩니다. Xcode는 표준 키에 대한 드롭다운 목록이 있는 그래픽 Info.plist 편집기를 제공하여 오늘자 위함을 줄입니다. 그러나 Scene Manifest 또는 Background Modes와 같은 복잡한 구성의 경우 원본 XML을 직접 편집할 것을 권장합니다.

필수 Info.plist 키

일부 Info.plist 키는 App Store에 출시하기 위해 필수입니다. 이것들이 없으면 검증 단계에서 빌드가 거부됩니다. Apple은 Xcode Organizer 또는 Transporter를 통해 아카이브를 업로드할 때 이 키를 자동으로 확인합니다. 개발자는 리뷰를 제출하기 전에 모든 필수 필드가 올바르게 작성되었는지 확인해야 합니다.

번들 식별자

CFBundleIdentifier 키는 역위수 도메인 표기법 (com.company.appname)으로 고유한 애플리케이션 식별자를 설정합니다. 코드 서명, Push Notifications, CloudKit, App Groups 및 다른 Apple 서비스에 사용됩니다. 출시 후 식별자를 변경하면 App Store이 이를 새로운 애플리케이션으로 간주하며, 기존 사용자는 업데이트를 받지 못합니다. 따라서 식별자는 애플리케이션 수명 주기 동안 변경되지 않아야 합니다.

xml
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>

애플리케이션 버전

CFBundleShortVersionString (표시 버전) 및 CFBundleVersion (빌드 번호) 키는 App Store Connect와 시스템이 업데이트 관리에 사용합니다. 버전은 major.minor.patch 형식으로 지정됩니다. 빌드 번호는 앱 버전이 변경되지 않더라도 App Store Connect에 업로드되는 각 빌드마다 증가해야 합니다. Apple은 CFBundleVersion을 사용하여 빌드가 새로운 것인지 이미 업로드된 빌드와 중복되는지 판단합니다. 빌드 번호가 이전에 업로드된 빌드와 일치하면 ITMS-90161 오류가 반환됩니다.

xml
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>

지원되는 인터페이스 방향

UISupportedInterfaceOrientations 키는 iPhone에서 지원되는 화면 방향을 정의합니다. iPad의 경우 장치 접미사가 있는 별도의 키 UISupportedInterfaceOrientations~ipad가 사용됩니다. 각 방향은 문자열로 지정됩니다: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. 앱이 세로 방향만 지원하고 iPhone 전용이 아닌 경우, iPad에 세로만 지정되면 App Store이 빌드를 거부합니다.

xml
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
</array>

권한 및 개인정보보호 키

iOS 10부터 Apple은 NS 접두사 (NeXTStep)가 있는 키를 통해 요청된 각 권한에 대한 설명을 요구합니다. 개인 정보 API에 처음 액세스할 때 설명이 시스템 대화상자에 표시됩니다. 권한이 필요한 API를 호출할 때 해당 NS 키가 없으면 애플리케이션이 예외를 발생시키며 즉시 괴생하고, 괴생 로그에만 기록됩니다.

목적
NSCameraUsageDescription사진 및 동영상을 위한 카메라 액세스
NSPhotoLibraryUsageDescription사진 보관함 액세스
NSLocationWhenInUseUsageDescription사용 중 위치 정보
NSMicrophoneUsageDescription음성 녹음을 위한 마이크 액세스
NSContactsUsageDescription기기 연락처 액세스

각 개인정보보호 키에는 요청 이유에 대한 사용자가 이해 가능한 설명이 포함되어야 합니다. “앱 작동을 위해” 또는 “액세스 필요”와 같은 빈 것이나 템플릿 텍스트는 App Store 거부로 이어집니다. 설명은 구체적인 기능을 설명해야 합니다: “QR 코드 스캔 및 프로필 사진 작성을 위해 카메라 액세스가 필요합니다.” 각 지원 언어에 대한 InfoPlist.strings 파일을 통한 설명의 로케일리즐 버전을 사용할 것을 권장합니다.

개인 데이터에 액세스하는 API를 호출할 때 필요한 NS 키가 없으면 애플리케이션이 괴생합니다. 시스템이 예외를 발생시켜 프로세스를 종료하며, Xcode 또는 Firebase Crashlytics의 괴생 보고 로그에서만 확인 가능합니다. 사용자는 아무 설명 없이 갑자기 앱이 닫히는 것으로 만 볹니다. 따라서 카메라, 마이크 또는 위치를 사용하는 새 기능을 추가하기 전에 먼저 Info.plist에 해당 개인정보보호 키를 추가한 다음 API 호출을 구현해야 합니다.

Custom URL Schemes 및 App Links

CFBundleURLTypes 키는 애플리케이션으로의 딥 링크를 위한 커스텀 URL 스키머를 등록합니다. 이를 통해 브라우저, 이메일 또는 다른 애플리케이션에서 myapp://profile/123과 같은 링크를 통해 앱을 열 수 있습니다. 각 스키머는 애플리케이션을 고유하게 식별합니다. 두 앱이 동일한 스키머를 등록하면 시스템은 사용자에게 어느 것을 사용할지 선택하는 대화상자를 표시합니다.

xml
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.itsectr.myapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

Universal Links를 지원하려면 Info.plist가 아닌 Entitlements 파일에 com.apple.developer.associated-domains 키가 필요합니다. Universal Links는 도메인을 애플리케이션과 연결하는 구성된 apple-app-site-association 파일이 서버에 있을 때만 작동합니다. 커스텀 URL 스키머와 달리, Universal Links는 확인 대화상자를 표시하지 않고 다른 애플리케이션과 충돌하지 않습니다. 커스텀 스키머 대신 HTTPS 링크를 사용하기 때문입니다. 그러나 유효한 SSL 인증서가 있는 도메인이 필요합니다.

커스텀 스키머는 iOS 표준 스키머와 충돌할 수 있습니다. 다른 앱과의 충돌을 최소화하려면 최소 4글자 스키머를 사용할 것을 권장합니다. 예를 들어, “fb” 스키머는 너무 짧아 충돌할 수 있습니다. app:// 대신 myapp://같이 역 표기법을 사용하는 것이 좋습니다. 또한 앱이 삭제되었지만 다른 앱이 동일한 스키머를 등록한 경우, 사용자가 링크를 통해 이동할 때 예기치 않은 동작이 발생할 수 있습니다.

시작 구성 및 백그라운드 모드

UIBackgroundModes 키는 애플리케이션의 백그라운드 기능을 선언합니다. 각 모드에는 Info.plist에 해당 설명과 Xcode 프로젝트 기능에서의 확인이 필요합니다. 모드를 지정하지 않으면 시스템이 30초 후 또는 리소스가 부족할 때 백그라운드 작업을 강제로 종료할 수 있습니다.

xml
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>remote-notification</string>
    <string>location</string>
    <string>processing</string>
</array>

UIApplicationSupportsMultipleScenes 키는 iPad 및 Mac Catalyst에서 멀티태스킹 지원을 사용하도록 합니다. 이 키가 없으면 애플리케이션은 여러 창을 관리하기 위해 SwiftUI ScenePhase 또는 UIKit UISceneDelegate를 사용할 수 없습니다. iPadOS에서 사용자는 동일한 앱의 여러 창을 열고, 그 사이에서 콘텐츠를 끌어서 넣으며 Split View를 사용할 수 있습니다. 애플리케이션이 멀티-창 모드를 지원하지 않는 경우, 이 키를 false로 설정하면 해당 기능이 비활성화됩니다.

LSRequiresIPhoneOS 키는 iPad에 앱 설치를 차단합니다. iPad 인터페이스를 지원하지 않거나 큰 화면에 적응하지 않은 iPhone 전용 앱에 사용됩니다. 그러나 Apple은 필요 없이 이 키를 사용하지 않을 것을 권장합니다. 사용자는 앱이 iOS 및 iPadOS를 실행하는 모든 기기에서 작동하기를 기대하기 때문입니다. 앱이 여전히 iPhone으로 제한되는 경우, 이 요구사항이 기술적으로 정당화되고 App Store 설명에 명시되어있는지 확인하십시오.

UIViewControllerBasedStatusBarAppearance 키는 상태바 스타일을 제어합니다. NO로 설정된 경우 상태바 스타일은 Info.plist 키 UIStatusBarStyle을 통해 전역적으로 설정됩니다. YES인 경우 (iOS 7부터 기본) 각 ViewController가 preferredStatusBarStyle을 재정의하여 자체 상태바를 관리할 수 있습니다. 현대 앱의 경우 다양한 화면에서 다른 상태바 스타일을 가지도록 YES를 유지할 것을 권장합니다.

UIApplicationExitsOnSuspend 키는 백그라운드로 전환할 때 일시 정지 대신 애플리케이션을 완전히 종료하도록 합니다. 은행 앱 또는 기밀 데이터를 처리하는 앱같이 보안 요구사항이 높은 앱에만 드물게 사용됩니다. 이 경우 사용자는 앱으로 빠르게 돌아가는 기능을 잃고, 각 시작은 빈 상태에서 시작됩니다. App Store은 리뷰 중에 이 키 사용에 대한 설명을 요청할 수 있습니다.

NSAppTransportSecurity 키는 앱의 네트워크 연결을 관리합니다. iOS 9부터 App Transport Security (ATS)는 기본적으로 모든 HTTP 연결을 차단하고 HTTPS를 요구합니다. 특정 도메인에 대한 HTTP 요청을 일시적으로 허용하려면 NSAppTransportSecurity 내의 NSExceptionDomains 딕셔너리를 사용합니다. 개발의 경우 NSAllowsArbitraryLoads = true를 통한 완전한 ATS 비활성화가 허용되지만, Apple은 설명을 요구하고 타당한 이유 없이 허용하지 않습니다. 프로덕션 빌드에서는 사용자 데이터를 처리하는 모든 도메인에 대해 ATS가 사용으로 설정되어야 합니다.

자주 묻는 질문

Xcode 프로젝트에서 Info.plist를 어디서 찾을 수 있나요?

Info.plist 파일은 애플리케이션 이름과 일치하는 이름으로 프로젝트 폴더에 위치합니다. Xcode에서는 Supporting Files 그룹 내의 프로젝트 네비게이터에 파란 책 아이콘으로 표시됩니다. 프로젝트에서 Spotlight 검색으로도 찾을 수 있습니다.

Info.plist를 수동으로 편집할 수 있나요?

, Info.plist는 모든 텍스트 편집기나 Xcode 그래픽 인터페이스를 통해 편집할 수 있습니다. 수동 편집은 콘텐츠에 대한 완전한 제어를 제공하지만 XML 구문에 주의해야 합니다: 각 열린 <key> 지시문에 해당하는 </key>가 있어야 하고, 데이터 유형은 Apple이 예상하는 것과 일치해야 합니다.

SwiftUI 프로젝트에서 Info.plist란?

SwiftUI 프로젝트에서 Info.plist는 UIKit 프로젝트와 동일하게 작동합니다. 시난 관리를 위해 프로젝트가 App 프로토콜을 사용하지 않는 경우 UIApplicationSceneManifest 키가 시작 구성에 필요할 수 있습니다. SwiftUI App 프로토콜은 시난 구성을 자동으로 생성하지만, 커스터마이징을 위해서는 수동으로 키를 추가해야 합니다.

Info.plist에 커스텀 키를 추가하는 방법은?

Xcode에서 Info.plist를 열고 숫자 기호를 클릭한 다음 이름을 입력하십시오. 커스텀 키에는 Apple 시스템 키와의 충돌을 피하기 위해 회사 접두사를 사용하십시오 (예: CustomKey 대신 ITSCustomKey). 값 유형(String, Number, Array, Dictionary)은 예상되는 데이터 형식에 따라 선택됩니다.

App Store이 Info.plist 때문에 빌드를 거부한 이유는?

일반적인 이유: 요청된 권한에 대한 개인정보보호 키 부재, 올바르지 않은 CFBundleIdentifier, Info.plist와 App Store Connect 간의 버전 불일치, NS 키 값이 빈 경우. 사용되는 API에 대한 모든 NS 키를 확인하고 각 설명에 앱의 로케일리즐 언어로 의미 있는 설명이 포함되어 있는지 확인하십시오.

요약

  • Info.plist는 메타데이터, 권한 및 시작 설정이 있는 iOS/macOS 앱을 위한 XML 구성입니다
  • CFBundleIdentifier 및 CFBundleVersion은 식별 및 App Store 출시를 위한 필수 키입니다
  • 개인정보보호 키(NSCameraUsageDescription)는 카메라, 마이크 및 기타 개인 API에 액세스하는 데 필수입니다
  • Custom URL schemes는 CFBundleURLTypes을 통해 구성되고, Universal Links는 Entitlements와 apple-app-site-association을 통해 구성됩니다
  • UIBackgroundModes는 올바른 백그라운드 작동을 위한 백그라운드 기능을 선언합니다
  • 필수 키 부재는 앱 괴생 또는 App Store 빌드 거부로 이어집니다
  • Info.plist 편집은 Xcode 인터페이스 또는 XML 구문 제어 기능이 있는 텍스트 편집기를 통해 사용 가능합니다

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기