«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я создаю простые приложения для Mac с помощью Go

Как я создаю простые приложения для Mac с помощью Go

Опубликовано 29 июля 2024 г.
Просматривать:592

Я начал использовать DarwinKit несколько лет назад, потому что не было привязок к собственным API-интерфейсам Mac для Go. Мы постепенно превратили проект в инструменты для привязок и генерации, чтобы когда-нибудь полностью охватить все API Apple. Выпуск версии 0.5.0 на прошлой неделе стал самым масштабным за всю историю проекта:

  • Привязки для 33 фреймворков с практически полным охватом:
    • 2353 занятий
    • 23 822 методов и свойств
    • 9,519 констант/перечислений
    • 543 структуры
  • Автоматическое преобразование и использование встроенных типов Go в API
  • Поддержка блочных аргументов как функций Go с правильно типизированными аргументами
  • Готовые реализации делегатов, на которых можно просто установить функции Go
  • Сопоставление 1-к-1 с символами Objective-C, но при этом идиоматично для Go
  • Документация для всех символов, включая ссылку на официальную документацию Apple по этому символу
  • Растущая коллекция высококачественных примеров стартовых приложений для спонсоров

Demo Screenshots

Вот краткий пример использования DarwinKit для создания собственного оконного приложения веб-просмотра за несколько строк 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
        })
    })
}

Менее чем за 40 строк мы создали нативное приложение для Mac, не открывая XCode и не используя Objective-C. Я думаю, что сейчас это может быть лучший проект привязок для API Apple. Возможно, даже лучший способ создавать небольшие утилиты на Mac. А вскоре и другие устройства Apple.

Будущее

В DarwinKit есть один большой недостающий элемент: нет привязок к функциям Apple framework. К счастью, большинство фреймворков построены с использованием ООП, и на данный момент у нас есть отличные привязки. Но некоторые фреймворки, особенно фреймворки нижнего уровня, в основном представляют собой функции. Хотя существует обходной путь, который предполагает использование CGO (которого DarwinKit пытается помочь вам избежать), мы работаем над созданием собственных привязок функций Go для каждой функции платформы.

Еще одна важная вещь, над которой мы работаем, — это заставить DarwinKit вообще не использовать CGO! Используя purego, мы можем вызывать фреймворки Apple без использования CGO. Это улучшит время сборки, уменьшит размер двоичных файлов и позволит использовать DarwinKit в программах, которым по какой-либо причине необходимо избегать CGO.

Что касается разработчиков iOS и мобильных устройств, я действительно хочу, чтобы это работало для iOS. На самом деле, это уже должно быть! Но мы пока генерируем привязки для MacOS. Если кто-то хочет помочь перенести это на iOS, чтобы люди могли создавать мобильные приложения Apple с помощью Go, свяжитесь с нами!

А пока попробуйте создать приложение, используя то, что у нас есть на данный момент. Дайте мне знать, как идут дела!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/progrium/how-i-build-simple-mac-apps-using-go-104j?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3