使用Mac APIs并使用Go语言构建Mac应用程序 | 作者:Jeff Lindsay - Medium
使用 Mac APIs 并使用 Go 语言构建 Mac 应用程序
对于那些关注我上一篇关于 Go 语言中大型类型的文章的读者,你们可能已经接触到了 macdriver。macdriver 是一个专注于使用 Go 语言调用 Mac 系统 APIs(如 Cocoa)来构建 GUI 应用程序的工具,而其中的 largetype 程序正是 macdriver 的一个示例项目。
macdriver 的动机与背景
macdriver 的初衷是为了在 Go 语言中更方便地调用 Mac 系统的 APIs,尤其是用于构建图形用户界面(GUI)的 Cocoa 框架。尽管目前很多开发者倾向于使用基于网络技术的用户界面(例如 Electron),但在某些场景下,仍然需要直接调用 Mac 的系统 API 来实现更高效的原生功能。
例如,如果你想在同一个程序中实现一个类似 Pomodoro 计时器的小型菜单应用程序,这种需求并不罕见。然而,现有的解决方案通常依赖于独立的跨平台 Go 库(如 systray),但这些库往往存在以下问题:
- API 功能不够完整。
- 无法与其他库组合使用。例如,systray 和 webview 库都假定拥有主 Cocoa 线程,导致它们无法在同一程序中共存。
因此,为了解决这些痛点,我决定开发一个更广泛、更通用的解决方案,这就是 macdriver 的诞生背景。
使用 Objective-C 运行时的技术实现
从技术上讲,Objective-C 的运行时实际上是一个名为 libobjc 的 C 库。因此,理论上我们可以通过 Go 的 cgo 功能来调用 libobjc,从而在 Go 中像使用其他 C 库一样操作 Objective-C 对象。
在开发过程中,我重新启用了一个名为 objcbridge 的废弃包,并修复了其中的 varidic 包问题。随后,我基于这些基础,为一些常见的 Mac APIs 开发了原生的 Go 包装器,最终形成了 macdriver。
macdriver 的出现不仅让我们能够快速构建原生的 Mac 二进制文件,还为开发者提供了更广泛的可能性。例如:
- 使用 Core ML(核心机器学习)API,与 Apple M1 芯片的神经引擎协作。
- 构建无需依赖 Xcode 的 Mac 应用程序,只需通过 Go 的构建工具链即可完成。
macdriver 的潜在应用场景
macdriver 的应用场景不仅限于 MacOS 应用程序的开发。以下是一些可能的扩展方向:
- Apple Watch 应用程序:虽然目前尚未尝试,但理论上 macdriver 也可以用于开发 Apple Watch 应用。早期的桥接包已经对 iOS 进行了概念验证,因此 Apple Watch 应用的开发也有可能实现。
- Apple TV 应用程序:类似于 Apple Watch,macdriver 也可能支持 Apple TV 的开发。
如果你对这些方向感兴趣,不妨尝试探索 macdriver 的更多可能性。
总结
macdriver 的开发不仅解决了现有 Go 库在调用 Mac 系统 API 时的局限性,还为开发者提供了一个高效、灵活的工具来构建原生 Mac 应用程序。通过 macdriver,你可以轻松调用 Mac 的核心功能,快速构建高性能的应用程序,而无需依赖 Xcode 等传统工具。
如果你对 macdriver 或其扩展应用感兴趣,欢迎加入探索的行列,共同挖掘更多可能性!
原文链接: https://progrium.medium.com/use-mac-apis-and-build-mac-apps-with-go-744e86016132
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- API测试:初学者终极指南 – Apidog
- API Mocking:你需要了解的一切 – Apidog
- 带有Logo和设计功能的二维码API:揭示8大应用场景
- 如何构建用于LLM微调的数据集 – MonsterAPI博客
- 什么是RAG API?它是如何工作的?- Cody
- 2025大学生暑假兼职新风口:从送外卖到做AI副业,你还在靠体力赚零花钱吗?
- 如何获取Microsoft API Key 密钥实现bing搜索分步指南
- Google Pay UPI 注册与集成指南
- 香港支付宝可以绑定大陆银行卡吗?详解使用方法与步骤
- New API架构:探索现代软件开发的新趋势
- 什么是 Wandb
- 在 Golang 中实现 JWT 令牌认证