"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go를 사용하여 간단한 Mac 앱을 구축하는 방법

Go를 사용하여 간단한 Mac 앱을 구축하는 방법

2024-07-29에 게시됨
검색:380

저는 몇 년 전에 Go용 기본 Mac API에 대한 바인딩이 없었기 때문에 DarwinKit을 시작했습니다. 우리는 언젠가는 모든 Apple API를 완전히 포괄할 수 있도록 프로젝트를 바인딩 및 생성 도구로 천천히 전환해 왔습니다. 지난주 v0.5.0 릴리스는 이 프로젝트에서 가장 큰 규모였습니다.

  • 거의 완전한 적용 범위를 갖춘 33개 프레임워크에 대한 바인딩:
    • 2,353 수업
    • 23,822 메서드 및 속성
    • 9,519 상수/열거형
    • 543 구조체
  • API에서 기본 Go 내장 유형의 자동 변환 및 사용
  • 올바른 유형의 인수가 있는 Go 함수로 블록 인수 지원
  • 미리 만들어진 위임 구현을 통해 Go 기능을 간단히 설정할 수 있습니다.
  • Go와 관용적이면서도 Objective-C 기호에 대한 1대1 매핑
  • 해당 기호에 대한 공식 Apple 문서 링크를 포함한 모든 기호에 대한 문서
  • 스폰서를 위한 고품질 예제 시작 앱 컬렉션 증가

Demo Screenshots

다음은 DarwinKit을 사용하여 Go 몇 줄로 기본 WebView 창 애플리케이션을 구축하는 간단한 예입니다.

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
        })
    })
}

XCode를 열거나 Objective-C를 사용하지 않고 40줄 미만으로 기본 Mac 앱을 만들었습니다. 나는 이것이 현재 존재하는 Apple API에 대한 최고의 바인딩 프로젝트가 될 것이라고 생각합니다. 아마도 Mac에서 작은 유틸리티를 만드는 가장 좋은 방법일 수도 있습니다. 그리고 곧 다른 Apple 기기도 출시될 예정입니다.

미래

DarwinKit에는 한 가지 큰 누락된 부분이 있습니다. 바로 Apple 프레임워크 기능에 대한 바인딩이 없다는 것입니다. 운 좋게도 대부분의 프레임워크는 OOP로 구축되었으며 현재로서는 훌륭한 바인딩이 있습니다. 그러나 일부 프레임워크, 특히 하위 수준 프레임워크는 대부분 함수입니다. CGO 사용과 관련된 해결 방법(DarwinKit에서는 이를 방지하기 위해 노력 중)이 있지만 우리는 모든 프레임워크 기능에 대한 기본 Go 기능 바인딩을 생성하기 위해 노력하고 있습니다.

우리가 노력하고 있는 또 다른 중요한 점은 DarwinKit에서 CGO를 전혀 사용하지 않도록 만드는 것입니다! purego를 사용하면 CGO를 사용하지 않고도 Apple 프레임워크를 호출할 수 있습니다. 이를 통해 빌드 시간이 향상되고, 더 작은 바이너리가 만들어지며, 어떤 이유로든 CGO를 피해야 하는 프로그램에서 DarwinKit을 사용할 수 있습니다.

iOS 및 모바일 개발자를 위해 저는 이 기능을 iOS에서 작동시키고 싶습니다. 사실, 이미 그래야 합니다! 하지만 지금은 MacOS용 바인딩을 생성합니다. 사람들이 Go를 사용하여 Apple 모바일 앱을 만들 수 있도록 이 기능을 iOS로 가져오는 데 도움을 주고 싶은 사람이 있으면 연락해 주세요!

그때까지는 지금까지 얻은 내용을 바탕으로 앱을 만들어 보세요. 어떻게 진행되는지 알려주세요!

릴리스 선언문 이 글은 https://dev.to/progrium/how-i-build-simple-mac-apps-using-go-104j?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3