【2024-12-10 11:54:00AI Siri网最新消息】
属性列表本质上是具有 .plist 扩展名的 XML 文件。以下是如何在 macOS 的终端应用程序中编辑这些文件的方法。
XML 是一种开放的数据格式,随着互联网在1990年代中期开始商业化而受到广泛欢迎。它是一种基于文本的格式,使用键/值对来存储数据。键提供数据标签,值则存储与每个键相关的数据。
XML 中的数据类型包括布尔值(真/假)、数字、日期、字符串(文本)、数组、字典和普通数据。字典只是包含一个值的表格,并且具有自己的一组键 – 每个数据项对应一个键。
通过将这些数据类型结合并嵌入到 XML 文件中,您可以为几乎任何东西存储各种嵌套数据。虽然 XML 通常存储为纯文本,但它也已成为互联网上信息数据交换的一个标准,尽管今天它主要已被 JSON(JavaScript 对象表示法)取代,后者在许多方面类似。
Apple 平台上的 XML
当 Mac OS X 的第一个版本在 2000 年发布时,Apple 明确表示它采用 XML 作为大部分 Mac 操作系统的文件格式。Apple 使用一种名为 属性列表 (.plist)的本地文件格式,该格式是纯 XML,文件顶部有一些自定义的 Apple XML 标头信息。
您可能在 macOS 的偏好设置文件夹中看到过 .plist 文件,路径为 /Library/Preferences 或 ~/Library/Preferences。这些是简单的 XML 文件,包含 XML 数据列表,可以被应用程序或 macOS 本身读取,以存储偏好设置。
例如,macOS Finder 的设置文件位于偏好设置文件夹中,名为 com.apple.Finder.plist。大多数 .plist 设置文件使用这种反向 DNS 符号表示法:文件名中的第二个组件标识软件制造商,然后是应用程序的名称,最后是 .plist 扩展名。
您可以在 Apple 的 TextEdit 应用程序中打开 .plist 文件以读取原始文本,或者在 Apple 的开发者 IDE Xcode 中打开它,或在大多数其他文本编辑器中打开。
Xcode 具有特殊的格式化功能,可以将 .plist 文件显示为表格编辑器,每种数据类型在一行中显示数据类型及其键。通过点击表格中每个项目旁边的弹出菜单,您可以将其类型更改为任何已知的格式类型。
.plist 数据如果属于通用、未知或不透明类型,则被视为数据块 – 或者在 Apple 平台编程中被视为 Data
(在 Swift 中)或 NSData
(在 Objective-C 中)数据类型。
应用程序还将 .plist 文件捆绑在 macOS、iOS、iPadOS 和 watchOS 中,以描述应用程序并存储内容。例如,Info.plist 文件描述每个应用程序及其对操作系统的能力。
Apple 的操作系统中有系统 API 可以将 XML 和 .plist 转换并序列化为其他数据格式。
编辑属性列表
如前所述,您可以通过在普通文本编辑器或 Xcode 中打开 .plist 文件来直接编辑它们。
例如,如果您在 TextEdit 中打开 .plist 文件,您会看到未格式化的 XML 和标签。要在文本编辑器中更改 .plist 文件的数据,您需要理解 XML 标签及其工作原理。XML 标签与 HTML 标签非常相似。
在 Xcode 中,您可以简单地打开一个 .plist 文件,或将其添加到 Xcode 项目窗口中,然后在左侧的项目导航器中单击它。这将在右侧窗格中显示 .plist 的内容:
上述窗口显示的是 Apple Chess 应用的 version.plist 文件:每行是一个数据项,左栏是每个项的键,中心栏显示每种数据的类型,右栏显示每个键的值。
要在 Xcode 中更改 .plist 文件的数据,您可以单击一行的数据或键,然后输入新的信息,或单击中心列中的小弹出菜单来更改其类型。在弹出菜单中仅列出已知的、允许的 .plist 数据类型。
完成所有更改后,只需文件->保存 .plist 文件(或者在键盘上按 Command-S)。
XML 的一个巨大优势是您可以在任何平台上编辑这些文件,保存它们,然后在计算机之间复制,无需进行转换。这种软件 本地化 通常是如此进行的,文本字符串存储在 .strings 文件中,以便在不同语言之间进行翻译。字符串文件还包含标准 XML,使用键/值对。
捆绑在应用程序中的 InfoPlist.strings 文件包含标识一个应用所需描述信息的字符串的本地化版本。这是当您在 Finder 中对某个应用执行 文件->获取信息 时出现的文本。
最近,捆绑在每个应用中的 version.plist 文件可能包含存储在 XML 格式中的应用版本信息,使用 Apple 键如 CFBundleVersion
和 CFBundleShortVersionString
。
Apple 在开发者文档中有一部分 讨论 信息属性列表的内容。
Apple .plist 键中的 “CF” 前缀代表 Core Foundation – 一种用于操作 Apple 平台上的基本数据类型和 .plist 的基于 C 的 API。
Apple 平台开发中的字符串文件
在 Apple 开发中,字符串通常存储在 .strings 文件或字符串表中以进行本地化。开发人员可以将其字符串文件外包给翻译公司进行本地化,以便他们无需参与翻译。
如果您查看一个应用的捆绑包(文件夹),您可能会看到存储在语言文件夹中的多个 .strings 文件,每个文件夹以 “.lproj” 结尾,并有一个 ISO 标准的两字符国家名称前缀。通过复制并更改每个版本的字符串文件内容,开发人员可以在应用界面中添加新语言而无需了解这些语言。
macOS 和 iOS 足够智能,能够加载当前在 Apple 设备上使用的正确本地化字符串文件或表。
通过使用单独的字符串和 .plist 文件,应用程序的用户界面可以在运行时或之后进行更改 – 无需将文本编译到应用程序的二进制代码中。这被称为 动态加载。
这就是为什么您能够在 Apple 设备的设置中更改系统语言,并让同一应用更新其用户界面文本以适应新选择的语言。在较老的操作系统中,供应商必须为每个国家或语言提供单独的特定语言版本的应用程序。
动态加载还减少了应用程序在运行时的内存占用,因为字符串在实际使用之前并不会加载到内存中。
在终端中编辑属性列表
macOS 包括一个 (UNIX) 终端(Shell)应用程序,允许您在命令行上发出命令以执行操作。终端的一个强大用途是批处理和编写脚本以自动化流程。
许多终端命令包含一个 -r
(递归)标志,用于指示命令继续处理给定文件夹中的所有文件,而不管这些文件嵌套得多深。
您可以使用终端手动和自动处理 .plist 和 .strings 文件,以便更快地进行编辑。
例如,如果您有一批多语言的文件,并希望用来自语言表或其他输入的新本地化文本替换它们的所有值,这可以节省时间。或者,您可能希望一次性在一批文件中更改某个项目的所有键,而无需手动编辑每个文件。
本文不详细介绍 Shell 脚本自动化,但有很多优秀的书籍和 在线教程 可供学习批处理脚本。
在终端中手动编辑属性列表
要在终端中编辑 .plist 文件,请使用内置的 defaults
命令。defaults
允许您查看和编辑 .plist 文件,同时也可以使用名称为已知的操作系统 .plist 文件设置系统设置。
要查看 defaults
命令的完整用法,在终端中输入:
man defaults
,然后按 Return 键。
要退出终端中的 man 系统,请按 Control-Z。
更改现有 .plist 文件中值的主要选项是 write
选项,后接要写入的新数据。
如手册页所述,新的数据必须符合特定格式(通常是另一个 .plist 或字典),并且必须包含要写入的键和值。此数据的格式必须准确,否则命令可能失败或文件数据可能会损坏。
例如,手册页演示如何将名为 “Default Color” 的数组更改为新值 (255,0,0)。要做到这一点,您可以使用以下命令:
defaults write com.companyname.appname "Default Color" '(255, 0, 0)'
其中 “appname” 是公司 “companyname” 的应用名称。
您还可以使用另一个 .plist 重写 .plist 中的现有值。例如:
defaults write com.companyname.appname '{ "Default Color" = (255, 0, 0); "Default Font" = Helvetica; }';
在这个示例中,新的 .plist 数据用大括号括起来,并包含两个键/值对:”Default Color” 和 “Default Font”。
在向现有设置文件写入时要小心,因为如果您损坏了 macOS 使用的 .plist 文件中的数据,您的 Mac 可能会停止正常工作。
对于 defaults
,还存在 delete
选项,但请注意,delete
的风险比 write
更大。一些 delete
选项会销毁数据,甚至可以在一条命令中删除一个域中的 所有 数据。
您可以使用 domains
选项列出 Mac 上的所有域:
在设置域之外编辑属性列表文件
要编辑位于文件系统任何可写位置的任意 .plist 文件,请使用 filepath
选项。这允许您像对设置文件那样编辑 .plist,但可以对任何给定路径的 .plist 文件进行操作。filepath
也适用于 read
命令。
defaults read ~/Library/Containers/com.apple.TextEdit/Data/Library/Preferences/com.apple.TextEdit.plist
将读取位于用户库文件夹中的 TextEdit 应用程序设置文件。
但 filepath
选项适用于 任何 .plist 文件——不仅仅是设置文件或属于某个应用的文件。
通过将 defaults
命令组合到自动化脚本文件中,您可以看到批量处理 .plist 文件是多么简单。
实际上,许多第三方 Apple 软件都是以这种方式构建的:通常构建工程师编写自动化脚本从服务器检索代码库,批处理本地化的 .plist 和字符串文件,然后对所有软件组件进行构建。构建通常会使用另一组脚本文件进行后处理,以组装最终软件以便发布。
defaults
命令还具有添加或替换 .plist 文件中特定类型数据的选项。
defaults 系统在 macOS、Mac OS X 和 iOS 中已经存在数十年,实际上是 NeXTStep 中使用的原始技术之一 – 也是今天大多数 Apple 操作系统的前身。
一旦您掌握了 defaults 系统,就会发现自己经常使用它来检查和更改 macOS 设置并编辑 .plist 文件。在使用之前,请确保您对此感到舒适并充满信心。
Apple 在 终端用户指南 中有一小部分描述如何使用 defaults 系统编辑 .plist 文件和设置。
如果您使用的是 Windows 计算机,可以查看 Altova 制作的非常酷的 XML 编辑工具。