SwiftPangoCairo

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

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、HarfBuzz 4.2、Pango 1.40 和 Cairo 1.14.10 或更高版本

这些 Swift 封装已使用 cairo-1.14 和 1.16、pango-1.40、1.42、1.44、1.46、1.48 和 1.50 以及 harfbuzz-4.2 和 glib-2.56、2.58、2.60、2.62、2.64、2.66、2.68、2.70、2.72、2.74 和 2.76 进行了测试。它们应该适用于更高的版本,但结果可能因人而异。 此外,请确保已安装 gobject-introspection 及其 .gir 文件。

Linux

Ubuntu

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

sudo apt update
sudo apt install libpango1.0-dev gir1.2-pango-1.0 libharfbuzz-dev gir1.2-harfbuzz-0.0 gobject-introspection libgirepository1.0-dev libxml2-dev jq
Fedora

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

sudo dnf install pango-devel harfbuzz-devel glib2-devel gobject-introspection-devel libxml2-devel

macOS

在 macOS 上,您可以使用 HomeBrew 安装 glib 和 Cairo(有关设置说明,请参阅 https://brew.sh.cn)。安装好 HomeBrew 后,您可以使用它来安装 Cairo 的原生版本

brew update
brew install pango harfbuzz glib glib-networking gobject-introspection pkg-config

用法

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

构建

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

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

Xcode

在 macOS 上,您可以使用 Xcode 构建项目。 为此,您需要在 Xcode IDE 中打开包

cd SwiftPangoCairo
open Package.swift

之后,使用(通常的)构建和测试按钮来构建/测试此包。

文档

您可以使用 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 '/GLib-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