」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 Go 建立簡單的 Mac 應用程式

如何使用 Go 建立簡單的 Mac 應用程式

發佈於2024-07-29
瀏覽:347

我幾年前開始使用 DarwinKit,因為 Go 沒有與本機 Mac API 的綁定。我們慢慢地將專案轉變為綁定和生成工具,以便有一天能夠完全覆蓋所有 Apple API。上週發布的 v0.5.0 是該計畫迄今為止規模最大的:

  • 33 個框架的綁定,幾乎完全覆蓋:
    • 2,353 課程
    • 23,822方法與屬性
    • 9,519 常數/枚舉
    • 543 結構體
  • API 中 Go 原生內建類型的自動轉換與使用
  • 支援區塊參數作為具有正確類型參數的 Go 函數
  • 預製委託實現,您可以簡單地在
  • 上設定 Go 函數
  • 到 Objective-C 符號的一對一映射,同時仍是 Go 的慣用語
  • 所有符號的文檔,包括有關該符號的 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
        })
    })
}

在不到 40 行的時間內,我們製作了一個原生 Mac 應用程序,無需打開 XCode 或使用 Objective-C。我認為這可能是目前 Apple API 最好的綁定項目。甚至可能是在 Mac 上製作小型實用程式的最佳方式。很快甚至還有其他 Apple 裝置。

未來

DarwinKit 缺少一大塊:沒有與 Apple 框架 函數 的綁定。幸運的是,大多數框架都是用 OOP 建造的,目前我們有很好的綁定。但有些框架,尤其是底層框架,大部分都是函數。雖然有一個涉及使用 CGO 的解決方法(DarwinKit 試圖幫助您避免),但我們正在努力為每個框架函數生成本機 Go 函數綁定。

我們正在努力的另一件大事是讓 DarwinKit 完全不使用 CGO!使用 purego,我們可以呼叫 Apple 框架,而無需涉及 CGO。這將縮短建置時間,產生更小的二進位文件,並允許在出於任何原因需要避免 CGO 的程式中使用 DarwinKit。

對於 iOS 和行動開發人員來說,我真的很想讓它適用於 iOS。事實上,它已經應該了!但我們現在為 MacOS 產生綁定。如果有人想幫助將其引入 iOS,讓人們可以使用 Go 製作 Apple 行動應用程序,請與我們聯繫!

在那之前,請嘗試使用我們目前擁有的內容建立一個應用程式。讓我知道事情的後續!

