首页  >  文章  >  后端开发  >  如何使用 Go 构建简单的 Mac 应用程序

如何使用 Go 构建简单的 Mac 应用程序

WBOY
WBOY原创
2024-07-17 21:12:01781浏览

我几年前开始使用 DarwinKit,因为 Go 没有与本机 Mac API 的绑定。我们慢慢地将项目转变为绑定和生成工具,以便有一天能够完全覆盖所有 Apple API。上周发布的 v0.5.0 是该项目迄今为止规模最大的:

  • 33 个框架的绑定,几乎完全覆盖:
    • 2,353
    • 23,822 方法和属性
    • 9,519 常量/枚举
    • 543 结构
  • API 中 Go 原生内置类型的自动转换和使用
  • 支持块参数作为具有正确类型参数的 Go 函数
  • 预制委托实现,您可以简单地设置 Go 函数
  • 与 Objective-C 符号的一对一映射,同时仍符合 Go 的习惯
  • 所有符号的文档,包括有关该符号的 Apple 官方文档的链接
  • 为赞助商提供越来越多的高质量示例入门应用程序

Demo Screenshots

这是一个使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn