Managing Your App’s Information Property List
실행 파일을 나타내는 모든 번들에는 번들을 설명하는 Information Property List 파일(Info.plist
) 이 포함되어야 한다.
property list에 포함할 항목에 대한 세부 사항은 실행 파일 유형과 플랫폼에 따라 다르다.
일반적으로 특정 번들에 대한 Information Property List 파일을 생성하는 데 도움이 되는 Xcode를 사용하는 것을 Apple에서 가이드하고 있다.
번들은 특정한 규칙대로 실행 코드와 해당 코드가 사용하는 리소스를 포함하는 디렉터리이다.
Package는 "번들"로 구성되어있다.
Informaton Property List 파일의 이름은 항상 Info.plist
이다.
파일 이름은 대소문자를 구분하며, 대문자 I로 시작해야한다.
번들 내 위치는 번들 타입과 플랫폼에 따라 다르다.
예를들어 iOS App 번들은 루트 디렉터리에 해당 파일을 지정하는 반면, macOS App 번들은 Info.plist
파일을 Contents 디렉터리에 저장한다.
macOS App 번들의 Contents 디렉터리에 실제로 저장되는지
macOSApp 빌드 결과로 나온 Test.app을 한번 확인해보자
![](https://user-images.githubusercontent.com/63908856/224655035-2fe57350-bcca-4620-95cb-395d81fb6a24.png)
![](https://user-images.githubusercontent.com/63908856/224655109-ae84fa14-0c49-40bd-924b-9d9312c5f438.png)
![](https://user-images.githubusercontent.com/63908856/224655169-9b1cac65-678b-4e68-92ba-70264045dcff.png)
Xcode에서 제공하는 template으로 프로젝트를 생성하면, Xcode에서 Information property list file을 제공한다.
Xcode는 이 파일의 이름을 Info.plist
로 지정하고, 사용자가 편집할 수 있는 source file로 프로젝트에 추가한다.
![](https://user-images.githubusercontent.com/63908856/224640738-e867f067-c0d7-4bb0-a45c-5a9444bd1916.png)
Xcode는 프로젝트 폴더의 각 target에 대해 하나의 Information Property List를 생성한다.
예를 들어 iOS app에 종속된 watchOS앱은 watchOS 및 iOS target 각각에 대해 별도의 Information Property List가 필요하다.
Xcode는 파일을 생성할 때 일부 property list key를 자동으로 설정한다.
![](https://user-images.githubusercontent.com/63908856/224641409-3f0c1894-cdf1-4a83-a2cd-8ba84eacb61a.png)
![](https://user-images.githubusercontent.com/63908856/224641724-f3e244a0-fd15-47f7-938c-2f1192cf256f.png)
예를 들어 Xcode는 위와 같이 Storyboard를 사용하는 앱에서 Main Storyboard file을 지정하기 위해 UIMainStoryboardFile
키를 자동으로 설정한다.
Xcode는 build settings를 사용하여, Build time에 대체할 변수 값으로 다른 특정 키를 설정한다.
(예: $(PRODUCT_BUNDLE_IDENTIFIER) 값을 가진 CFBundleIdentifier).
Configure the Target
Xcode에서 project 또는 target을 이용해 기본 설정 중 일부를 변경하고 다른 설정을 추가할 수 있다.
예를 들어, target의 General에서 bundle identifier를 변경해PRODUCT_BUNDLE_IDENTIFIER
Build 설정 값을 변경할 수 있다.
![](https://user-images.githubusercontent.com/63908856/224643067-ec5f5a86-6213-4a61-8e8a-8dd0bef5ea22.png)
Edit the Information Property List
property list editor를 이용해 Xcode에서 직접 Information Property List를 편집할 수 있다.
키를 추가 또는 제거하거나 직접 값을 변경할 수 있다.
https://help.apple.com/xcode/mac/current/#/dev3f399a2a6
Localize the Information Property List
Information Property List의 많은 문자열은 사용자에게 표시되는, 사람이 읽을 수 있는 문자열이기 때문에 파일을 Localize해야한다. 예를들어
예를 들어 사용자에게 권한을 요청해야하는 Protected resources 에 있는 CFBundleDisplayName, CFBundleName 및 UsageDescription 키와 같은 것을 Localize해야한다.
Make a resource localizable : https://help.apple.com/xcode/mac/current/#/dev7c584bb2a
Add platform- and Device-Specific Keys
아래의 구문을 사용해 Information Property List 파일에 플랫폼 또는 device 별 key를 추가할 수 있다.
[key name]-[platform]~[device]
위 구문에서 platform및 device는 key의 값을 platform 또는 device로 제한해 사용할 수 있도록 한다.
예를 들어 iPad device에 대해 서로 다른 orientation 값을 설정하려면
UISupportedInterfaceOrientations~ipad
키를 사용하면 된다.
platform
에서 사용가능한 value는 다음과 같다.
- iphoneos
- macos
device
에서 사용가능한 value는 다음과 같다.
- iphone
- ipod
- ipad
Build the App's Information Property List
Application을 build할 때 Xcode Bundle에 코드 서명하기 전에 프로젝트의 property list file을 compile된 bundle에 복사한다.
이렇게 하면 최종 파일이 올바른 이름을 가지게 되며 지정된 번들 타입에 맞는 올바른 위치에 있는지 확인할 수 있다.
코드 서명이 궁금하다면 같이 읽어보면 좋은 링크
![](https://vos.line-scdn.net/landpress-content-v2_1761/1666853016843.png?updatedAt=1666853017000)
레츠 스위프트 2022 강수진님 발표자료
![](https://cdn.slidesharecdn.com/ss_thumbnails/letswift22naljin-221202181229-1e40a699-thumbnail.jpg?width=640&height=640&fit=bounds)
Compile 된 property list file을 bundle에 복사하는 작업 중에 Xcode는 build settings를 사용하여 위에서 $(PRODUCT_BUNDLE_IDENTIFIER)을 치환했던 것처럼 변수 치환을 진행한다.
또한 다른 방식으로 지정한 congifuration을 나타내는 추가 key를 삽입한다.
예를들어 Xcode의 Project Editor에서 iOS app의 deployment target을 지정하면
Xcode는 이를 복사하는 동안 MinimumOSVersion
키로 변환해 추가한다.
이러한 과정 때문에 App과 함께 제공되는 Information Property List 파일과 프로젝트의 source 파일은 동일하지 않다.
요약
Info.plist는 번들을 설명하는 Information Property List를 말한다.
참고
![](https://docs.developer.apple.com/tutorials/developer-og.jpg)