我幾年前開始使用 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 行動應用程序,請與我們聯繫!
在那之前,請嘗試使用我們目前擁有的內容建立一個應用程式。讓我知道事情的後續!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3