首頁  >  文章  >  後端開發  >  如何使用 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