Saya memulakan DarwinKit beberapa tahun yang lalu kerana tiada pengikatan pada API Mac asli untuk Go. Kami perlahan-lahan mengubah projek itu menjadi alat pengikat dan penjanaan untuk suatu hari nanti mencapai liputan penuh semua API Apple. Keluaran v0.5.0 minggu lepas adalah projek terbesar yang pernah dilihat:
Berikut ialah contoh pantas menggunakan DarwinKit untuk membina aplikasi tetingkap paparan web asli dalam beberapa baris Go:
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 }) }) }
Dalam kurang daripada 40 baris kami membuat apl Mac asli tanpa membuka XCode atau menggunakan Objective-C. Saya fikir ini kini mungkin projek pengikatan terbaik yang wujud untuk API Apple. Mungkin juga cara terbaik untuk membuat utiliti kecil pada Mac. Dan tidak lama lagi peranti Apple yang lain.
Terdapat satu bahagian besar yang hilang pada DarwinKit: tiada pengikatan pada rangka kerja Apple fungsi. Nasib baik, kebanyakan rangka kerja dibina dengan OOP, yang kami mempunyai pengikatan yang hebat buat masa ini. Tetapi sesetengah rangka kerja, terutamanya rangka kerja peringkat rendah, kebanyakannya adalah fungsi. Walaupun terdapat penyelesaian yang melibatkan penggunaan CGO (yang DarwinKit cuba bantu anda elakkan), kami sedang berusaha untuk menjana pengikatan fungsi Go asli untuk setiap fungsi rangka kerja.
Perkara besar lain yang kami usahakan ialah menjadikan DarwinKit tidak menggunakan CGO langsung! Menggunakan purego, kami boleh memanggil rangka kerja Apple tanpa melibatkan CGO. Ini akan meningkatkan masa binaan, membuat binari yang lebih kecil dan membenarkan DarwinKit digunakan dalam program yang perlu mengelakkan CGO atas apa jua sebab.
Untuk iOS dan pembangun mudah alih di luar sana, saya benar-benar mahu menjadikan ini berfungsi untuk iOS. Malah, ia sudah sepatutnya! Tetapi kami menjana pengikatan untuk MacOS buat masa ini. Jika sesiapa ingin membantu membawa ini ke iOS untuk membenarkan orang ramai membuat apl mudah alih Apple dengan Go, sila hubungi!
Sehingga itu, cuba bina apl menggunakan apa yang kami ada setakat ini. Beritahu saya bagaimana ia berlaku!
Atas ialah kandungan terperinci Cara saya membina apl Mac mudah menggunakan Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!