额头长痘什么原因| 感冒了挂什么科| 一什么雨伞| 尿路感染吃什么药最快| 晗是什么意思| 阴茎破皮擦什么药| 台湾什么时候收复| 中指戴戒指什么意思| 脚热是什么原因引起的| 吃什么东西容易消化| 体内湿热吃什么中成药| 轻歌曼舞是什么意思| 水中加什么擦玻璃干净| 盆腔炎用什么药效果好| 荨麻疹忌口忌什么食物| 金主是什么意思| 雨霖铃是什么意思| 绿茶用什么茶具泡好| 免疫力差吃什么可以增强抵抗力| 睡眠障碍应该挂什么科室| 正常人为什么会得梅毒| 什么龙什么凤| 11月27日是什么星座| 人为什么会失眠| 灵魂摆渡是什么意思| 端午是什么时候| 口腔溃疡是缺什么维生素| 薄荷脑是什么东西| 新生儿湿疹抹什么药膏| 猫咪疫苗什么时候打| kb什么意思| 横纹肌溶解是什么意思| 黑色代表什么| 睡醒咳嗽是什么原因| 2023年属什么| 痈疽是什么意思| 男生圆脸适合什么发型| 偶尔心慌是什么原因| 肾结石挂什么科| 威海的海是什么海| 避孕套什么牌子的好| 梦见女尸是什么预兆| 虎父无犬子是什么意思| 女性肾虚是什么原因导致的| 肾病什么东西不能吃| 苹果和什么榨汁减肥| 59岁属什么生肖| 高血钙有什么症状| 清福是什么意思| 什么鸟一生只有一个伴侣| 禅茶一味什么意思| 掰弯了是什么意思| 乳头出血是什么原因| 医院挂号用什么app| 包是什么结构| 厘清和理清的区别是什么| 固精是什么意思| 做小吃什么生意最赚钱| 打封闭针有什么坏处| 高回声是什么意思| 对戒是什么意思| 清酒和白酒有什么区别| 头疼吃什么药效果好| 肝在什么位置图片| 肺部纤维灶什么意思| 妹妹你坐船头是什么歌| 枉然是什么意思| 弓加耳念什么| 什么是缓刑意思是什么| 无拘无束的意思是什么| 胃寒吃什么食物好| 牙龈上火是什么原因引起的| 出气臭是什么原因| 什么样的土豆不能吃| 湿气是什么原因造成的| 夏天能种什么菜| 烧心吃什么食物好得快| 四川有什么烟| 角加斗念什么| 吃六味地黄丸有什么好处| 评审是什么意思| 面包属于什么类食品| 舅舅的孩子叫什么| 长期口臭挂什么科| 处女座前面是什么星座| 黄牛票是什么意思| 月经结束一周后又出血是什么原因| 检查是否怀孕挂什么科| 素土是什么| 避孕药叫什么| 现在去贵州穿什么衣服| 涅盘是什么意思| 冬虫夏草什么价格| 1972属什么| 白酒都有什么香型| 什么的眼睛| 我宣你 是什么意思| 什么是动脉硬化| 27虚岁属什么生肖| 松树像什么| 天蝎座跟什么星座最配| 一什么树干| 监测是什么意思| 素海参是什么做的| 尿微量白蛋白高是什么原因| 断崖式是什么意思| 改编是什么意思| 女生喜欢什么姿势| 2012年是什么年| 肚子上长毛是什么原因| 什么叫肠上皮化生| 甲状腺炎是什么引起的| 小处男是什么意思| 戾气太重是什么意思| 一月份生日是什么星座| 月经不来挂什么科| 产后屁多是什么原因| adhd是什么意思| 世界第一长河是什么河| 被隐翅虫咬了用什么药| 什么颜色代表水| 1978年属什么生肖| 通草和什么炖最催奶了| 美国报警电话为什么是911| 宫颈lsil是什么意思| 开边珠牛皮是什么意思| 皮蛋吃多了有什么危害| 三叉神经痛挂什么科就诊| 狗头是什么意思| 银红色是什么颜色| 陈皮为什么越陈越好| 知鸟是什么| 5月20是什么星座| 婚检有什么项目| 恒字属于五行属什么| 迪卡侬属于什么档次| 遥不可及是什么意思| 心脑血管挂什么科| 拜阿司匹林什么时间吃最好| 全自动洗衣机不排水是什么原因| 情感细腻是什么意思| 三七粉不适合什么人吃| 眼睛红血丝是什么原因| 甲功三项能查出什么病| 胃病能吃什么水果| 赛脸什么意思| 三个土读什么| 胎盘植入是什么意思| 往生咒是什么意思| 阴道炎是什么| 桂圆不能和什么一起吃| 休学是什么意思| 什么人容易得帕金森病| 伐木是什么意思| 厕所里应该摆什么花| 红颜知己代表什么关系| k是什么单位| 动脉硬化吃什么可以软化血管| 蹲马步有什么好处| 为什么第一次进不去| 推迟月经吃什么药| 阴道炎是什么症状| 为什么会得脑梗| 孕妇吃什么利尿排羊水| 总掉头发是什么原因| 79年属什么| 面料支数是什么意思| 涤纶是什么布料| 头晕想吐是什么症状| 人到中年为什么会发胖| 什么酒最贵| 小鱼的尾巴有什么作用| 体内湿气太重吃什么药能快速除湿| 媚眼如丝是什么意思| 前胸后背出汗是什么原因造成的| 巨婴是什么意思| 发泥和发蜡有什么区别| 邮箱地址填什么| 维生素b补什么| 一阵什么| alp医学上是什么意思| 十月二十五是什么星座| 女性吃金蝉有什么好处| 茵陈是什么| 什么天什么什么| 血脂稠是什么原因造成的| 打脸是什么意思| 早上为什么不能洗澡| 什么是赌博| 瑾字属于五行属什么| tvoc是什么意思| 甲骨文是什么朝代的| 走路有什么好处及功效| 什么耳机比较好| 嗜碱性粒细胞偏高是什么原因| emma什么意思| 血压偏低吃什么东西补最好| 手抖是什么情况| 左心室舒张功能减退是什么意思| 少年什么意思| 白细胞酯酶弱阳性是什么意思| 过度纵欲的后果是什么| 苡米和薏米有什么区别| 白眼球有红血丝是什么原因| 低密度脂蛋白偏高吃什么食物| 欧皇是什么意思| 软组织挫伤是什么意思| 比熊吃什么牌子的狗粮好| 功能性消化不良是什么意思| 男性尿很黄是什么原因| 预激综合征是什么病| va是什么意思| 风湿病是什么引起的| onlycook是什么牌子| 肾绞痛可能由于什么原因引起| 什么食物化痰| 指甲容易断裂是什么原因| 一热就咳嗽是什么原因| 上水是什么意思| 鼻窦炎吃什么药好得快| 大便潜血阳性意味着什么| pt什么意思| 梦见摘菜是什么意思| seifini是什么牌子| 副肾是什么药名| 你有什么| 壁虎是什么动物| 子宫癌是什么症状| 尿结石什么症状| 什么是公历年份| 带子是什么海鲜| 老天爷叫什么名字| 甲鱼喜欢吃什么食物| 西湖醋鱼用什么鱼| 红景天是什么| 长是什么意思| 朱元璋属什么生肖| 抢七是什么意思| 丫鬟是什么意思| 盆腔炎检查什么项目| 漪字五行属什么| 黑今念什么| 2027是什么年| 沉鱼落雁闭月羞花是什么意思| 血压低压高是什么原因造成的| 甘油三酯查什么项目| 血燕是什么| 有什么有什么| 蚂蚁的触角有什么作用| 征兵初检检查什么| armour是什么牌子| 电子烟有什么危害| 乳腺导管扩张是什么意思| 脂蛋白a高吃什么能降下来| 腰扭了挂什么科| 什么言什么色| 非淋菌尿道炎用什么药| 羊癫疯是什么引起的| 西洋参不能和什么一起吃| 胸口隐隐作痛挂什么科| 单亲家庭什么意思| 狗狗犬窝咳吃什么药| 尿白细胞阳性是什么意思| 远水解不了近渴什么意思| 百度Jump to content

