这篇博文是关于版本 0.3 的。我想首先做一些介绍,解释找到一个好问题是多么困难。对于上一个版本 0.2,我把所有的时间都花在了巨大的 JavaFX 项目上,我一点也不满意,因为我必须在几天内找到并解决两个问题。这次我几乎也遇到了同样的问题,但最终我尽力了。让我带您回顾一下时间线。
一开始,我发现了一个问题,我应该将 macOS 用户的应用程序图标从 Dock 移动到托盘。听起来很简单。然而,项目是用 Go 编写的,我以前从未使用过。如果您是熟悉我博客的读者,您肯定知道我学习新编程语言的频率。展望未来,我决定从头开始学习 Go lang。
让我快速解释一下这个项目的内容。这是适用于 Windows、macOS 和 Linux 的简单、免费且高效的广告拦截器和隐私卫士。
系统托盘 - 第一次尝试
幸运的是,Go 非常容易学习,所以让我们继续尝试将图标从 Dock 移动到 Tray。
第一次尝试时,我尝试使用用 Objective-C 编写的 systray 库来实现。它有助于操作 macOS 系统 UI 并将应用程序从 Dock 移动到托盘。我在 2 小时内就使用文档编写了代码,非常高兴。然而,我遇到了一个与另一个名为 wails 的库相关的问题,该库有助于实现同样用 Objective-C 编写的 UI。最终,构建项目失败了,因为这两个库使用相同的命名而发生冲突。我必须继续前进并尝试不同的库/方法。
trayhost - 第二次尝试
基本上,这个库的工作方式与系统托盘相同,我也遇到了同样的问题。
任何其他库都可以以同样的方式执行此操作,所以我很困惑。
我分叉了 systray 项目并更改了导致冲突的命名。导入了我的 fork,因为 Go 允许使用 git-url 直接导入。
不幸的是,它根本不起作用...
您可以检查我的分叉并查看更改:点击我:D
Objective-C - 第三次尝试
这次我尝试使用 Objective-C 和 Go 语言编写代码。一段时间后,我想出了解决方案,但我得到了这个错误:
r0 0x0 r1 0x0 r2 0x0 r3 0x0 r4 0x18fef62cb r5 0x16d28db00 r6 0x6e r7 0x0 r8 0x1e844b5b5be91e5a r9 0x1e844b5a36c1ee5a r10 0x200 r11 0xb r12 0x0 r13 0x1ff800 r14 0x7fb r15 0xd3c1205a r16 0x148 r17 0x202129928 r18 0x0 r19 0x6 r20 0x16d28f000 r21 0x1003 r22 0x16d28f0e0 r23 0x2 r24 0x0 r25 0x16d28ecc0 r26 0x1f9a37000 r27 0x828 r28 0x140001021c0 r29 0x16d28da70 lr 0x18ff3ac20 sp 0x16d28da50 pc 0x18ff02a60 fault 0x18ff02a60
错误消息表明您正在尝试在主线程之外初始化 NSWindow 实例,这在 macOS 应用程序中是不允许的。这是一个很大的问题,因为我无法在主线程中执行此操作,因为其余功能无法工作。
维护者和我进行了一次闲聊,我解释了一切。最终,他同意以当前的项目结构不可能实现...我没有完成它,并且没有 PR :c
开源社区非常出色,因为人们倾向于互相帮助。我只有一周的时间来完成,所以我向我的朋友西奥寻求帮助。他给我发了几个他开发的代码库,我决定对它们进行研究。
MatterMost 是一个开源平台,用于在整个软件开发生命周期中进行安全协作。它是一个非常受欢迎的平台,并且有大量的问题,对于用户和开发人员来说都有大量的文档。为这个项目做出贡献并不难。
这次我拍的是符合我现在技术水平的东西,我不拍脚。这是前面提到的最简单的问题。
该问题的目的是修复其中一个文件的 linter 错误。我建立了这个项目,并开始研究它。
首先,我必须运行 linter 并查看所有错误。我检查了发生问题的线路,并很快修复了它们。最终,开了一个PR。
我真的很喜欢使用 CLI 工具,因为这对我来说很有趣。对于第二个 PR,我找到了一个名为 lumen 的项目。 Lumen 是即时 AI Git 提交消息,来自 CLI 的 Git 更改摘要。我真的很喜欢参与这个项目!不幸的是,他们没有那么多问题,但我很幸运能够被分配。另外,这个工具是用 Rust 编写的,所以我必须刷新一下我的知识。
我发现了一个问题:为解释命令添加 STDIN 支持。
该工具有一个选项解释,可以通过以下方式调用:
lumen explain <sha>
此命令解释了有关某些提交的所有内容、更改的内容以及原因。示例:
非常有用的工具,不是吗?
我的实现应该允许向此命令添加功能:
echo "HEAD" | lumen explain -
因此,在我的示例 HEAD 中,它从 echo 获取 STDIN 值,并将 - 替换为该 HEAD 值。
我知道了如何实现它。创建条件来检查 if - 而不是 sha。
r0 0x0 r1 0x0 r2 0x0 r3 0x0 r4 0x18fef62cb r5 0x16d28db00 r6 0x6e r7 0x0 r8 0x1e844b5b5be91e5a r9 0x1e844b5a36c1ee5a r10 0x200 r11 0xb r12 0x0 r13 0x1ff800 r14 0x7fb r15 0xd3c1205a r16 0x148 r17 0x202129928 r18 0x0 r19 0x6 r20 0x16d28f000 r21 0x1003 r22 0x16d28f0e0 r23 0x2 r24 0x0 r25 0x16d28ecc0 r26 0x1f9a37000 r27 0x828 r28 0x140001021c0 r29 0x16d28da70 lr 0x18ff3ac20 sp 0x16d28da50 pc 0x18ff02a60 fault 0x18ff02a60
更改了5个文件后,我得到了结果:
现在有两个选项:
lumen explain <sha>
和
echo "HEAD" | lumen explain -
这两个选项都有效,我的实现添加了新功能,并保存了之前实现的功能!这是我的公关。
过去几周并不简单,但很有趣。我学习了新语言 Go。与开源社区联系,这帮助我找到了我贡献的存储库之一!
以上是开源开发太棒了!的详细内容。更多信息请关注PHP中文网其他相关文章!