围绕 gtk-3.x 和 gtk-4.x 的 Swift 包装器,主要从 gobject-introspection 自动生成。本项目旨在使 gtk 比使用纯 C 语言接口更 “swifty”。有关最新的(自动生成)参考文档,请参阅 https://rhx.github.io/SwiftGtk/
通过 gtk4
分支添加了对 gtk 4 的支持。
gir2swift 的版本 15 提供了 Package Manager Plugin。这需要 Swift 5.6 或更高版本(旧版本可以通过 swift52 分支使用)。
通常,您不会直接构建此软件包(但为了测试您可以 - 请参阅下面的“构建”)。相反,您需要使用 Swift Package Manager 将 SwiftGtk 嵌入到您自己的项目中。安装先决条件(请参阅下面的“先决条件”)后,您可以通过创建一个新的空项目文件夹,然后运行 projgen.sh 脚本来完成此操作,例如
mkdir MyProject
cd MyProject
curl -L https://git.io/SwiftGtk3.sh | sh
之后,您应该能够在您的源代码中 import Gtk
并使用 swift build
来构建您的项目。或者,您可以手动下载 run-gir2swift.sh 并将 SwiftGtk
作为依赖项添加到您的 Package.swift
文件中,例如
// swift-tools-version:5.6
import PackageDescription
let package = Package(name: "MyPackage",
dependencies: [
.package(url: "https://github.com/rhx/gir2swift.git", branch: "main"),
.package(url: "https://github.com/rhx/SwiftGtk.git", branch: "gtk3"),
],
targets: [
.target(name: "MyPackage",
dependencies: [
.product(name: "Gtk", package: "SwiftGtk")
]
)
]
)
对于 gtk4,将 .branch("gtk3")
替换为 .branch("gtk4")
。
您可以在 GitHub 上找到一些示例项目,展示如何使用 SwiftGtk
演示应用程序附带构建脚本,这些脚本配置了一些环境变量,并在调用 swift build
、swift package
等时传递必需的参数。最简单的入门方法是克隆以下项目之一,然后将所有 *.sh
shell 脚本复制到您自己的项目中。此外,如果您希望能够构建桌面应用程序,请创建一个 Resources
文件夹,并复制(至少)Info.plist
文件。
Resources
文件夹中具有用于 GtkBuilder 的用户界面文件 (*.ui
)。您可以使用常用的 Swift 编译器命令构建、测试或运行您的项目
swift build
swift test
swift run
您也可以在 macOS 上使用 Xcode 构建项目。为此,您需要首先创建一个 Xcode 项目,然后在 Xcode IDE 中打开该项目
./xcodegen.sh
open MyPackage.xcodeproj
之后,使用(常用的)“构建”和“测试”按钮来构建/测试此软件包。请注意,在此阶段,Swift Package Manager 无法为 Xcode 创建 App targets(因此,要构建 macOS 应用程序而不仅仅是命令行可执行文件,您仍然需要使用 build.sh
脚本,该脚本调用 app-wrapper.sh
来创建独立的应用程序捆绑包)。
要构建,请从 https://swiftlang.cn/download/ 下载 Swift -- 如果您使用的是 macOS,请确保您也安装了命令行工具)。使用 swift --version
测试您的编译器是否工作,它应该给您类似这样的输出
$ swift --version
swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
Target: arm64-apple-macosx13.0
在 macOS 上,或者在 Linux 上,您应该得到类似这样的输出
$ swift --version
Swift version 5.10 (swift-5.10-RELEASE)
Target: x86_64-unknown-linux-gnu
Swift 包装器已在 glib-2.56、2.58、2.60、2.62、2.64、2.66、2.68、2.70、2.72、2.74、2.76、2.78 和 2.80 以及 gdk/gtk 3.22、3.24 以及 gtk4
分支上的 4.0、4.2、4.4、4.6、4.8、4.10、4.12 和 4.14 上进行了测试。它们应该适用于更高版本,但 YMMV。 还要确保您安装了 gobject-introspection
及其 .gir
文件。
在 Ubuntu 22.04、20.04 和 18.04 上,您可以使用发行版附带的 gtk。只需使用 apt
包管理器安装即可
sudo apt update
sudo apt install libgtk-3-dev gir1.2-gtksource-3.0 libcogl-pango-dev libcogl-path-dev libcogl-dev libpango1.0-dev gir1.2-pango-1.0 libgdk-pixbuf2.0-dev gir1.2-gdkpixbuf-2.0 libgraphene-1.0-dev gir1.2-graphene-1.0 libglib2.0-dev glib-networking gobject-introspection libgirepository1.0-dev libxml2-dev jq
Ubuntu 18.04 还要求您安装 libcogl-gles2-dev
。
在 Fedora 上,您可以使用发行版附带的 gtk。只需使用 dnf
包管理器安装即可
sudo dnf install gtk3-devel pango-devel cairo-devel cairo-gobject-devel glib2-devel gobject-introspection-devel libxml2-devel jq
在 macOS 上,您可以使用 HomeBrew 安装 gtk(有关设置说明,请参阅 https://brew.sh.cn)。一旦您安装了运行的 HomeBrew,您就可以使用它来安装 gtk 的原生版本
brew update
brew install gtk+3 glib glib-networking gobject-introspection pkg-config jq
如上面的“用法”部分所述,您通常不会直接构建此软件包,而是将其嵌入到您自己的项目中。但是,您可以单独构建和测试此模块,以确保一切正常。确保您已安装所有先决条件(见上文)。之后,您可以简单地克隆此存储库并构建命令行可执行文件(请耐心等待,这将下载所有必需的依赖项并花费一些时间来编译),使用
git clone https://github.com/rhx/SwiftGtk.git
cd SwiftGtk
swift build
swift test
您可以在 docs 文件夹中找到参考文档。这是使用 jazzy 工具生成的。如果您想生成您自己的文档,以匹配您的本地安装,您可以使用存储库中的 generate-documentation.sh
脚本。确保您已安装 sourcekitten 和 jazzy,例如在 macOS 上
brew install sourcekitten
sudo gem install jazzy
./generate-documentation.sh
以下是您可能遇到的一些常见错误以及如何修复它们。
是的,gtk
是一个庞然大物。从 gtk
头文件生成的 Swift 接口接近 300,000 行。这需要一些时间来构建!
如果您收到类似这样的错误
Girs located at
Cannot open '/GLib-2.0.gir': No such file or directory
请确保您已安装相关的 gobject-introspection
软件包(如“先决条件”部分所述),包括它们的 .gir
和 .pc
文件。
如果您在运行 swift build
时遇到 Segmentation fault (core dumped)
或循环依赖错误,例如
warning: circular dependency detected while parsing pangocairo: harfbuzz -> freetype2 -> harfbuzz
这可能意味着您的 Swift 工具链太旧,尤其是在 Linux 上(在撰写本文时,至少需要 Swift 5.6)。确保当您运行 Swift 编译器时,找到的是最新的工具链(见上文)。
如果您获得旧版本,请确保在您的 PATH
中首先找到正确版本的 swift 编译器。在 macOS 上,使用 xcode-select 选择并安装最新版本,例如
sudo xcode-select -s /Applications/Xcode.app
xcode-select --install