SwiftGModule

SwiftGModule 是 gmodule-2.x 的 Swift 封装,主要通过 gobject-introspection 自动生成。有关最新的(自动生成)参考文档,请参阅 https://rhx.github.io/SwiftGModule/

macOS 11 build macOS 10.15 build Ubuntu 20.04 build Ubuntu 18.04 build

新特性?

gir2swift 的版本 15 提供了 Package Manager 插件。这需要 Swift 5.6 或更高版本。(旧版本可以通过 swift52 分支使用)。

前提条件

Swift 5.6 或更高版本

要构建,请从 https://swiftlang.cn/download/ 下载 Swift -- 如果您使用的是 macOS,请确保您也安装了命令行工具)。使用 swift --version 测试您的编译器是否工作,它应该给出类似如下的内容

$ swift --version
swift-driver version: 1.75.2 Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)
Target: arm64-apple-macosx13.0

在 macOS 上,或者在 Linux 上您应该得到类似如下的内容

$ swift --version
Swift version 5.8.1 (swift-5.8.1-RELEASE)
Target: x86_64-unknown-linux-gnu

GLib 2.56 或更高版本

这些 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 的测试。它们应该适用于更高的版本,但结果可能因人而异 (YMMV)。 另请确保您已安装 gobject-introspection 及其 .gir 文件。

Linux

Ubuntu

在 Ubuntu 18.04、20.04 和 22.04 上,您可以使用发行版自带的 glib。只需使用 apt 包管理器安装即可

sudo apt update
sudo apt install libglib2.0-dev glib-networking gobject-introspection libgirepository1.0-dev libxml2-dev jq
Fedora

在 Fedora 29 上,您可以使用发行版自带的 gtk。只需使用 dnf 包管理器安装即可

sudo dnf install glib2-devel gobject-introspection-devel libxml2-devel jq

macOS

在 macOS 上,您可以使用 HomeBrew 安装 glib(有关安装说明,请参阅 https://brew.sh.cn

brew update
brew install glib glib-networking gobject-introspection pkg-config jq

用法

通常,您不会直接构建此软件包(但为了测试您可以 - 请参阅下面的“构建”)。相反,您需要使用 Swift Package Manager 将 SwiftGModule 嵌入到您自己的项目中。安装先决条件(请参阅下面的“前提条件”)后,将 SwiftGModule 作为依赖项添加到您的 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/SwiftGModule.git", branch: "main"),
    ],
    targets: [
        .target(name: "MyPackage",
                dependencies: [
                    .product(name: "GModule", package: "SwiftGModule")
                ]
        )
    ]
)

构建

通常,您不会直接构建此软件包,而是将其嵌入到您自己的项目中(请参阅上面的“用法”)。但是,您可以单独构建和测试此模块,以确保一切正常。确保您已安装所有先决条件(见上文)。之后,您可以简单地克隆此存储库并构建命令行可执行文件(请耐心等待,这将下载所有必需的依赖项并需要一段时间才能编译),使用

git clone https://github.com/rhx/SwiftGModule.git
cd SwiftGModule
swift build
swift test

Xcode

在 macOS 上,您可以改为使用 Xcode 构建项目。为此,您需要先创建一个 Xcode 项目,然后在 Xcode IDE 中打开该项目

./xcodegen.sh
open GModule.xcodeproj

之后,使用(通常的)“Build”和“Test”按钮来构建/测试此软件包。

文档

您可以使用 DocC 插件生成文档。要预览与您的本地安装匹配的文档,只需运行

swift package --disable-sandbox preview-documentation

然后导航到为本地预览服务器显示的 URL。请确保您的浏览器中已启用 JavaScript。

或者,您可以使用 jazzy 创建静态文档。确保您已安装 sourcekittenjazzy,例如在 macOS (x86_64) 上

brew install ruby sourcekitten
/usr/local/opt/ruby/bin/gem install jazzy
./generate-jazzy.sh

故障排除

以下是您可能遇到的一些常见错误以及如何修复它们。

缺少 .gir 文件

如果您收到如下错误

Girs located at
Cannot open '/GModule-2.0.gir': No such file or directory

请确保您已安装相关的 gobject-introspection 软件包(如“前提条件”部分所述),包括它们的 .gir.pc 文件。

旧的 Swift 工具链或 Xcode

如果您在运行 swift build 时收到 Segmentation fault (core dumped) 或循环依赖错误,例如

warning: circular dependency detected while parsing pangocairo: harfbuzz -> freetype2 -> harfbuzz

这可能意味着您的 Swift 工具链太旧了,尤其是在 Linux 上。确保运行 Swift 编译器时找到的是最新的工具链(见上文)。

如果您得到一个较旧的版本,请确保在您的 PATH 中首先找到正确版本的 swift 编译器。在 macOS 上,使用 xcode-select 选择并安装最新版本,例如

sudo xcode-select -s /Applications/Xcode.app
xcode-select --install