"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como crio aplicativos simples para Mac usando Go

Como crio aplicativos simples para Mac usando Go

Publicado em 2024-07-29
Navegar:808

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:

  • Bindings para 33 frameworks com cobertura quase completa:
    • 2.353 turmas
    • 23.822 métodos e propriedades
    • 9.519 constantes/enums
    • 543 estruturas
  • Conversão automática e uso de tipos nativos Go integrados em APIs
  • Suporte para argumentos de bloco como funções Go com argumentos digitados corretamente
  • Implementações de delegação pré-fabricadas, você pode simplesmente ativar as funções Go
  • Mapeamento 1 para 1 para símbolos Objective-C enquanto ainda idiomático para Go
  • Documentação para todos os símbolos, incluindo um link para documentos oficiais da Apple sobre esse símbolo
  • Crescente coleção de exemplos de aplicativos iniciais de alta qualidade para patrocinadores

Demo Screenshots

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.

O futuro

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!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/progrium/how-i-build-simple-mac-apps-using-go-104j?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

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