"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo creo aplicaciones simples para Mac usando Go

Cómo creo aplicaciones simples para Mac usando Go

Publicado el 2024-07-29
Navegar:719

Comencé DarwinKit hace unos años porque no había enlaces a las API nativas de Mac para Go. Poco a poco hemos convertido el proyecto en enlaces y herramientas de generación para algún día alcanzar una cobertura total de todas las API de Apple. El lanzamiento de la versión 0.5.0 la semana pasada es el más grande que haya visto el proyecto:

  • Enlaces para 33 marcos con una cobertura casi completa:
    • 2,353 clases
    • 23,822 métodos y propiedades
    • 9,519 constantes/enumeraciones
    • 543 estructuras
  • Conversión automática y uso de tipos integrados nativos de Go en API
  • Soporte para argumentos de bloque como funciones de Go con argumentos escritos correctamente
  • Implementaciones de delegados prediseñadas en las que simplemente puede configurar las funciones de Go
  • Asignación 1 a 1 a símbolos Objective-C sin dejar de ser idiomático para Go
  • Documentación para todos los símbolos, incluido un enlace a los documentos oficiales de Apple sobre ese símbolo
  • Colección creciente de aplicaciones iniciales de ejemplo de alta calidad para patrocinadores

Demo Screenshots

Aquí hay un ejemplo rápido que utiliza DarwinKit para crear una aplicación de ventana de vista web nativa en unas pocas líneas de 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
        })
    })
}

En menos de 40 líneas creamos una aplicación nativa para Mac sin abrir XCode ni usar Objective-C. Creo que este podría ser ahora el mejor proyecto de enlaces que existe para las API de Apple. Posiblemente incluso la mejor manera de crear pequeñas utilidades en Mac. Y pronto también otros dispositivos Apple.

El futuro

Falta una gran pieza en DarwinKit: no hay enlaces a las funciones del framework de Apple . Afortunadamente, la mayoría de los marcos están construidos con programación orientada a objetos, lo que por ahora tenemos excelentes vinculaciones. Pero algunos marcos, especialmente los de nivel inferior, son en su mayoría funciones. Si bien existe una solución alternativa que implica el uso de CGO (que DarwinKit intenta ayudarlo a evitar), estamos trabajando para generar enlaces de funciones nativas de Go para cada función del marco.

¡La otra gran cosa en la que estamos trabajando es hacer que DarwinKit no use CGO en absoluto! Usando purego, podemos acceder a los marcos de Apple sin involucrar a CGO. Esto mejorará el tiempo de compilación, creará archivos binarios más pequeños y permitirá que DarwinKit se use en programas que necesitan evitar CGO por cualquier motivo.

Para iOS y desarrolladores móviles, realmente quiero que esto funcione para iOS. De hecho, ¡ya debería hacerlo! Pero por ahora generamos enlaces para MacOS. Si alguien quiere ayudar a llevar esto a iOS para permitir que las personas creen aplicaciones móviles de Apple con Go, ¡comuníquese con nosotros!

Hasta entonces, intenta crear una aplicación con lo que tenemos hasta ahora. ¡Déjame saber como va!

Declaración de liberación Este artículo se reproduce en: https://dev.to/progrium/how-i-build-simple-mac-apps-using-go-104j?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3