版本聲明 本文轉載於:https://dev.to/progrium/how-i-build-simple-mac-apps-using-go-104j?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Next.js - 概述
    Next.js - 概述
    本文作為初學者友好的指南和使用 Next.js 的步驟。 Next.js 是一個用於建立 Web 應用程式的靈活框架。相反,它是一個建立在 Node.js 之上的 React 框架。 設定您的 Next.js 專案 要啟動新的 Next.js 項目,您需要在電腦上安裝 Node.js。 安裝 ...
    程式設計 發佈於2024-11-02
  • 如何在程式碼中使用 Unsplash 圖片
    如何在程式碼中使用 Unsplash 圖片
    身為從事新 SaaS 專案的開發人員,我需要直接透過 URL 連結一些 Unsplash 圖片。 最初,我看到一篇推薦使用 https://source.unsplash.com/ API 的文章(連結)。但是,此方法不再有效,僅從 URL 欄位複製連結並不能提供嵌入所需的直接圖像 URL。 h...
    程式設計 發佈於2024-11-02
  • 如何合併關聯數組、處理缺失鍵、填滿預設值?
    如何合併關聯數組、處理缺失鍵、填滿預設值?
    合併多個關聯數組並添加具有預設值的缺失列將關聯數組與不同的鍵集組合起來創建統一的數組可能具有挑戰性。這個問題探索了一種實現此目的的方法,所需的輸出是一個數組,其中鍵被合併,缺失的列用預設值填充。 為了實現這一點,建議結合使用 array_merge 函數精心設計的鍵數組:$keys = array(...
    程式設計 發佈於2024-11-02
  • 透過 testcontainers-go 和 docker-compose 來利用您的測試套件
    透過 testcontainers-go 和 docker-compose 來利用您的測試套件
    Welcome back, folks! Today, we will cover the end-to-end tests in an intriguing blog post. If you've never written these kinds of tests or if you stri...
    程式設計 發佈於2024-11-02
  • 以下是一些適合您文章的基於問題的標題:

**直接簡潔:**

* **如何在Windows控制台中正確顯示UTF-8字元? ** **
* **為什麼傳統方法無法顯示
    以下是一些適合您文章的基於問題的標題: **直接簡潔:** * **如何在Windows控制台中正確顯示UTF-8字元? ** ** * **為什麼傳統方法無法顯示
    在Windows 控制台中正確顯示UTF-8 字元使用傳統方法在Windows 控制台中顯示UTF-8 字元的許多嘗試均失敗正確渲染擴充字元。 失敗嘗試:一個使用 MultiByteToWideChar() 和 wprintf() 的常見方法被證明是無效的,只留下 ASCII 字元可見。此外,使用 ...
    程式設計 發佈於2024-11-02
  • ReactJS 的模擬介紹
    ReactJS 的模擬介紹
    ReactJS 19:重要部份 並發模式增強: ReactJS 19 中最大的改進是並發模式,它不僅在應用程式自身更新時保持UI 平滑和響應靈敏,而且還確保了無縫界面,尤其是在復雜的過渡(例如動畫)時。 改進的伺服器元件: 在 Python 的引領下,ReactJ...
    程式設計 發佈於2024-11-02
  • 首屆DEV網頁遊戲挑戰賽評審
    首屆DEV網頁遊戲挑戰賽評審
    我被要求對DEV團隊9月份組織的第一屆網頁遊戲挑戰賽提交的參賽作品進行評判,結果在10月初發布。 我們幾個月來一直在 DEV 上組織挑戰(迷你黑客馬拉松),併計劃宣布我們的第一個網頁遊戲挑戰。鑑於您在遊戲社群 和 dev.to 的專業知識和參與度,我們想知道您是否有興趣成為客座評審。 誰能對此說...
    程式設計 發佈於2024-11-02
  • 購買經過驗證的現金應用程式帳戶:安全可靠的交易
    購買經過驗證的現金應用程式帳戶:安全可靠的交易
    Buying verified Cash App accounts is not recommended. It can lead to security risks and potential account bans. If you want to more information just k...
    程式設計 發佈於2024-11-02
  • 為什麼 `std::function` 缺乏相等比較?
    為什麼 `std::function` 缺乏相等比較?
    揭開std::function 的等式可比性之謎難題:為什麼是std::&&]難題:為什麼是std:: function,現代C 程式碼庫的一個組成部分,不具備相等比較功能?這個問題從一開始就困擾著程式設計師,導致管理可呼叫物件集合的混亂和困難。 早期的歧義:在C 語言的早期草案中11 標準中,op...
    程式設計 發佈於2024-11-02
  • JavaScript 類型檢查 |程式設計教學
    JavaScript 類型檢查 |程式設計教學
    介紹 本文涵蓋以下技術技能: 在本實驗中,我們將探索一個 JavaScript 函數,該函數檢查提供的值是否屬於指定類型。我們將使用 is() 函數,它利用建構子屬性和 Array.prototype.includes() 方法來確定值是否屬於指定類型。本實驗將幫助您更了解 Jav...
    程式設計 發佈於2024-11-02
  • 使用 Streamlit 將機器學習模型部署為 Web 應用程式
    使用 Streamlit 將機器學習模型部署為 Web 應用程式
    介绍 机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 Excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们通常涉及更复杂的方程和算法,而不仅仅是简单的方程。 在这篇文章中,我将首先构...
    程式設計 發佈於2024-11-02
  • ## utf8_unicode_ci 與 utf8_bin:哪一種 MySQL 排序規則最適合德國網站?
    ## utf8_unicode_ci 與 utf8_bin:哪一種 MySQL 排序規則最適合德國網站?
    為德語選擇最佳MySQL 排序規則為德語選擇最佳MySQL 排序規則在設計為德語受眾量身定制的網站時,支持像ä、 ü 和ß。當涉及特定於語言的要求時,排序規則的選擇起著重要作用。 字元集和排序規則對於字元處理,UTF-8 仍然是首選選項,提供廣泛的字元支援。至於排序規則,則需要考慮德語特定字元。 排...
    程式設計 發佈於2024-11-02
  • 異常處理基礎知識
    異常處理基礎知識
    Java中的例外處理由五個關鍵字管理:try、catch、 throw、throws和finally。 這些關鍵字構成了一個相互關聯的子系統。 要監視的指令位於 try 區塊內。 如果try區塊中發生異常,則會拋出異常。 程式碼可以使用catch捕獲並處理異常。 系統異常由Java執行時...
    程式設計 發佈於2024-11-02
  • 好的第一期:做出您的第一個開源貢獻
    好的第一期:做出您的第一個開源貢獻
    嘿,未來的開源貢獻者! ? 一開始為開源做出貢獻可能會令人生畏,尤其是當專案有數千行程式碼並且對問題進行深入討論時。但這就是為什麼好的首要問題存在。它們就像是一個友好的邀請,讓你嘗試並熟悉操作,而不會迷失在雜草中。將它們視為幫助您開始騎乘的輔助輪。 無論如何,什麼是好的第一期? ...
    程式設計 發佈於2024-11-02
  • 目錄:Django 基礎知識
    目錄:Django 基礎知識
    點此收聽我的直播 目錄:Django 基礎 Django簡介 Django框架概述 安裝Python 設定虛擬環境 安裝 Django 創建您的第一個 Django 專案 Django 專案架構 瞭解 Django 的專案佈局 管理 Django 設定 配置資料庫設定 urls.py、views....
    程式設計 發佈於2024-11-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3