DarwinKit 是一个专为 Go 编程语言开发的工具包,旨在使用原生 Apple API 构建 macOS 应用。这个工具包让开发者可以使用 Go 语言创建本地应用程序,而无需依赖 XCode 或 Objective-C 的深入编码知识。
与 Apple 框架的无缝集成:DarwinKit 能直接调用 Apple 提供的各种框架,这样开发者可以构建具有 macOS 原生功能的应用。
使用 Go 语言:开发者只需在安装了 XCode 和 Go 1.18 及以上版本的系统上运行,便可在一个 main.go 文件中编写程序。
示例代码快速体验:
package main import ( "github.com/progrium/darwinkit/objc" "github.com/progrium/darwinkit/macos" "github.com/progrium/darwinkit/macos/appkit" "github.com/progrium/darwinkit/macos/foundation" "github.com/progrium/darwinkit/macos/webkit" ) func main() { macos.RunApp(func(app appkit.Application, delegate *appkit.ApplicationDelegate) { app.SetActivationPolicy(appkit.ApplicationActivationPolicyRegular) app.ActivateIgnoringOtherApps(true) url := foundation.URL_URLWithString("https://github.com/sponsors/darwinkitdev") req := foundation.NewURLRequestWithURL(url) frame := foundation.Rect{Size: foundation.Size{1440, 900}} config := webkit.NewWebViewConfiguration() wv := webkit.NewWebViewWithFrameConfiguration(frame, config) wv.LoadRequest(req) w := appkit.NewWindowWithContentRectStyleMaskBackingDefer(frame, appkit.ClosableWindowMask|appkit.TitledWindowMask, appkit.BackingStoreBuffered, false) objc.Retain(&w) w.SetContentView(wv) w.MakeKeyAndOrderFront(w) w.Center() delegate.SetApplicationShouldTerminateAfterLastWindowClosed(func(appkit.Application) bool { return true }) }) }
通过简单的 go mod init helloworld,go get github.com/progrium/darwinkit@main 和 go run main.go 命令,便可以快速生成并运行一个 macOS 应用程序。
DarwinKit 非常适合于简单程序的开发,但由于上述注意事项,暂不推荐用于大型或复杂程序。
DarwinKit 提供了一系列的示例和应用程序,用户可通过支持项目来获取高质量的示例启动程序。现有的项目示例有 LargeType、ScanDrop、SnowScape、LiveTemp、MenuSpacer 和 ClipTrail 等。
DarwinKit 的核心是使用 cgo 和 libffi 库包裹的 Objective-C 运行时。这允许开发者与 Objective-C 对象和类进行交互,甚至不需要 Objective-C 本身的深入理解。
应用程序开发者通过将 Objective-C 的复杂调用封装成易于使用的 Go API,以便于便捷调用。
DarwinKit 受到 Mikkel Krautz 和 Dong Liu 的项目启发。它是一个开放项目,使用 MIT 许可发布。需要注意的是,DarwinKit 并未得到 Apple 官方的支持或附属其开发。