To build a native macOS application using Go, ensure you have XCode and Go 1.18+ installed. DarwinKit allows you to interact with Apple frameworks like AppKit, Foundation, and WebKit directly from Go.
1. Create your project
Initialize a new Go module and fetch the DarwinKit dependency:
go mod init helloworld
go get github.com/progrium/darwinkit@main
2. Write your application
Create a main.go file. The following example demonstrates how to launch a macOS application event loop and display a WKWebView window:
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
})
})
}
3. Run or Build
Run the application directly:
go run main.go
Or build an executable:
go build
go mod init helloworld
go get github.com/progrium/darwinkit@main
go run main.go