黑苹果必备软件推荐之 ProperTree

ProperTree 是一款跨平台的 GUI plist 编辑器,使用 Python(兼容 2.x 和 3.x)和 Tkinter 编写。

一、ProperTree 特点

  • 跨平台 – 应该适用于任何支持 python 和 tkinter 的地方
  • 基于文档,支持多窗口
  • 节点拖放以重新排序
  • 复制和粘贴
  • 查找/替换 – 允许搜索键或值
  • 有序 – 或无序 – 字典支持
  • 完整的撤销-重做堆栈
  • 为 Python 2 回溯支持二进制属性列表和 Unicode
  • 扩展的整数转换以允许在 XML <integer> 标签中使用十六进制整数(例如 0xFFFF)
  • 上下文感知的右键菜单,包括用于 OpenCore 或 Clover config.plist 文件的模板信息
  • OC(Clean)快照,用于遍历 OpenCore config.plist 文件的 ACPI、Drivers、Kexts 和 Tools 的内容
  • 支持 Base64、Hex、Ascii 和 Decimal 的值转换器

二、如何获取 ProperTree?

1、github 直接下载:下载链接

2、通过 Git 克隆仓库

在 *nix 系统上:

git clone https://github.com/corpnewt/ProperTree
python ./ProperTree/ProperTree.py
- or -
python3 ./ProperTree/ProperTree.py

注:在 macOS 上,克隆后直接双击 ProperTree.command 即可启动。

在 Windows 上:

git clone https://github.com/corpnewt/ProperTree
./ProperTree/ProperTree.bat

三、ProperTree 的常见问题

  • OC 快照功能是做什么的?

OC 快照功能会提示你选择一个 OC 文件夹,然后遍历该文件夹内 ACPI、Kexts、Tools 和 Drivers 目录的内容 – 将所有条目与当前文档的 ACPI -> Add、Kernel -> Add、Misc -> Tools 和 UEFI -> Drivers 相比较。它会根据需要添加或删除条目,并通过比较每个 kext 的 CFBundleIdentifier 和其 Info.plist 中的所有其他 kext 的 OSBundleLibraries 确保 kext 加载顺序,确保任何其他 kext 依赖的 kext 都在它们之前加载。如果检测到重复的 CFBundleIdentifiers(支持 MinKernel、MaxKernel 和 MatchKernel 重叠检查),它还会发出警告,并提出禁用找到的所有后续条目。它还会检查是否有禁用的父 kext 和启用的子 kext。默认情况下,所使用的模式是通过将 OpenCore.efi 文件的 MD5 哈希与 Acidanthera 调试/发布版本的已知列表进行比较来确定的。如果 MD5 哈希与任何已知版本不匹配,它将回退到脚本的 snapshot.plist 中的最新模式。这种行为可以在设置中通过 OC 快照目标版本菜单自定义。

  • OC 快照与 OC Clean 快照有什么区别?

这两种快照变体完成相同的任务 – 它们只是利用不同的起点。OC Clean 快照首先会清空 ACPI -> Add、Kernel -> Add、Misc -> Tools 和 UEFI -> Drivers,然后从各自的 ACPI、Kexts、Tools 和 Drivers 目录中重新添加所有内容。普通的 OC 快照则从当前文档中的这四个位置的信息开始,只拉取更改 – 根据需要添加和删除条目。

  • 我什么时候应该使用 OC Clean 快照而不是 OC 快照?

通常情况下,只有在第一次快照时才应该使用 OC Clean 快照,以确保 config.plist 中的任何示例条目都被移除并重新添加。每个后续的快照都应该是普通的 OC 快照,以确保你所做的任何自定义都得以保留。

  • 在 Sonoma (14.x) 及更新版本上无法点击任何东西

这似乎是在使用 python 3.11.x 及更早版本时出现的问题,由于 tk 和 macOS 的某些问题。更新到至少 python 3.12.0(在这里找到)似乎可以解决这个问题。如果你无法更新你的 python 版本,你也可以在尝试点击树视图中的元素之前移动窗口。

  • ProperTree 在 macOS Monterey (12.x) 及更新版本上打开黑屏