中航工业发布歼-20最新画面 仿佛科幻大片

From Wikipedia, the free encyclopedia
百度 [责任编辑:网评中心]

Property List
Filename extension
.plist
Internet media type
application/x-plist
Uniform Type Identifier (UTI)com.apple.property-list
Developed byApple Computer and GNUstep,
formerly NeXT
Type of formatSerialization of dictionary objects.

In the macOS, iOS, NeXTSTEP, and GNUstep programming frameworks, property list files are files that store serialized objects. Property list files use the filename extension .plist, and thus are often referred to as p-list files.

Property list files are often used to store a user's settings. They are also used to store information about bundles and applications, a task served by the resource fork in the old Mac OS.

Property lists are also used for localization strings for development. These files use the .strings or .stringsdict extensions. The former is a "reduced" old-style plist containing only one dictionary without the braces (see propertyListFromStringsFileFormat),[1] while the latter is a fully fledged plist. Xcode also uses a .pbxproj extension for old-style plists used as project files.

Representations

[edit]

Since the data represented by property lists is somewhat abstract, the underlying file format can be implemented many ways. Namely, NeXTSTEP used one format to represent a property list, and the subsequent GNUstep and macOS frameworks introduced differing formats.

NeXTSTEP

[edit]

Under NeXTSTEP, property lists were designed to be human-readable and edited by hand, serialized to ASCII in a syntax somewhat like a programming language. This same format was used by OPENSTEP.

  • Strings are represented in C literal style: "This is a plist string\n"; simpler, unquoted strings are allowed as long as they consist of alphanumericals and one of _$+/:.-.
  • Binary data are represented as: < [hexadecimal codes in ASCII] >. Spaces and comments between paired hex-codes are ignored.
  • Arrays are represented as: ( "1", "2", "3" ). Trailing commas are tolerated.
  • Dictionaries are represented as: { "key" = "value"; ... }. The left-hand side must be a string, but it can be unquoted.
  • Comments are allowed as: /* This is a comment */ and // This is a line comment.
  • As in C, whitespace are generally insignificant to syntax. Value statements terminate by a semicolon.

