窗口管理
- 创建:App.NewWindow()
- 显示:Show()
- 辅助方法:fyne.Window.ShowAndRun()
第二个窗口必须通过Show()来显示,默认创建的窗口大小是根据显示内容自动判定的最小尺寸。
测试
Fyne库提供了方便的测试代码包,通过将组件逻辑和实际渲染分离,可以让我们在不实际显示的情况下加载应用并对完整功能进行测试。
通过"fyne.io/fyne/v2/test"包中的test.NewApp()可以创建一个测试应用(不同于app.New()创建的常规桌面应用),而test.Tap()可以模拟出各种用户操作,之后我们可以通过输出的文本判断结果是否正确。
测试代码可以通过’go test .‘来执行。
应用打包
由于每种环境对和图形应用绑定的图标和元数据的格式都有不同的要求,因此图形应用的打包比较复杂。比如win下的应用需要嵌入的图标,macos因为和Linux绑定导致需要安装各种元数据文件。针对这种情况Fyne直接提供了可以自动处理这些要求的“package”命令,只需要指定目标系统和需要的元数据就能生成合适的应用。包括图标的转换也可以自动完成,因此只需要提供png格式的图片就好。
打包命令示例:
fyne package -os darwin -icon myapp.png
上面的命令可以生成一个可以在macos上分发的包含完整绑定结构的myapp.app应用,如果要生成windows和Linux应用,可以通过下面的命令实现:
fyne package -os linux -icon myapp.png
fyne package -os windows -icon myapp.png
这两个命令的作用分别为:
- 生成myapp.tar.gz,包含起始路径为usr/local/的文件夹结构,Linux用户可以将其扩展至他们系统的root目录。
- 生成myapp.exe,该文件包含所有的图标和应用元数据。
如果你只想将应用安装到你的个人电脑,fyne也提供了方便的子命令,例如:
fyne install -icon myapp.png
这些打包命令也支持使用默认的图标图片‘Icon.png’。
应用元数据
从2.1版本开始,Fyne在支持默认Golang工具的同时,也提供了可以设置默认项目选项的matedata file
。
文件要命名为FyneApp.toml,存放在运行Fyne命令的目录下(通常是main包目录),文件包含内容如下:
Website = "https://example.com"
[Details]
Icon = "Icon.png"
Name = "My App"
ID = "com.example.app"
Version = "1.0.0"
Build = 1
Website元素是可选内容,如果需要将你的应用上传到指定页面,可以通过该元素配置对应网址。
[Details]段中包含了在发布过程中由目标操作系统和应用商店需要用到的和应用有关的数据。Fyne会自动查询该文件是否存在,许多强制命令的配置参数将自动从该文件获取。如果命令行依然输入了这些参数,则以命令行输入参数将会覆盖文件参数。
交叉编译
Golang本身在被设计的时候就考虑了交叉编译的场景,因此只要通过GOOS
和GOARCH
设置目标操作系统架构就可以进行交叉编译。不过使用本地图片时,在Fyne中使用CGo会导致交叉编译变得有点困难。
交叉编译一个Fyne应用要求我们必须设置CGO_ENABLED=1
,以便让Go打开C语言编译器(在目标操作系统和当前使用的不同时,该配置是默认关闭的)。这么做意味着你必须有一个可用于目标操作系统的C编译器,而编译器安装完成之后,我们必须在环境变量中配置CC
变量来告诉Go应该使用哪个编译器。
依赖的工具有很多种选择,安装方法也有很多种,Fyne建议的配置如下:
GOOS(target) | CC | provider | download | notes |
---|---|---|---|---|
darwin | o32-clang | osxcross | https://github.com/tpoechtrager/osxcross | 需要安装macOS SDK |
windows | x86_64-w64-mingw64-gcc | mingw64 | package manager | macOS请使用homebrew |
linux | gcc or x86_64-linux-musl-gcc | gcc or musl-cross | cygwin or package manager | 可以通过homebrew使用musl-cross来提供Linux gcc。还需要安装X11和meas用于编译。 |
以上环境变量设置完成后就可以通过常规方式进行交叉编译,如果仍然有报错信息,那么要考虑是否有包缺失的问题。有一些平台在编译时还需要安装额外的库或者头文件。
下面再介绍一种相对简单点的交叉编译方法:使用虚拟机编译。
由于Linux可以很方便的交叉编译macos和windows应用,因此如果你不是在Linux下进行开发的话,也可以通过虚拟机在Linux系统上完成交叉编译工作。Docker镜像是解决复杂构建配置项的很有用的工具,这一点对Fyne也同样适用。可以选择的应用有很多,Fyne推荐的是 fyne-cross, 它受了xgo的启发,使用了一个建立在golang-cross之上的docker image,包含了可用于windows的MinGW编译器和可用于macos的macOS SDK。
fyne-cross 可用于为以下目标构建二进制文件以及可以用于分发的应用包:
GOOS | GOARCH |
---|---|
darwin | amd64 |
darwin | 386 |
linux | amd64 |
linux | 386 |
linux | arm64 |
linux | arm |
windows | amd64 |
windows | 386 |
android | amd64 |
android | 386 |
android | arm64 |
android | arm |
ios | |
freebsd | amd64 |
freebsd | arm64 |
fyne-cross使用要求:
- go >= 1.13
- docker
安装方法:
go get github.com/fyne-io/fyne-cross
用法:
fyne-cross <command> [options]
The commands are:
darwin Build and package a fyne application for the darwin OS
linux Build and package a fyne application for the linux OS
windows Build and package a fyne application for the windows OS
android Build and package a fyne application for the android OS
ios Build and package a fyne application for the iOS OS
freebsd Build and package a fyne application for the freebsd OS
version Print the fyne-cross version information
Use "fyne-cross <command> -help" for more information about a command.
通配符:
arch
标签支持通配符,如果要为指定目标系统的所有架构进行编译,可以通过通配符实现:
fyne-cross windows -arch=*
该命令等价于:
fyne-cross windows -arch=amd64,386