簡介
Mac App 開發傳統上依賴 Swift 和 Objective-C 等程式語言。然而,Go 的效率和靈活性使其成為創建健壯而簡單的 Mac 應用程式的絕佳選擇。在本教程中,我們將逐步指導您使用 Go 建置、測試和部署您的第一個 Mac 應用程序,從設定開發環境開始。
為什麼要使用 Go 進行 Mac 應用程式開發?
Go,也稱為 Golang,是由 Google 設計的靜態類型編譯語言。它因其簡單性、性能和高效的並發處理而受到歡迎。以下是您可能考慮使用 Go 進行 Mac 應用程式開發的原因:
簡單:Go 的語法簡單易學,是各級開發人員的絕佳選擇。
效能:作為一種編譯語言,Go 快速且高效,這對於創建響應式桌面應用程式至關重要。
跨平台功能:雖然本指南重點介紹 macOS,但 Go 的跨平台性質意味著您可以輕鬆地將應用程式調整為其他作業系統。
並發:Go 內建了對並發程式設計的支持,讓您可以建立可以同時處理多個任務而不會減慢速度的應用程式。
先決條件
在深入研究程式碼之前,請確保您已安裝以下工具:
Go:從 Go 官方網站安裝最新版本。
Xcode 命令列工具:透過在終端機中執行 xcode-select --install 來安裝這些工具。
Gio:Gio 是一個用 Go 編寫便攜式圖形使用者介面的函式庫。它簡化了建立 GUI 的過程,非常適合 Mac 應用程式開發。您可以使用 go get -u gioui.org/cmd/gogio 安裝 Gio。
第 1 步:設定您的 Go 環境
首先,你需要正確設定你的Go環境:
安裝Go:從官方網站下載並安裝Go。請按照適合您的作業系統的安裝說明進行操作。
設定您的工作空間:Go 使用工作空間來組織您的專案。預設情況下,工作空間位於 ~/go,但您可以透過設定 GOPATH 環境變數來變更它。
mkdir -p ~/go/src/github.com/yourusername export GOPATH=~/go
安裝 Gio:Gio 是一個用於為 Android、Linux 和 macOS 建立本機應用程式的工具包。透過運行安裝 Gio:
go get -u gioui.org/cmd/gogio
第 2 步:建立基本的 Mac 應用程式
讓我們使用 Gio 創建一個簡單的「Hello World」Mac 應用程式。
初始化您的專案:為您的專案建立一個新目錄並導航到它。
mkdir HelloWorldMacApp cd HelloWorldMacApp
建立主 Go 檔案:建立一個名為 main.go 的檔案並在您喜歡的文字編輯器中開啟它。
touch main.go
編寫程式碼:首先編寫一個基本的 Go 程式來初始化一個視窗並顯示「Hello World」。
package main import ( "gioui.org/app" "gioui.org/io/system" "gioui.org/layout" "gioui.org/op" "gioui.org/widget/material" "gioui.org/font/gofont" ) func main() { go func() { // Create a new window. w := app.NewWindow() th := material.NewTheme(gofont.Collection()) for e := range w.Events() { switch e := e.(type) { case system.FrameEvent: gtx := layout.NewContext(&op.Ops{}, e) layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions { return material.H1(th, "Hello, World!").Layout(gtx) }) e.Frame(gtx.Ops) case system.DestroyEvent: return } } }() app.Main() }
建置並運行您的應用程式:要建置並運行您的應用程序,請使用以下命令:
go run main.go
這應該會開啟一個新窗口,顯示「Hello, World!」。
第 3 步:使用按鈕增強您的應用程式
現在我們已經運行了一個基本的應用程序,讓我們通過添加一個單擊時顯示消息的按鈕來增強它。
修改 main.go:更新 main.go 檔案以包含按鈕。
package main import ( "gioui.org/app" "gioui.org/io/system" "gioui.org/layout" "gioui.org/op" "gioui.org/widget" "gioui.org/widget/material" "gioui.org/font/gofont" ) func main() { go func() { // Create a new window. w := app.NewWindow() th := material.NewTheme(gofont.Collection()) var button widget.Clickable for e := range w.Events() { switch e := e.(type) { case system.FrameEvent: gtx := layout.NewContext(&op.Ops{}, e) layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, layout.Rigid(material.H1(th, "Hello, World!").Layout), layout.Rigid(material.Button(th, &button, "Click Me").Layout), ) }) if button.Clicked() { println("Button clicked!") } e.Frame(gtx.Ops) case system.DestroyEvent: return } } }() app.Main() }
建置並執行您的增強型應用程式:使用 go run main.go 再次執行應用程式。這次,您應該會在「Hello, World!」下方看到一個「Click Me」按鈕。文字.點擊按鈕將列印“Button clicked!”到控制台。
第 4 步:增加更多功能
讓我們為我們的應用添加更多功能,例如文字輸入和下拉式選單。
新增文字輸入:修改 main.go 以包含文字輸入欄位。
package main import ( "gioui.org/app" "gioui.org/io/system" "gioui.org/layout" "gioui.org/op" "gioui.org/widget" "gioui.org/widget/material" "gioui.org/font/gofont" ) func main() { go func() { // Create a new window. w := app.NewWindow() th := material.NewTheme(gofont.Collection()) var button widget.Clickable var textField widget.Editor for e := range w.Events() { switch e := e.(type) { case system.FrameEvent: gtx := layout.NewContext(&op.Ops{}, e) layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, layout.Rigid(material.H1(th, "Hello, World!").Layout), layout.Rigid(material.Editor(th, &textField, "Enter text...").Layout), layout.Rigid(material.Button(th, &button, "Click Me").Layout), ) }) if button.Clicked() { println("Button clicked with text:", textField.Text()) } e.Frame(gtx.Ops) case system.DestroyEvent: return } } }() app.Main() }
新增下拉式選單:為您的應用程式新增下拉式選單。
package main import ( "gioui.org/app" "gioui.org/io/system" "gioui.org/layout" "gioui.org/op" "gioui.org/widget" "gioui.org/widget/material" "gioui.org/font/gofont" ) func main() { go func() { // Create a new window. w := app.NewWindow() th := material.NewTheme(gofont.Collection()) var button widget.Clickable var textField widget.Editor var list widget.List list.Axis = layout.Vertical items := []string{"Item 1", "Item 2", "Item 3"} for e := range w.Events() { switch e := e.(type) { case system.FrameEvent: gtx := layout.NewContext(&op.Ops{}, e) layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, layout.Rigid(material.H1(th, "Hello, World!").Layout), layout.Rigid(material.Editor(th, &textField, "Enter text...").Layout), layout.Rigid(material.Button(th, &button, "Click Me").Layout), layout.Rigid(material.List(th, &list).Layout(gtx, len(items), func(gtx layout.Context, index int) layout.Dimensions { return material.Button(th, new(widget.Clickable), items[index]).Layout(gtx) })), ) }) if button.Clicked() { println("Button clicked with text:", textField.Text()) } e.Frame(gtx.Ops) case system.DestroyEvent: return } } }() app.Main() }
運行您的應用程式:使用 go run main.go 再次運行您的應用程序,並查看正在運行的新功能。
第 5 步:建立獨立的 Mac 應用程式
應用程式準備就緒後,您將希望將其建置為獨立應用程式。請依照以下步驟操作:
建立您的應用程式:使用 gogio 為 macOS 建立您的應用程式。
gogio -target darwin .
此指令將產生一個 .app 捆綁包,您可以直接在 macOS 上執行。
測試您的應用程式:開啟產生的 .app 套件來測試您的應用程式。確保所有功能按預期工作。
第6步:包裝與分發
要分發您的應用程序,您可能需要針對 macOS 對其進行簽名和公證。
對您的應用程式進行簽署:需要進行程式碼簽署才能在 Mac App Store 之外分發您的應用程式。使用協同設計工具對您的應用程式進行簽署。
codesign --deep --force --verify --verbose --sign “開發者 ID 應用程式:您的名字”HelloWorldMacApp.app
公證您的應用程式:為確保 macOS 允許您的應用程式在沒有警告的情況下運行,請使用 xcrun altool 對其進行公證。
xcrun altool --notarize-app --primary-bundle-id "com.yourname.helloworldmacapp" --使用者名稱"yourappleid@example.com" --password "應用程式特定密碼" --file HelloWorldMacApp.zip
分發您的應用程式:經過公證後,您可以透過網站、電子郵件或其他方式分發您的應用程式。
結論
恭喜!您已經使用 Go 成功創建了您的第一個 Mac 應用程式。本指南涵蓋了設定開發環境、建立簡單應用程式、添加功能和分發應用程式的基礎知識。憑藉 Go 的簡單性和效能,您完全有能力開發強大、高效的 Mac 應用程式。繼續探索 Gio 和 Go 以增強您的技能並創建更複雜的應用程式。
參考文獻
Go 程式語言
Go 的 Gio 工具包
Xcode 命令列工具
蘋果開發者文件
這篇部落格文章提供了使用 Go 建立第一個 Mac 應用程式的全面指南,並提供大量程式碼範例來幫助您理解每個步驟。透過遵循本指南,您可以快速開始 Mac 應用程式開發並探索 Go 和 Gio 的強大功能。
以上是如何使用 Go 創建您的第一個 Mac 應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!