Maison >développement back-end >Golang >Comment créer des applications Mac simples à l'aide de Go

Comment créer des applications Mac simples à l'aide de Go

WBOY
WBOYoriginal
2024-07-17 21:12:01874parcourir

J'ai lancé DarwinKit il y a quelques années car il n'y avait aucune liaison avec les API Mac natives pour Go. Nous avons lentement transformé le projet en outils de liaison et de génération pour atteindre un jour une couverture complète de toutes les API Apple. La sortie de la v0.5.0 la semaine dernière est la plus importante que le projet ait connue :

  • Fixations pour 33 frameworks avec une couverture quasi complète :
    • 2 353 cours
    • 23 822 méthodes et propriétés
    • 9 519 constantes/énumérations
    • 543 structures
  • Conversion automatique et utilisation des types natifs Go intégrés dans les API
  • Prise en charge des arguments de bloc en tant que fonctions Go avec des arguments correctement saisis
  • Implémentations de délégués prédéfinies sur lesquelles vous pouvez simplement définir les fonctions Go
  • Mappage 1 à 1 vers les symboles Objective-C tout en restant idiomatique vers Go
  • Documentation pour tous les symboles, y compris un lien vers la documentation Apple officielle sur ce symbole
  • Collection croissante d'exemples d'applications de démarrage de haute qualité pour les sponsors

Demo Screenshots

Voici un exemple rapide utilisant DarwinKit pour créer une application native de fenêtre d'affichage Web en quelques lignes 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 moins de 40 lignes, nous avons créé une application Mac native sans ouvrir XCode ni utiliser Objective-C. Je pense que cela pourrait désormais être le meilleur projet de liaison existant pour les API Apple. Peut-être même le meilleur moyen de créer de petits utilitaires sur Mac. Et bientôt même d'autres appareils Apple.

L'avenir

Il manque une grande pièce à DarwinKit : il n'y a aucune liaison avec les fonctions du framework Apple. Heureusement, la plupart des frameworks sont construits avec la POO, pour laquelle nous disposons d'excellentes liaisons pour le moment. Mais certains frameworks, notamment les frameworks de niveau inférieur, sont pour la plupart des fonctions. Bien qu'il existe une solution de contournement qui implique l'utilisation de CGO (que DarwinKit essaie de vous aider à éviter), nous travaillons sur la génération de liaisons de fonctions Go natives pour chaque fonction du framework.

L'autre grand objectif sur lequel nous travaillons est de faire en sorte que DarwinKit n'utilise pas du tout CGO ! En utilisant purego, nous pouvons faire appel aux frameworks Apple sans impliquer CGO. Cela améliorera le temps de construction, créera des binaires plus petits et permettra à DarwinKit d'être utilisé dans des programmes qui doivent éviter CGO pour une raison quelconque.

Pour les développeurs iOS et mobiles, je veux vraiment que cela fonctionne pour iOS. En fait, cela devrait déjà être le cas ! Mais nous générons des liaisons pour MacOS pour l'instant. Si quelqu'un souhaite nous aider à intégrer cette fonctionnalité sur iOS pour permettre aux utilisateurs de créer des applications mobiles Apple avec Go, n'hésitez pas à nous contacter !

En attendant, essayez de créer une application avec ce que nous avons jusqu'à présent. Faites-moi savoir comment ça se passe !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn