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:
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.
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!
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