One limitation of the original NeXT property list format is that it could not represent an NSValue (number, Boolean, etc.) object. As a result, these values would have to be converted to string, and "fuzzily" recovered by the application.[2] Another limitation is that there is no official 8-bit encoding defined.[3]

The defaults utility, introduced in OPENSTEP (1996), can be used to manipulate plist files used for storage of preferences (known as defaults in NeXTSTEP, hence the name) on the command line via their preferences domain, and this utility can be used to edit arbitrary plist files. This utility superseded three older commands (dread, dwrite, and dremove).[4]

GNUstep

[edit]

GNUstep adopts the NeXTSTEP format, with additions for representing NSValue and NSDate data types. The new typed entries have the form <*T...>, where T is a one-letter type code. For example, an NSValue of Boolean YES is represented as <*BY> and NSDate objects are represented as <*DYYYY-MM-DD HH:MM:SS +ZZZZ>.[5][6] Binary data can also use the more efficient base64 format as <[ b64... ]>. The 8-bit problem is implicitly solved as well, as most deployments use UTF-8.

GNUstep also has its own binary format, NSPropertyListGNUstepBinaryFormat, implemented in NSSerialization. This format is defined recursively like the textual formats, with a single-byte type marker preceding some data. A form of string interning is supported via a GS-extension shouldBeCompact switch.[7]

Two relative independent plist handlers are found in GNUstep: the CFPropertyList in libs-core-base (CoreFoundation), and the NSPropertyList in libs-base (Foundation Kit). Both support the binary and XML forms used by macOS to some degree, but the latter is a lot more complete. For example, the two GNUstep-specific formats are only handled in the latter.[8]

GNUstep provides a set of plist command-line tools based on NSPropertyList, including a version of pl[9] and defaults.[4]

macOS

[edit]

While macOS can also read the NeXTSTEP format, Apple sets it aside in favor of two new formats of its own, one XML-based and the other binary. Apple also has a partially-compatible JSON format (NSJSONSerialization).

History

[edit]

