프로퍼티 리스트

프로퍼티 리스트(property list)는 OS X, iOS, NeXTSTEP, GNUstep 프로그래밍 소프트웨어 프레임워크 등에 이용되는 객체 직렬화를 위한 파일이다. 또한 .plist라는 확장자를 가지므로, 보통 plist 파일이라고 하는 경우가 많다.

프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, 번들과 애플리케이션 소프트웨어 정보를 저장하기 위해서도 사용되고, 이전 맥 OS에서는 리소스 포크 정보를 저장하는 데에 사용되었다.

표현 방법 
프로퍼티 리스트의 데이터 표현은 추상적이기 때문에 다양한 방법으로 기본 파일 형식을 구현할 수 있다. 이전의 NeXTSTEP에서는 한 가지 형식을 사용했는데, GNUstep과 OS X 프레임워크에서 다양한 형식을 도입했다.

NeXTSTEP 
NeXTSTEP에서 프로퍼티 리스트는 손으로 수정하기 쉽도록, 인간 가독성 방식으로 디자인되었고, 프로그래밍 언어 문법에 가깝게 ASCII로 직렬화되어있다.

문자열은 다음과 같이 표현한다.
 "plist 문자열"
바이너리 데이터는 다음과 같이 표현한다.
 < [ASCII HEX 코드] >
배열(Array)는 다음과 같이 표현한다.
 ( "1", "2", "3" )
딕셔너리(Dictionary) 배열은 다음과 같이 표현한다.
 {
     "key" = "value";
     ...
 }
NeXTSTEP의 프로퍼티 리스트는 NSValue(숫자, 불린 자료형 등) 객체 표현에 제한이 있다.

GNUstep 
GNUstep은 NeXTSTEP에서 몇 가지 형식을 추가했다.
 NSValue (숫자, 불린 자료형 등)
 NSDate (<*DYYYY-MM-DD HH:MM:SS timezone>와 같이 작성한다.)

GNUstep의 프로퍼티 리스트는 OS X를 이용하여 읽거나 작성할 수 있다.

macOS 

macOS은 NeXTSTEP 형식도 다룰 수 있지만, 애플은 별도로 새로운 두 가지 형식을 추가했다.

맥 OS X 10.0에서는 NeXTSTEP 형식을 사용하지 않고, 애플이 정의한 DTD의 새로운 XML 문서 형식이 발표되었다. 이 형식은 non-ASCII 문자와, NSValue 객체(일부는 일반 텍스트로 나타남.)를 저장할 수 있다.(다른 GNUstep의 ASCII 프로퍼티 리스트 형식과 달리, 애플의 ASCII 프로퍼티 리스트 형식은 지원하지 않는다.)

그러나 그 동안의 XML파일은 공간 활용에 문제가 많았기 때문에 맥 OS X 10.2에서는 이진 파일 등을 저장할 수 있는 새로운 프로퍼티 리스트를 발표하였다. Mac OS X 10.4부터는 이 형식이 기본으로 사용되었다.

프로퍼티 리스트는 plutil 유틸리티(맥 OS X 10.2부터 추가된 기능)를 사용하여 구문 확인, 형식 변환에 사용할 수 있다. 또한, NeXTSTEP의 기본 유틸리티도, 자체 환경설정의 커맨드 라인에서, 환경설정값의 저장에(이전의 OS X에서도 가능) 사용되는 프로퍼티 리스트 파일을 편집하는 데 사용할 수 있다. XML 프로퍼티 리스트는 어떤 편집기에서도 편집하기 쉬우나, 애플의 계층 문서 뷰어/편집기 또한 바이너리 형식의 프로퍼티 리스트를 편집할 수 있다. 애플은 개발 도구의 일부로 응용 프로그램인 프로퍼티 리스트 에디터를 제공한다.

Mac OS X 10.4부터는 시스템 이벤트 응용 프로그램을 통해 프로퍼티 리스트 파일을 읽기 위한 AppleScript 인터페이스를 제공한다. Mac OS X 10.5에서는 프로퍼티 리스트의 생성, 작성, 편집을 위한 AppleScript 인터페이스를 제공한다.

XML 프로퍼티 리스트에 사용되는 Foundation 클래스와, CoreFoundation 형식, XML 태그 및 데이터 저장 형식이다:

예제

냉장고 안에 코끼리 넣기 (Mac OS X 10.6 작성) 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>냉장고</key>
	<array>
		<string>코끼리</string>
	</array>
</dict>
</plist>
Dictionary 안에 '냉장고' key를 가지고 있는 element의 0번 인덱스 에 '코끼리' 문자열 element를 가지고 있는 array의 표현 방법이다.

외부 링크 
 Manual Page For plist(5) - 애플 개발자 홈페이지
 Property List Programming Guide for Cocoa  - 프로퍼티 리스트 프로그래밍 가이드
 NSPropertyListSerialization class documentation - GNUstep 프로젝트
 OpenStep plist API - OpenStep plist API

XML 기반 표준
마크업 언어
데이터 직렬화 포맷
MacOS
NeXT
GNUstep