注意 如果这个软件对您有用,我恳请您给这个仓库点个星,这样我就知道这个软件正在被使用。另外,请考虑赞助来支持这个项目,因为这是我在空闲时间制作的。非常感谢! ⭐️
PHP Monitor(又名phpmon)是一款轻量级的macOS实用程序,运行在您的Mac上,并在状态栏显示当前活跃的PHP版本。它与Laravel Valet紧密集成,所以如果您想使用应用的所有功能,需要先安装它(请查阅下方FAQ以了解如何设置您的环境)。
截图:展示PHP Monitor的主要功能。
切换不同版本的PHP非常方便。您甚至可以收到通知(当然,只有在您选择允许的情况下)!
PHP Monitor还能让您快速访问各种实用功能(如访问配置文件、重启服务等)。
您还可以添加新域名作为链接,隔离站点,管理各种服务,并执行急救以修复各种常见的PHP链接问题。
🖥 系统要求
PHP Monitor是一个通用应用程序,可在Apple Silicon和基于Intel的Mac上原生运行。
- 您的用户账户可以管理您的计算机(某些功能需要,如证书生成)
- macOS 12.4或更高版本(支持Monterey、Ventura和Sonoma)
- Homebrew安装在默认位置(
/usr/local/homebrew
或/opt/homebrew
) - 已安装Homebrew
php
公式 - 可选但推荐:Laravel Valet
从PHP Monitor 6.0开始,您不需要安装Laravel Valet就能使用PHP Monitor。但要访问PHP Monitor的所有功能,建议安装Valet。
更多信息,请查看SECURITY.md以了解当前支持的应用版本。
🚀 如何安装
再次强调,如果您想访问PHP Monitor的所有功能,我建议先安装**Laravel Valet**:
composer global require laravel/valet
valet install
valet trust
目前,PHP Monitor兼容Laravel Valet v2、v3和v4。这些不同版本的Valet支持略有不同的PHP版本,这就是为什么保留对旧版本的支持。请注意,某些功能在旧版本的Valet中不可用,如站点隔离。
手动安装(推荐,仅首次安装)
完成后,您可以下载最新版本,解压并放置在/Applications
中。
通过Homebrew安装
在5.8版本之前,这是安装PHP Monitor的推荐方式。
如果您更喜欢通过Homebrew安装应用,也可以运行以下命令:
brew tap nicoverbruggen/homebrew-cask
brew install --cask phpmon
⬆️ 如何更新
将应用更新到最新版本的推荐方法是使用内置更新器。
如果您的网络连接很慢,更新器可能会报告下载超时。在这种情况下,您可以手动更新,方法是下载最新版本并将应用放在/Applications
中。
(您也可以使用Homebrew更新PHP Monitor,但这需要您在每次安装更新时批准应用。如果您使用内置更新器,则无需这样做。)
⚡️ 启动器(Alfred、Raycast)
如果您想与您选择的启动器集成,您还可以下载与PHP Monitor配合使用的Alfred工作流或Raycast扩展。
应用必须在后台运行才能使用这些功能,并且在偏好设置中必须启用"允许第三方集成"复选框(默认情况下已启用)。
🔑 应用是否经过签名和公证?
是的,应用已经签名和公证,这意味着您只需在首次启动时(或每次更新时)批准它即可。
👨💻 为什么要开发这个应用?
我希望能够一目了然地看到当前链接的PHP版本,并通过一个简单的应用来处理Laravel Valet,而不必每次都使用终端。 最初,我为此制作了一个Alfred工作流——但现在已被这个实用工具取代,它还能很好地一目了然地显示额外信息,如当前PHP版本、内存限制等。
🐘 为什么不使用Laravel Herd?
如果你不需要自定义本地PHP设置,只想要一个简单易用的现成环境来开始编码,Laravel Herd可能已经足够满足许多使用场景。
如果你需要更多的定制和灵活性,我建议你考虑将PHP Monitor与Laravel Valet结合使用,或使用其他解决方案,如Docker(例如与Laravel Sail一起使用)。
🤬 应用无法启动?!
PHP Monitor会执行一些完整性检查,以确保使用应用时有良好的体验。在各种情况下,你会收到提示,告知PHP Monitor无法正常工作。
请按照警告中指定的说明解决任何问题。
(如果应用在启动时崩溃,没有显示这些消息,你可能有非标准的Homebrew和Valet设置。这些情况不受支持。)
🙋♂️ 常见问题与故障排除
如果你遇到问题,首先应该做的是安装最新版本的PHP Monitor 和 Laravel Valet。这可以解决多种问题。要升级Valet,请运行
composer global update
。升级后别忘了运行valet install
。
如果你仍然遇到问题,这里有一些常见问题和答案,以及问题和解决方案:
支持哪些版本的PHP?
PHP Monitor支持所有稳定和受支持的PHP版本。然而,根据你安装的Valet版本,可供切换的PHP版本可能会有所不同。
注意 如果你安装了可被PHP Monitor检测到但当前活跃的Valet版本不支持的PHP版本,菜单中会出现一个带有感叹号表情符号的项目来提醒你。(⚠️)
通过PHP Monitor的PHP版本管理器功能可安装的向后移植版本取决于这个tap的可用性。
通过PHP Monitor的PHP扩展管理器功能可安装的PHP扩展取决于这个tap的可用性。
为了与旧版PHP最大兼容,你可能希望继续使用Valet 2或3。欲了解更多信息,请查看SECURITY.md,了解不同版本的Valet支持哪些PHP版本。
如何安装其他版本的PHP,包括旧版本?
假设你已安装了php
配方,最新的稳定版PHP就会被安装。在撰写本文时,这是PHP 8.3。
你可以通过PHP Monitor的PHP版本管理器安装其他支持的PHP版本。(你也可以手动安装或升级PHP版本,但不推荐这样做。)
请记住,即使通过PHP Monitor的PHP版本管理器安装或更新PHP版本,也可能导致其他所需的配方依赖(保持这些PHP版本功能所需的软件)被升级。这种情况发生时可能不太明显,但如果安装PHP版本花费的时间比预期长,这很可能是原因:通常其他依赖项也在同时安装。
此外,升级一个特定版本的PHP可能也会导致其他已安装的PHP版本在一次操作中被更新,如果该版本的依赖项也适用于其他(较新的)PHP版本。通过Homebrew管理PHP版本有点棘手,即使是PHP Monitor也可能遇到一些困难。
如果你遇到奇怪的情况或故障,请在问题跟踪器上开一个issue并与我联系。我希望不断改进这个过程,使其尽可能地简单可靠。
注意:在管理PHP版本时使用PHP Monitor可能会导致临时别名冲突,因为核心tap别名和tap的别名可能指向不同版本的PHP,但这通常只是一个小麻烦,因为这种情况通常只在新PHP版本发布时出现。
我希望PHP Monitor在我的Mac启动时自动运行!
如果你运行的是macOS Ventura或更新版本,在设置菜单中有一个选项可以选择:"在登录时启动PHP Monitor"。
如果你使用的是旧版macOS,你可以通过将PHP Monitor.app拖到系统偏好设置 > 用户与群组中你的账户的登录项部分来实现这一点。
非常方便!
在独立模式下哪些功能不可用?
服务管理器被禁用,所有其他明显的Laravel Valet集成(配置查找器、域名列表、修复我的Valet)也被禁用。
(大多数其他功能仍然可用。)
我想从头开始设置PHP Monitor!我甚至没有安装Homebrew,从哪里开始?
如果你想第一次在电脑上设置PHP Monitor,以下是我的做法。
我还制作了一个视频教程,可能更容易理解。如果你只想要终端命令,请继续阅读。 首先安装 Homebrew。请先按照那里的说明进行操作!
然后,你需要设置你的 PATH。
nano .zshrc
确保以下行不在注释中:
# 在 Intel Mac 上
export PATH=$HOME/bin:/usr/local/bin:$PATH
如果你使用的是基于 Apple Silicon 的 Mac,你需要添加:
# 在 M1 Mac 上
export PATH=$HOME/bin:/opt/homebrew/bin:$PATH
并在 .zshrc
文件中添加以下内容,但要在 Homebrew PATH 添加之前:
export PATH=$HOME/bin:~/.composer/vendor/bin:$PATH
如果你要添加 composer
和 Homebrew 二进制文件,请确保优先使用 Homebrew 二进制文件,方法是最后添加这些到路径中。在我的系统上,看起来是这样的:
export PATH=$HOME/bin:/usr/local/bin:$PATH
export PATH=$HOME/bin:~/.composer/vendor/bin:$PATH
export PATH=$HOME/bin:/opt/homebrew/bin:$PATH
如果你不是使用 Apple Silicon,应该删除第三行。
安装 php
和 composer
包:
brew install php composer
确保 PHP 链接正确:
which php
应该返回:/usr/local/bin/php
(或者如果你使用 Apple Silicon,则返回 /opt/homebrew/bin/php
)
如果你不需要 Laravel Valet,可以在这里停止。PHP Monitor 将以独立模式工作。
如果你也想使用 Valet,继续使用 Composer 安装 Valet,如下所示:
composer global require laravel/valet
为了获得最佳结果,你应该将全局依赖的 PHP 平台锁定到你打算运行的最旧 PHP 版本。如果该版本是 PHP 7.0,你的 ~/.composer/composer.json
文件可能如下所示(请相应调整版本!):
{
"require": {
"laravel/valet": "^3.0",
},
"config": {
"platform": {
"php": "7.0"
}
}
}
再次运行 composer global update
。这确保当你切换到不同的全局 PHP 版本时,Valet 不会出问题。如果出现问题,PHP Monitor 会告诉你可以采取什么措施。
然后,安装 Valet:
valet install
这应该会安装 dnsmasq
并设置 Valet。很好,快完成了!
valet trust
最后,运行 PHP Monitor。由于该应用已经公证并使用开发者 ID 签名,它应该可以正常工作。你需要批准应用的初次启动,但之后就可以开始使用了。
PHP Monitor 多久检查一次更新?
PHP Monitor 会在每次启动应用时检查是否有可用更新。
你可以通过进入偏好设置(通过菜单栏中的 PHP Monitor 图标)并取消勾选"自动检查更新"来禁用此行为。(你随时可以手动检查更新。)
我已安装 PHP Monitor,它能正常工作。我想将 PHP 安装升级到最新版本,最好的方法是什么?
最简单的方法是使用内置的 PHP 版本管理器,它允许你一键升级 PHP 版本。
如果你想手动操作,可以按照以下说明进行。
这里很容易出错,导致 PHP 版本未链接或 PHP Monitor 中缺少版本。
以下是我通常的做法:
- 打开 PHP Monitor 并选择 急救与服务 > 恢复 Homebrew 权限。
- 弹出窗口告诉你权限已恢复后,关闭 PHP Monitor。
- 运行
brew update-reset
- 运行
brew upgrade
如果之后 PHP Monitor 中缺少任何 PHP 版本,请为缺失的版本运行以下命令:
- 运行
brew uninstall php@x.x
(其中x.x
是版本号) - 运行
brew cleanup
(如果遇到任何权限问题,你可能需要手动清理文件夹) - 运行
brew install php@x.x
(其中x.x
是版本号)
升级后,你可能还需要运行 brew link php
。
就是这样。现在重新启动 PHP Monitor,一切应该就绪了!
PHP Monitor 告诉我 `php` 未安装...
尝试使用 brew install php
重新安装。
这应该能解决问题!如果问题仍然存在,运行 brew link php --force
。(之后,你可能需要重启终端以确保新链接的版本被检测到。)
brew install php
brew link php --force
Valet 站点无法加载。我收到 502 Bad Gateway 错误!
如果你访问 .test
域名时,在切换到不同的 PHP 版本后收到 502(Bad Gateway)错误,这是一个常见问题。
通常通过升级 Valet 并重新运行 valet install
可以解决此问题。
composer global update
valet install
如果你在大约 30 秒后看到 502(Bad Gateway)错误,你的请求可能已超时。你可能需要解决自己代码中的性能问题。
PHP Monitor 告诉我我的安装有问题,但我看不出为什么!
PHP Monitor 会告诉你 PHP 安装是否有问题,如果配置在确定版本号时导致警告或错误。由于 PHP Monitor 通过 Homebrew 更改链接的版本,Valet 和终端(CLI)都应该使用新的 PHP 版本。
但在你的系统上可能并非如此。如果情况不是这样,你可能已经链接了特定版本的 PHP。在这种情况下,你可能需要更改设置 PATH 的 .bashrc 或 .zshrc 文件(取决于你使用的终端)。
你可以通过运行 which php 来确定正在使用的 PHP 版本。
你可以通过运行命令来找出具体原因。在 Intel 上,你可以运行(将 7.4 替换为出问题的版本):
/usr/local/opt/php@7.4/bin/php -r "print phpversion();"
在 Apple Silicon 上,你可以运行(将 7.4 替换为出问题的版本):
/opt/homebrew/opt/php@7.4/bin/php -r "print phpversion();"
你应该在输出中看到错误或警告。
通常这是由重复的扩展声明或无法加载的扩展导致的问题。你需要自己解决这个问题(通常是通过删除有问题的扩展或重新安装)。
隔离站点的选项被禁用了!这是怎么回事?
确保你安装了至少 Valet 3.0 版本,因为对隔离的支持是在这个版本的 Valet 中添加的。(请注意,这个版本的 Valet 不再支持 PHP 5.6。)
其中一个限制(内存限制、最大 POST 大小、最大上传大小)显示感叹号!
你在 .ini 文件中提供的值无效。如果是这种情况,PHP 将尝试将你的值解析为字节,这通常是无意的。(1GB 将解析为仅几个字节,你的所有应用程序都会耗尽内存!)
你必须提供这样的值:1024K、256M、1G。另外,-1 也是允许的,或者只是一个整数(这将导致 N 字节成为限制)。
示例:例如,尝试使用 1GB 作为内存限制将导致这个感叹号。设置 1GB 限制的正确方法是使用 1G 作为值。(注意:显示的值将附加 B 以清晰起见,所以如果你设置 1G,PHP Monitor 报告的值将是 1 GB。)
(如果你使用 Valet,你可以在 .conf.d/php-memory-limits.ini 文件中调整这些限制。否则,你可能需要调整 php.ini。)
我的一个被注释掉的扩展没有被检测到...
应用程序在相关的 .ini 文件中搜索特定模式。对于常规扩展:
- extension="*.so"
- ; extension="*.so"
对于 Zend 扩展:
-
zend_extension="*.so"
-
; zend_extension="*.so"
-
是通配符和扩展名。如果你已经注释掉了扩展,请确保你用分号(;)注释掉它,并在分号后面加一个空格,以便 PHP Monitor 能够检测到它。
从 v3.4 开始,所有加载的 .ini 文件都被用来确定哪些扩展被启用。
我在 Apple Silicon Mac 上有两个 Homebrew 安装,我可以选择使用哪个安装与 PHP Monitor 一起使用吗?
如果你在 Intel 机器上或在启用 Rosetta 的 Apple Silicon 机器上使用 PHP Monitor,PHP Monitor 期望主要的 Homebrew 二进制文件在 /usr/local/bin/brew。
如果你在没有 Rosetta 的 Apple Silicon 上使用 PHP Monitor,PHP Monitor 期望主要的 Homebrew 二进制文件在 /opt/homebrew/bin/brew。
如果这里有问题,你会在启动时收到警报。
确保你通常运行的 Homebrew 版本与 PHP Monitor 期望的版本相同。例如,如果你使用的是 M1 硬件,但仍在为 Homebrew 使用 Rosetta,你也需要在 Rosetta 下运行 PHP Monitor。
PHP Monitor 是一个通用应用程序,支持两种架构,所以在这里了解如何在 PHP Monitor 中启用 Rosetta。
为什么应用程序在进行网络请求?
应用程序会自动检查更新,这是最可能的原因。
这在启动时发生(除非被禁用),应用程序直接检查托管在 GitHub 上的 Caskfile。这些数据不会,也不会被用于分析(据我所知,也不能)。
我也无法阻止 brew 在 PHP Monitor 使用二进制文件时通过网络做事。
应用程序包含一个互联网访问策略文件,所以如果你使用类似 Little Snitch 的软件,应该有一个描述说明这些调用发生的原因。
如何让各种预设显示出来?
你必须在位于 ~/.config/phpmon/config.json 的 JSON 文件中设置这些预设。
你必须至少设置一个有效的预设,才能让这些预设在 PHP Monitor 中工作。
这是一个有效预设的示例: { "scan_apps": [], "services": [], "presets": [ { "name": "旧项目", "php": "8.0", "extensions": { "xdebug": false }, "configuration": { "memory_limit": "128M", "upload_max_filesize": "128M", "post_max_size": "128M" } } ], "export": {} }
如果您不希望预设切换到特定的PHP版本,可以省略预设中的php
键。
警告 您必须重启PHP Monitor才能检测到这些更改。
如何确保在应用中显示其他Homebrew服务?
提示 如果您在独立模式下使用Valet,则不会显示Homebrew服务。
您必须在位于~/.config/phpmon/config.json
的JSON文件中设置这些服务。
您可以在配置文件中为以您自己的用户身份(非root)运行的Homebrew服务指定自定义服务。
提示 如果您的服务必须以root身份运行,目前无法添加到PHP Monitor。
您可以通过运行brew services list
来查看哪些服务可用。
以下是将mailhog
和mysql
服务添加到PHP Monitor的示例:
{ "scan_apps": [], "services": ["mailhog", "mysql"], "presets": [], "export": {} }
警告 您必须重启PHP Monitor才能检测到这些更改。
如何设置自定义环境变量?
您必须在位于~/.config/phpmon/config.json
的JSON文件中配置这些自定义环境变量。
PHP Monitor使用默认的Shell环境,没有自定义环境变量。您需要手动设置自定义环境变量。这些变量随后用于例如Composer。
以下是一个有效的COMPOSER_HOME
环境变量的示例,该变量会被识别:
{ "scan_apps": [], "services": [], "presets": [], "export": { "COMPOSER_HOME": "/absolute/path/to/composer/folder" } }
警告 您必须重启PHP Monitor才能检测到这些更改。
如何在域名列表的右键菜单中显示各种应用程序?
当您选择并右键点击一个域名时,您可以使用各种应用程序打开这些目录。这可以帮助加快您的工作流程。但是,要显示这些应用程序,必须首先检测到它们。
支持的应用程序有:PhpStorm、Visual Studio Code、Sublime Text、Sublime Merge、iTerm。
所有这些应用程序应该都能被正确检测到,无论它们在系统上的位置如何。如果您可以使用open -a "appname"
打开它,那么应该能检测到该应用程序并正常工作。如果您重命名了应用程序,可能会出现检测问题。
要查看检查哪些文件以确定可用性,请参阅此文件。
您可以通过创建并编辑~/.config/phpmon/config.json
文件来添加自己的应用程序,确保设置scan_apps
键:
{ "scan_apps": ["Xcode", "Kraken"] }
您可以在scan_apps
数组中放置任意数量的应用程序,PHP Monitor将检查这些应用程序是否存在。您不需要设置完整路径,只需应用程序的名称即可。但并非所有应用程序都支持打开文件夹,所以成功率可能会有所不同。
警告 您必须重启PHP Monitor才能检测到这些更改。
如何让应用程序与第三方工具(如Alfred或Raycast)集成?
PHP Monitor默认支持第三方应用程序集成,除非您在首选项中禁用,否则此功能是启用的。
如果您想自行集成,只需使用phpmon://
协议,并确保在首选项(PHP Monitor中)中启用第三方应用程序集成。
使用应用程序回调,macOS和PHP Monitor允许调用以下内容:
- phpmon://list
- phpmon://services/stop
- phpmon://services/restart/all
- phpmon://services/restart/nginx
- phpmon://services/restart/php
- phpmon://services/restart/dnsmasq
- phpmon://locate/config
- phpmon://locate/composer
- phpmon://locate/valet
- phpmon://phpinfo
- phpmon://switch/php/{version}
应用程序如何知道我的应用需要哪个PHP版本?
会扫描并解释根文件夹中的composer.json
文件(如果存在)。
如果在platform
中设置了版本,则优先使用。
如果在platform
中未设置版本,但在require
中设置了(最常见),则使用该版本。
站点列表中PHP版本旁边的对勾标记是什么意思?
如果当前启用的PHP版本与运行网站所需的版本兼容,您会在版本号旁边看到一个勾号。这是通过评估PHP要求约束(如 ^8.0
、~8.0
或特定版本: 8.0
)来确定的。
PHP Monitor 现在会检查您的 composer.json
文件,试图确定您正在运行的是什么项目。
这种方法比在链接了许多网站时询问驱动程序要快得多,但稍微不太可靠,因为通过 composer.json
推断出的框架或项目类型可能不是 100% 准确。
如有必要,您仍然可以通过命令行询问 Valet。根据我的经验,获取驱动程序会不必要地降低应用程序的速度。
您现在可以使用急救和服务 > 恢复 Homebrew 权限来(暂时)解决此问题,并允许顺利进行 brew upgrade
或 brew cleanup
过程。
如果您想了解更多信息,请查阅这个问题以了解为什么需要这样做。
请联系我并提出问题。PHP Monitor 不应该崩溃...(除非您在应用程序运行时实际删除 PHP,这被认为是正常行为!)
如果您想报告崩溃,请包含相关的日志文件,以便我找出究竟出了什么问题。
要找到日志,请查看 ~/Library/Logs/DiagnosticReports
(在访达中),看看是否有以"PHP Monitor"开头的任何(日志)文件。
此外,您可以通过向我发送最近一次 PHP Monitor 会话的详细日志来帮助我获取更多信息。默认情况下,日志记录是禁用的。
您可以通过运行以下命令来启动额外的详细日志记录: touch ~/.config/phpmon/verbose
然后重启 PHP Monitor。您可以在以下位置找到最新的日志: ~/.config/phpmon/last_session.log
。请将其附加到相关的错误报告中。
我没有包含任何跟踪或分析软件,所以如果您遇到问题,请通过问题让我知道。
PHP Monitor 完全免费提供,但如果您负担得起,捐赠有助于保持项目的活力和应用程序的维护。
您可以在此存储库顶部找到赞助链接,或者您可以点击此处的链接进入我的赞助页面。
捐赠确实有助于支付 Apple 开发者计划的费用,并激励我在工作时间之外继续维护 PHP Monitor(我确实有一份日常工作!)。
特别感谢:
- 通过GitHub Sponsors支持我的每个人
- 通过我的赞助页面捐赠的每个人
- Homebrew团队和Valet 维护者
- 当 PHP Monitor 还只是一个拥有少量星标的小应用程序时,联系我的各位
- 留下反馈和报告错误的每个人
- 在 Laravel 社区分享应用程序的每个人,尤其是在 Twitter 上
非常感谢您的贡献、善意的话语和支持。
该应用程序会在后台定期运行 php-config --version
,通常是在修改 Homebrew 配置时。使用文件系统监视器来确定 Homebrew 的 bin
目录中是否有任何更改。
PHP Monitor 还会检查您的 .ini
文件中的扩展,并加载有关限制的更多信息(内存限制、POST 限制、上传限制)。另请参阅下面关于配置更改检测的部分。
这个工具会检测您通过 Homebrew 安装的 PHP 版本,然后允许您在它们之间切换。
切换器会禁用所有不属于您想使用的版本的 PHP-FPM 服务,并链接到所需的 PHP 版本。然后,它会重新启动您所需 PHP 版本的 FPM 进程。这些都是并行进行的,所以应该比 Valet 的切换器快一些。
如果您使用的是 Valet 3 或更高版本,保持隔离站点运行所需的 PHP-FPM 版本也将根据需要启动或停止。
PHP Monitor 会监视当前链接的 PHP 版本的相关 conf.d
目录中的文件系统。
每当修改 .ini 文件时,PHP Monitor 将尝试重新加载有关活动 PHP 安装的当前信息。
如果扩展或其他进程在短时间内(< 1 秒)多次写入单个文件,PHP Monitor 将仅在一段时间后(稍有延迟)重新加载活动配置信息。
-
站点位置:PHP Monitor 使用 Valet 配置文件来确定需要查看的文件夹。每个文件夹都会被扫描,然后 PHP Monitor 会验证是否存在 composer.json 文件以确定所需的 PHP 版本。
-
站点是否安全:通过检查 Valet 的
Certificates
目录下是否存在与该站点名称匹配的证书来确定目录是否已安全。 -
项目类型:PHP Monitor 会检查你的
composer.json
文件中的"重要依赖"。例如,如果你的require
中包含laravel/framework
,那么很可能该项目类型为Laravel
。
注意 如果你在文档、桌面或下载文件夹中链接了一个文件夹,你可能需要授予 PHP Monitor 访问这些目录的权限,以确保 PHP Monitor 正常工作。
想了解更多?
如果你想了解更多关于这个工作原理的信息,我建议你查看源代码。
我已尽最大努力注释了尽可能多的内容,并避免使用过于复杂的架构,以保持代码易于维护。代码远非完美(还有很多可以清理的地方!),但应用程序运行良好。
我还为应用程序的一些关键部分编写了一些测试,这些部分我认为需要测试。将来,我希望能为一些 UI 内容添加更多测试,但目前的测试更多是单元测试而非功能测试。
开发者如需更详细的信息,请参阅开发者文档文件。