In Mac OS X 10.0, the NeXTSTEP format was deprecated, and a new XML format was introduced, with a public DTD defined by Apple. The XML format supports non-ASCII characters and storing NSValue objects (which, unlike GNUstep's ASCII property list format, Apple's ASCII property list format does not support).[10]

Since XML files, however, are not the most space-efficient means of storage, Mac OS X 10.2 introduced a new format where property list files are stored as binary files. Starting with Mac OS X 10.4, this is the default format for preference files. In Mac OS X 10.7, support for reading and writing files in JSON format was introduced. JSON and property lists are not fully compatible with each other, though. For example, property lists have native date and data types, which the JSON format does not support. Conversely, JSON permits null values while property lists do not support explicit nulls.

Tooling

[edit]

The old defaults tool from NeXTSTEP remains available. The /usr/libexec/PlistBuddy command provides an interactive plist editor. It can also be scripted.[11]

The plutil utility (introduced in Mac OS X 10.2) can be used to check the syntax of property lists, or convert a property list file from one format to another. It also supports converting plists to Objective-C or Swift object literals.[12] Like the Cocoa NSPropertyListSerialization it is built on, it takes "old-style" inputs, but does not convert to this type. (The Cocoa NSSerializer from before Mac OS X 10.2 emits old-styled output.)

The pl utility is introduced in Mac OS X v10.5. It takes any input and tries to generate "old-style" plists.[13][a] Like the GNUstep version, it appears to use the description property of Foundation types found in plists, which Apple has specified to produce valid old-style plists.[b]

In terms of the internals, Apple provides an open source parser for old style, XML, and binary formats in their C Core Foundation code as CFPropertyList. However, all the utilities and most parts of the system use the closed-source NSPropertyList parser from the Obj-C Foundation Kit. The Swift reimplementation is open source, but is not guaranteed to be identical.

Format

[edit]

XML and JSON property lists are hand-editable in any text editor. Additionally, Apple provides support in Xcode for editing property lists in a hierarchical viewer/editor that can handle plists formatted in binary or XML, but not JSON. As of Mac OS X 10.4, Apple provides an AppleScript interface for reading property list files through the System Events application. As of Mac OS X 10.5, Apple provides an AppleScript interface for editing, creating and writing property list files as well.[14]

For the XML format, the tags, related Foundation classes and CoreFoundation types, and data storage formats are as follows:

Foundation class CoreFoundation type XML Tag Storage format
NSString CFString <string> UTF-8 encoded string
NSNumber CFNumber <real>, <integer> Decimal string; reals can have exponents, or be Infinity (inf) or NaN (nan).
NSNumber CFBoolean <true/>, <false/> No data (tag only)
NSDate CFDate <date> ISO 8601 formatted string
NSData CFData <data> Base64 encoded data
NSArray CFArray <array> Can contain any number of child elements. Can be empty.
NSDictionary CFDictionary <dict> Alternating <key> tags and plist element tags. Can be empty.

The binary file format is documented in a comment block in the Core Foundation C code source file (CF/CFBinaryPList.c) for Apple's open sourced implementation of binary plists in its Foundation library.[15] Apple describes the implementation as opaque in its plist(5) manual page documentation,[16] which means that reliance on the format is discouraged. In the binary file format the magic number (the first few bytes of the file which indicate that it's a valid plist file) is the text bplist, followed by two bytes indicating the version of the format.

The binary file can store some information that cannot be captured in the XML or JSON file formats. The array, set and dictionary binary types are made up of pointers - the objref and keyref entries - that index into an object table in the file. This means that binary plists can capture the fact that - for example - a separate array and dictionary serialized into a file both have the same data element stored in them. This cannot be captured in an XML file. Converting such a binary file will result in a copy of the data element being placed into the XML file. Additionally the binary file has a UID type that is used to identify data items when serialized. The complete list of data that can be stored taken from the C code source file is as follows:

Binary plist object formats (as of CoreFoundation 1153)[15]
Foundation class CoreFoundation type Object type Marker byte Encoded data
nil nil null (v"1?"+) 0000 0000
NSNumber CFBoolean bool 0000 1000 (false)
0000 1001 (true)
NSURL CFURL url (v"1?"+) 0000 1100 (base string)
0000 1101 (string)
string: URL string in recursive encoding (as in "string object format?"); base string: the same, but with a base URL encoded first.
NSUUID CFUUID uuid (v"1?"+) 0000 1110 16 bytes of UUID
fill 0000 1111 nothing - just a padding
NSNumber CFNumber int 0001 nnnn # of bytes is 2^nnnn, big-endian bytes (1, 2, 4, or 8)
NSNumber CFNumber real 0010 nnnn # of bytes is 2^nnnn, big-endian bytes (4 or 8)
NSDate CFDate date 0011 0011 8 byte float follows, big-endian bytes; seconds from 1/1/2001 (Core Data epoch)
NSData CFData data 0100 nnnn [int] nnnn is number of bytes unless 1111 then int count follows, followed by bytes
NSString CFString string 0101 nnnn [int] ASCII string, nnnn is # of chars, else 1111 then int count, then bytes
NSString CFString string 0110 nnnn [int] Unicode string, nnnn is # of chars, else 1111 then int count, then big-endian 2-byte uint16_t
NSString CFString string (v"1?"+) 0111 nnnn [int] UTF-8 string, nnnn is # of chars, else 1111 then int count, then bytes
UID 1000 nnnn nnnn+1 is # of big-endian bytes (1, 2, 4, or 8). Unsigned int, only produced by NSKeyedArchiver (see below).[17]
NSArray CFArray array 1010 nnnn [int] objref* nnnn is count, unless '1111', then int count follows
NSOrderedSet ordset (v"1?"+) 1011 nnnn [int] objref* nnnn is count, unless '1111', then int count follows
NSSet CFSet set (v"1?"+) 1100 nnnn [int] objref* nnnn is count, unless '1111', then int count follows
NSDictionary CFDictionary dict 1101 nnnn [int] keyref* objref* nnnn is count, unless '1111', then int count follo

Note the v"1?"+ note in many types. This means that the marker byte is only found in files with a format version no lower than the "1?" magic number. The precise way to parse them is more nebulous than the way to parse legacy types, since the CFBinaryPlist implementation only handles version "0?". In practice, these types are never encountered, since NSKeyedArchiver is already capable of capturing these information.

A table of offsets follow the object table, which is then followed by a trailer containing information on the size and location of the two tables.

Serializing to plist

[edit]

Since property lists do not capture all the information and data types required to describe an arbitrary object, an extra layer of encoding and decoding is often done. The OpenStep specification abstracts the operation of serializing any NSObject under the NSCoding protocol. Any class implementing this protocol can have its instances serialized by a NSCoder subclass to some other format.[18] Two main coders exist for the purpose of serializing objects to plists:

  • NSArchiver, which converts an object into a block of binary data somewhat like a tagged struct. This class is part of OpenStep, although no concrete format has been defined. In practice, one can use it to serialize an object to a file (skipping the plist), or to embed the data in a plist. It must be read and written in the same order as written. The introduction of NSKeyedArchiver deprecates its use.
  • NSKeyedArchiver, introduced in Mac OS X 10.2, transforms the object into an NSDictionary. The main improvement of this format for programmers is that it accesses members not by a fixed order, but by string keys. Internally, it somewhat recapitulates the binary plist format by storing an object table array called $objects in the dictionary. Everything else, including class information, is referenced by a UID pointer. A $top entry under the dict points to the top-level object the programmer was meaning to encode.[17]

Among other things, using an archiver allows for new datatypes to be encoded without changing the plist format itself and it is the preferred way for Apple to encode things like NSSets and null values. Parsing the formats do prove a bit harder, since one more layer must be followed even for some classes plists were supposed to support. Like the binary format which also has an object table, it is possible to create circular references in NSKeyedArchiver. Since there is not a UID data type in XML, the integers are stored in a dictionary under the key "CF$UID".[19]

Apple publishes an open-source NSKeyedArchiver in Swift Corelibs Foundation; like the closed-source Apple Foundation, it restricts output formats to binary and XML only. It also has some test cases showing the results of serialization.[20] GNUstep also has a compatible implementation, which does not limit output formats.[21]

Path language

[edit]

