>  기사  >  백엔드 개발  >  Go를 사용하여 간단한 Mac 앱을 구축하는 방법

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

WBOY
WBOY원래의
2024-07-17 21:12:01780검색

저는 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로 가져오는 데 도움을 주고 싶으신 분은 연락주세요!

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

위 내용은 Go를 사용하여 간단한 Mac 앱을 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.