Heim  >  Artikel  >  Backend-Entwicklung  >  Wie ich mit Go einfache Mac-Apps erstelle

Wie ich mit Go einfache Mac-Apps erstelle

WBOY
WBOYOriginal
2024-07-17 21:12:01781Durchsuche

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:

  • Anbindungen für 33 Frameworks mit nahezu vollständiger Abdeckung:
    • 2.353 Kurse
    • 23.822 Methoden und Eigenschaften
    • 9.519Konstanten/Aufzählungen
    • 543 Strukturen
  • Automatische Konvertierung und Verwendung nativer Go-integrierter Typen in APIs
  • Unterstützung für Blockargumente, da Go mit richtig typisierten Argumenten funktioniert
  • Vorgefertigte Delegate-Implementierungen, auf denen Sie einfach Go-Funktionen festlegen können
  • 1-zu-1-Zuordnung zu Objective-C-Symbolen und dennoch idiomatisch für Go
  • Dokumentation für alle Symbole, einschließlich eines Links zu offiziellen Apple-Dokumenten zu diesem Symbol
  • Wachsende Sammlung hochwertiger Beispiel-Starter-Apps für Sponsoren

Demo Screenshots

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.

Die Zukunft

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn