Ich habe DarwinKit vor ein paar Jahren gestartet, weil es für Go keine Bindungen an native Mac-APIs gab. Wir haben das Projekt langsam in Bindungen und Generierungstools umgewandelt, um eines Tages eine vollständige Abdeckung aller Apple-APIs zu erreichen. Die Veröffentlichung von v0.5.0 letzte Woche ist die umfangreichste, die das Projekt je gesehen hat:
Hier ist ein kurzes Beispiel für die Verwendung von DarwinKit zum Erstellen einer nativen Webview-Fensteranwendung in wenigen Zeilen von 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() { // 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 }) }) }
In weniger als 40 Zeilen haben wir eine native Mac-App erstellt, ohne XCode zu öffnen oder Objective-C zu verwenden. Ich denke, dass dies jetzt möglicherweise das beste Bindungsprojekt für Apple APIs ist, das es gibt. Möglicherweise sogar die beste Möglichkeit, kleine Dienstprogramme auf dem Mac zu erstellen. Und bald auch andere Apple-Geräte.
Es gibt ein großes fehlendes Teil von DarwinKit: Es gibt keine Bindungen an die Funktionen des Apple-Frameworks. Glücklicherweise werden die meisten Frameworks mit OOP erstellt, für das wir derzeit großartige Bindungen haben. Einige Frameworks, insbesondere Frameworks auf niedrigerer Ebene, sind jedoch hauptsächlich Funktionen. Es gibt zwar eine Problemumgehung, die die Verwendung von CGO beinhaltet (was DarwinKit zu vermeiden versucht), aber wir arbeiten daran, native Go-Funktionsbindungen für jede Framework-Funktion zu generieren.
Das andere große Ziel, auf das wir hinarbeiten, ist, dass DarwinKit überhaupt kein CGO mehr verwendet! Mit purego können wir Apple-Frameworks aufrufen, ohne CGO einzubeziehen. Dadurch wird die Erstellungszeit verkürzt, kleinere Binärdateien erstellt und die Verwendung von DarwinKit in Programmen ermöglicht, die aus irgendeinem Grund CGO vermeiden müssen.
An alle iOS- und Mobilentwickler da draußen: Ich möchte, dass dies unbedingt für iOS funktioniert. Tatsächlich sollte es das schon sein! Aber wir generieren vorerst Bindungen für MacOS. Wenn jemand dabei helfen möchte, dies auf iOS zu bringen, damit die Leute mobile Apple-Apps mit Go erstellen können, wenden Sie sich bitte an uns!
Bis dahin versuchen Sie, eine App mit dem zu erstellen, was wir bisher haben. Lass mich wissen, wie es läuft!
Das obige ist der detaillierte Inhalt vonWie ich mit Go einfache Mac-Apps erstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!