v0.1.0
框架:
明日香
跨平台原生控件,用 Go 写。
UIKit、Material、AppKit、Win32、GTK 和 DOM。不是 GPU 自绘,也不是 Web View。
只用 Go 写一个应用,就能跑在手机、桌面和 Web 上。每个平台都用自己的控件、输入法和无障碍功能来呈现它,Asuka 只更新真正变化的部分。
可运行于 iOS (UIKit), Android (Android Views · Material 3), macOS (AppKit), Windows (Win32,Windows 11 外观), Linux (GTK 4 · libadwaita), Web (DOM).
规格
- 只用 Go
- 一种语言。
- iOS · Android · macOS · Windows · Linux · Web
- 六个平台。
- 全是各平台自己的控件
- 零 Web View。
转译
写的是 Go,
跑的是原生。
ui.TextField(ui.TextFieldProps{Value: name}),UITextFieldui.Toggle(ui.ToggleProps{Value: alerts}),UISwitchui.Slider(ui.SliderProps{Value: volume}),UISliderui.Button(ui.ButtonProps{Title: ui.Val("保存")}),UIButton
这里的控件只是按各平台配色画的示意图;在真机上,它们就是平台自己的控件。
出击
一名驾驶员,
六台机体。
- 01 号机 运行中
iOS
UIKit
同步率 100% - 02 号机 运行中
Android
Android Views · Material 3
同步率 100% - 03 号机 运行中
macOS
AppKit
同步率 100% - 04 号机 运行中
Windows
Win32,Windows 11 外观
同步率 100% - 05 号机 运行中
Linux
GTK 4 · libadwaita
同步率 100% - 06 号机 运行中
Web
DOM
同步率 100%
第 00 话 / Hello
你好,原生。
func Counter() ui.Node {
count := signal.New(0)
label := signal.Func(func() string {
return fmt.Sprintf("Count: %d", count.Get())
})
return ui.SafeArea(ui.Style{Align: ui.AlignCenter, Justify: ui.JustifyCenter},
ui.Text(label),
ui.Button(ui.ButtonProps{
Title: ui.Val("Add"),
Variant: ui.ButtonFilled,
OnPress: func() { count.Set(count.Peek() + 1) },
}),
)
}
func main() { app.Run(Counter) }- Counter() · 运行
- 1 次
- label · 运行
- 1 次
- 上次提交
- 14 个 op
运行中
发给宿主的 op
- 第 01 次提交 · 14 个 op · 2 批
- Create 1 View
- Command 1 Locale 00656e
- Create 2 Text
- SetProp 2 Text="Count: 0"
- Create 3 Button
- SetProp 3 Variant=1
- SetProp 3 Title="Add"
- Listen 3 Press
- Insert 1 2 @0
- Insert 1 3 @1
- SetRoot 1
- SetFrame 2 163,396.66666 64x20
- SetFrame 3 171,416.66666 48x44
- SetFrame 1 0,0 390x844
即 host/fake 为这段代码记录下的 op,屏幕为 iPhone 的 390 × 844。
运行全平台
$ asuka new hello && cd hello$ asuka dev # 本机:Mac、PC、Linux$ asuka dev --platform ios # iOS 模拟器$ asuka dev --platform android # Android 模拟器或手机$ asuka dev --platform web # 浏览器
保存 Go 文件,应用片刻间就会重新加载,状态原样保留。更多用法请看示例,其中的 gallery 展示了全部组件。
全六话
它能做什么
- 第壱話Episode 01
平台原生控件
导航、列表、输入框、选择器、弹出面板和菜单,外观和手感都与各平台一致——因为它们本来就是平台自己的控件。
- 第弐話Episode 02
细粒度更新
组件只运行一次。signal 变化时,只有读取它的视图才会更新,每帧合成一批提交,无需比对整棵树。
- 第参話Episode 03
保存即生效
asuka dev 能在你的电脑、iOS 模拟器、Android 模拟器、手机或浏览器上运行应用,保存后自动重载,应用状态不丢失。
- 第肆話Episode 04
动效
动画、弹簧、变换、进场与退场过渡、从一个视图“长”成另一个视图的共享元素,还有手势。
- 第伍話Episode 05
开箱即用
支持实时查询的 SQLite、安全存储、相机与扫码、相册、定位、通知、音频、视频和网页视图,一应俱全。
- 第陸話Episode 06
随时上架
asuka build 能打出提交 App Store 的签名 .ipa、提交 Google Play 的 .aab、经过公证的 Mac 应用、签名的 Windows .exe、Linux 压缩包与 Flatpak 清单,还有静态网站。