macdriver 的初衷是為了在 Go 語言中更方便地調用 Mac 系統的 APIs,尤其是用于構建圖形用戶界面(GUI)的 Cocoa 框架。盡管目前很多開發者傾向于使用基于網絡技術的用戶界面(例如 Electron),但在某些場景下,仍然需要直接調用 Mac 的系統 API 來實現更高效的原生功能。
例如,如果你想在同一個程序中實現一個類似 Pomodoro 計時器的小型菜單應用程序,這種需求并不罕見。然而,現有的解決方案通常依賴于獨立的跨平臺 Go 庫(如 systray),但這些庫往往存在以下問題:
因此,為了解決這些痛點,我決定開發一個更廣泛、更通用的解決方案,這就是 macdriver 的誕生背景。
從技術上講,Objective-C 的運行時實際上是一個名為 libobjc 的 C 庫。因此,理論上我們可以通過 Go 的 cgo 功能來調用 libobjc,從而在 Go 中像使用其他 C 庫一樣操作 Objective-C 對象。
在開發過程中,我重新啟用了一個名為 objcbridge 的廢棄包,并修復了其中的 varidic 包問題。隨后,我基于這些基礎,為一些常見的 Mac APIs 開發了原生的 Go 包裝器,最終形成了 macdriver。
macdriver 的出現不僅讓我們能夠快速構建原生的 Mac 二進制文件,還為開發者提供了更廣泛的可能性。例如:
macdriver 的應用場景不僅限于 MacOS 應用程序的開發。以下是一些可能的擴展方向:
如果你對這些方向感興趣,不妨嘗試探索 macdriver 的更多可能性。
macdriver 的開發不僅解決了現有 Go 庫在調用 Mac 系統 API 時的局限性,還為開發者提供了一個高效、靈活的工具來構建原生 Mac 應用程序。通過 macdriver,你可以輕松調用 Mac 的核心功能,快速構建高性能的應用程序,而無需依賴 Xcode 等傳統工具。
如果你對 macdriver 或其擴展應用感興趣,歡迎加入探索的行列,共同挖掘更多可能性!
原文鏈接: https://progrium.medium.com/use-mac-apis-and-build-mac-apps-with-go-744e86016132