默认的 tk 实现似乎在 macOS Monterey(以及与 Command Line Tools 安装的版本)上显示不正确。一个解决方案是下载并安装最新版本的 python(在这里找到),它附带了兼容的 tk,然后使用位于 ProperTree 的 Scripts 目录中的 buildapp-select.command 构建一个应用程序包,以针对安装的 python 路径。然后你可以利用它创建的 ProperTree.app 包。

  • ProperTree 无法在 macOS Monterey (12.x) 上打开或保存 plist 文件

这似乎是内置 tk 和 python.org 早期的“通用”安装程序的问题。从 python 3.10.2 开始,这个问题在通用构建中已经得到解决。你可以在这里获取最新的 python 3 安装程序。安装后,使用位于 ProperTree 的 Scripts 目录中的 buildapp-select.command 构建一个应用程序包,以针对安装的 python 路径。然后你可以利用它创建的 ProperTree.app 包。

  • 我如何让 ProperTree 在我双击 .plist 文件时打开?

在 macOS 上,你可以运行位于 ProperTree 的 Scripts 目录中的 buildapp-select.command 来构建一个应用程序包,该包可以与 .plist 文件关联。

在 Windows 上,你可以运行位于 ProperTree 的 Scripts 目录中的 AssociatePlistFiles.bat 来将 .plist 文件与 ProperTree.bat 关联,并在右键单击 .plist 文件时将“使用 ProperTree 打开”选项添加到上下文菜单。这种方法取决于位置,移动 ProperTree 的副本后需要重新运行 AssociatePlistFiles.bat。

  • 当我尝试运行 ProperTree 时,我收到 [ModuleNotFoundError: No module name ‘tkinter’]

这是因为 ProperTree 依赖的图形界面库不存在或无法检测,你需要从包管理器安装 tkinter。

要在 Ubuntu(及基于 Ubuntu 的发行版)上安装,你可以运行 sudo apt-get install python3-tk -y

  • ProperTree 无法运行,因为它没有权限,这是怎么回事?

这不应该发生,建议你从官方 ProperTree 仓库下载,但如果你对你的来源有信心,那么运行 chmod +x ProperTree.command 应该可以解决问题

  • 我在 macOS 上使用国际键盘布局时,某些按键会导致 ProperTree 因 NSRangeException 崩溃,原因是“-[__NSCFConstantString characterAtIndex:]:范围或索引超出界限”

这是 macOS 上 Tcl/Tk 的 Cocoa 实现中的一个错误(讨论详情)。来自 python.org 的最新 Python 2 安装程序附带并使用了 Tcl/Tk 8.6.8,该版本已解决此问题。鉴于 ProperTree.command 中的 shebang 利用了 #!/usr/bin/env python —— 应使用找到的第一个 Python 2 二进制文件。你可以使用 ProperTree 的 Scripts 目录中的 buildapp-select.command 将特定 Python 安装路径硬编码到 .app 包的可执行 shebang 中。

  • ProperTree 在 Big Sur(macOS 11)上崩溃

截至 macOS 11.2(20D5029f),系统的 tk 安装似乎已修复,并且工作正常。因此,它不应该需要外部 Python 版本才能运行。

这是因为 macOS 上默认的 Python 安装使用了旧版本的 tk —— 不支持 macOS 11。为解决这个问题,你可以从 python.org 下载并安装最新的 Python 3 版本(注意:目前“通用”3.9.1 安装程序会导致主题问题,不应使用),然后利用 ProperTree 的 Scripts 目录中的 buildapp-select.command 构建一个利用该 Python 版本的 .app 包。

如果你已经通过 brew 或其他包管理器安装了 Python 3 —— 它很可能仍然链接到系统的 tk 版本,除非链接到更新的版本,否则仍将存在问题。

  • buildapp-select.command 的使用

以下是 buildapp-select.command 输出的一个示例。它将遍历 which python 和 which python3 的输出,然后尝试加载 tk 接口,同时跟踪哪些工作哪些失败。下面的示例来自 macOS 11.2(20D4029f),系统版本的 Python 2 和 3,以及从 python.org 安装的 Python 3.9.1。如果 Scripts 文件夹上方目录中有现有的 ProperTree.app,该应用的 shebang 将被定位并作为 C. Current 选项提供。在以下菜单中,我会选择选项 3 或 C 来使用非系统 Python 安装。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注