Comecei o DarwinKit há alguns anos porque não havia ligações para APIs nativas do Mac para Go. Aos poucos, transformamos o projeto em vinculações e ferramentas de geração para algum dia alcançar a cobertura completa de todas as APIs da Apple. O lançamento da v0.5.0 na semana passada é o maior que o projeto já viu:
Aqui está um exemplo rápido usando o DarwinKit para construir um aplicativo de janela webview nativo em algumas linhas 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 }) }) }
Em menos de 40 linhas criamos um aplicativo nativo para Mac sem abrir o XCode ou usar Objective-C. Acho que este pode ser agora o melhor projeto de vinculação existente para APIs da Apple. Possivelmente até a melhor maneira de fazer pequenos utilitários no Mac. E em breve até outros dispositivos Apple.
Há uma grande peça que falta no DarwinKit: não há ligações às funções da estrutura da Apple. Felizmente, a maioria dos frameworks são construídos com OOP, para os quais temos ótimas ligações por enquanto. Mas algumas estruturas, especialmente estruturas de nível inferior, são principalmente funções. Embora exista uma solução alternativa que envolve o uso de CGO (que o DarwinKit está tentando ajudar você a evitar), estamos trabalhando na geração de vinculações de funções Go nativas para cada função da estrutura.
A outra grande coisa em que estamos trabalhando é fazer com que o DarwinKit não use CGO! Usando o purego, podemos acessar estruturas da Apple sem envolver o CGO. Isso melhorará o tempo de construção, criará binários menores e permitirá que o DarwinKit seja usado em programas que precisam evitar CGO por qualquer motivo.
Para iOS e desenvolvedores móveis, eu realmente quero que isso funcione para iOS. Na verdade, já deveria! Mas geramos ligações para MacOS por enquanto. Se alguém quiser ajudar a trazer isso para o iOS para permitir que as pessoas criem aplicativos móveis da Apple com Go, entre em contato!
Até então, tente criar um aplicativo com o que temos até agora. Deixe-me saber como foi!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3