我几年前开始使用 DarwinKit,因为 Go 没有与本机 Mac API 的绑定。我们慢慢地将项目转变为绑定和生成工具,以便有一天能够完全覆盖所有 Apple API。上周发布的 v0.5.0 是该项目迄今为止规模最大的:
这是一个使用 DarwinKit 在几行 Go 中构建本机 webview 窗口应用程序的快速示例:
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() { // runs macOS application event loop with a callback on success 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 }) }) }
在不到 40 行的时间内,我们制作了一个原生 Mac 应用程序,无需打开 XCode 或使用 Objective-C。我认为这可能是目前 Apple API 最好的绑定项目。甚至可能是在 Mac 上制作小型实用程序的最佳方式。很快甚至还有其他 Apple 设备。
DarwinKit 缺少一个重要的部分:没有与 Apple 框架函数 的绑定。幸运的是,大多数框架都是用 OOP 构建的,目前我们有很好的绑定。但有些框架,尤其是底层框架,大部分都是函数。虽然有一个涉及使用 CGO 的解决方法(DarwinKit 试图帮助您避免),但我们正在努力为每个框架函数生成本机 Go 函数绑定。
我们正在努力的另一件大事是让 DarwinKit 完全不使用 CGO!使用 purego,我们可以调用 Apple 框架,而无需涉及 CGO。这将缩短构建时间,生成更小的二进制文件,并允许在出于任何原因需要避免 CGO 的程序中使用 DarwinKit。
对于 iOS 和移动开发人员来说,我真的很想让它适用于 iOS。事实上,它已经应该了!但我们现在为 MacOS 生成绑定。如果有人想帮助将其引入 iOS,让人们可以使用 Go 制作 Apple 移动应用程序,请联系我们!
在那之前,请尝试使用我们目前拥有的内容构建一个应用程序。让我知道进展如何!
以上是如何使用 Go 构建简单的 Mac 应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!