There is not a single, standardized path language for property lists like XPath does for XML, but informal conventions used by various programs exist.

  • A dot syntax version is found in the keypath argument of Apple's plutil. It appears to derive from (id) -[NSObject(NSKeyValueCoding) valueForKeyPath:].[12]
  • A different format is used by PlistBuddy, with a colon syntax for indexing.[11]

Neither format is able to express a key with the separator character in it.

Other platforms

[edit]

Windows

[edit]

Although best known on Apple or Darwin systems, including iOS and macOS, plist files are also present on Windows computers when Apple software, such as iTunes[22] or Safari[23] are installed. On Windows, the files are typically binary files,[24] although some applications may generate PLIST files in the other formats.

On Windows the Apple plist files are stored in the user's home directory under %USERPROFILE%\AppData\Roaming\Apple Computer. These plist files on Windows typically store preferences and other information, rather than using the Windows registry.

Options for editing PLIST files on Windows are not as extensive as on macOS. If the file is in the XML or JSON format with care a text editor such as Notepad++ can be used. Apple ships a plutil.exe within its "Apple Application Support" package (which is part of iTunes), and it is identical to its macOS counterpart.

NetBSD

[edit]

Introduced in 2006 and first released with NetBSD#4.0 (2007) is a proplib library, which can be used for serialising data between the kernel and userland. It implements part of the XML plist language.[25]

One of the sample users of proplib is the second revision of the sysmon envsys framework for system monitoring.

NetBSD's proplib library has also been ported to DragonFly in 2010, and is available since DragonFly BSD#2.8.[26]

Cross-platform

[edit]
  • Facebook's open-source reimplementation of the Xcode build tool, xcbuild, contains a plist library as well as plutil and PlistBuddy. These cross-platform utilities are written in C++.[27]
  • The Python programming language has a builtin plistlib module to read and write plist files, in Apple's XML or in binary (since Python 3.4).[28] ProperTree is a cross-platform editor that makes use of this library.[29]
    • A third-party library called ccl-bplist has the additional ability to handle NSKeyedArchiver UIDs.[19]
  • Go has a plist package that supports four types of plists: OpenStep text, GNUStep text, Apple XML, and Apple Binary. It also handles UIDs in XML and binary formats.[2]
  • Dart has a third party library called propertylistserialization[30] which also handles NSKeyedArchiver UIDs.

See also

[edit]

Notes

[edit]
  1. ^ A quirk of macOS pl is that it puts a stray "D" character into the stdout if one manually typed the standard input and terminated it with ^D.
  2. ^ The description in Obj-C Foundation NSData is buggy in that it returns a dictionary representation. The open source Swift Foundation has no such issue.

References

[edit]
  1. ^ "NSString class reference: propertyListFromStringsFileFormat". GNUstep. Retrieved February 17, 2020.
  2. ^ a b "Package plist". godoc.org. When Unmarshal encounters an OpenStep property list, it will enter a relaxed parsing mode: OpenStep property lists can only store plain old data as strings, so we will attempt to recover integer, floating-point, boolean and date values wherever they are necessary.
  3. ^ "Old-Style ASCII Property Lists". Apple Developer (Property List Programming Guide). Retrieved February 16, 2020.
  4. ^ a b defaults(1) – Linux General Commands Manual
  5. ^ Frith-Macdonald, Richard (2004). "NSPropertyListSerialization class documentation". GNUstep.
  6. ^ "Property Lists". GNUstepWiki.
  7. ^ "NSSerialization documentation". GNUstep. source code
  8. ^ "Types and Constants: NSPropertyListFormat". gnustep.org.
  9. ^ pldes(1) – Linux General Commands Manual
  10. ^ "appleexaminer.com: "PLIST files"". Archived from the original on February 19, 2014. Retrieved February 27, 2014.
  11. ^ a b PlistBuddy(8) – Darwin and macOS System Manager's Manual
  12. ^ a b plutil(1) – Darwin and macOS General Commands Manual
  13. ^ pl(1) – Darwin and macOS General Commands Manual
  14. ^ "AppleScript: Property Lists". April 24, 2009. Archived from the original on April 24, 2009.
  15. ^ a b "CF/CFBinaryPList.c". Apple Open Source. Retrieved January 6, 2020.
  16. ^ plist(5) – Darwin and macOS File Formats Manual
  17. ^ a b Caithness, Alex (April 4, 2012). "Geek post: NSKeyedArchiver files – what are they, and how can I use them?". Digital Investigation. The CF$UID data type in Listing 2 is a dictionary with a single key ("CF$UID") which is followed by an integer number (this layout is what you will see when the property list is represented in XML; in the raw binary format the "UID" data type is a separate entity which doesn't require the dictionary structure). These data types represent a reference to another entity in the "$objects" array. The number of the CF$UID gives the position of the array.
  18. ^ "NSCoder.html". OpenStep specification.
  19. ^ a b CCLForensics Group (January 15, 2020). "cclgroupltd/ccl-bplist". GitHub.
  20. ^ "apple/swift-corelibs-foundation: NSKeyedArchiver.swift". GitHub. December 14, 2021. tests
  21. ^ "NSKeyedArchiver documentation". GNUstep documentation. Retrieved February 23, 2020. source code
  22. ^ Hummert, Christian; Humphries, Georgina Louise (2022), Hummert, Christian; Pawlaszczyk, Dirk (eds.), "Property Lists", Mobile Forensics – The File Format Handbook: Common File Formats and File Systems Used in Mobile Devices, Cham: Springer International Publishing, pp. 157–165, doi:10.1007/978-3-030-98467-0_6, ISBN 978-3-030-98467-0
  23. ^ "How does the Apple Safari web-browser store its settings on Windows?". Super User.
  24. ^ "GitHub - microsoft/NSPlist: NSPlist". May 3, 2019 – via GitHub.
  25. ^ Jason R. Thorpe. "proplib — property container object library". NetBSD.
  26. ^ Jason R. Thorpe. "proplib — property container object library". DragonFly BSD.
  27. ^ "facebook/xcbuild/Libraries/plist". GitHub. Retrieved February 17, 2020.
  28. ^ "plistlib — Generate and parse Mac OS X .plist files". Python 3 documentation. Retrieved January 6, 2020.
  29. ^ "corpnewt/ProperTree: Cross platform GUI plist editor written in python". GitHub. February 17, 2020. Retrieved February 17, 2020.
  30. ^ "propertylistserialization | Dart package". Dart packages. Retrieved September 14, 2024.
[edit]
开是什么生肖 血常规红细胞偏高是什么原因 什么叫托特包 身上起火疖子什么原因 医院院长什么级别
是什么品牌 口里有异味是什么原因 外阴白斑是什么原因 囊壁钙化是什么意思 腰酸是什么原因
后脑勺痛什么原因引起的 绞股蓝有什么作用 热忱是什么意思 湿气重吃什么药 一库一库雅蠛蝶是什么意思
哥弟属于什么档次 日单是什么意思 戏耍的近义词是什么 肾阳虚有什么症状 胆囊胆固醇结晶是什么
为什么尿有点偏红色hcv8jop2ns2r.cn 风骚什么意思hcv8jop7ns5r.cn pca是什么意思hcv8jop0ns0r.cn saucony是什么品牌hcv7jop5ns2r.cn 肺部纤维化是什么意思hcv8jop0ns1r.cn
土命和什么命最配hcv7jop5ns1r.cn 口干口苦是什么病hcv7jop5ns6r.cn 澳大利亚有什么动物wmyky.com 男生被口是什么感觉jasonfriends.com 杆菌一个加号什么意思xianpinbao.com
男性检查hpv挂什么科hcv9jop1ns4r.cn 犬子是什么意思hcv9jop2ns4r.cn 女性得了性病有什么症状hcv9jop0ns6r.cn 目前除皱最好的方法是什么hcv9jop6ns8r.cn 生殖感染有什么症状hcv8jop4ns5r.cn
学海无涯苦作舟的上一句是什么hcv8jop1ns1r.cn 哥子是什么意思hcv7jop9ns1r.cn 黄辣丁吃什么食物gysmod.com 唾手可得是什么意思bjhyzcsm.com 太平鸟属于什么档次hcv8jop8ns8r.cn
百度