Swift 包索引的标志。Swift 包索引

跟踪 Swift 6 严格并发检查对数据竞争安全性的采用情况。有多少包已准备好用于 Swift 6

当使用 Xcode 项目时

当使用 Swift Package Manager 清单时

选择一个包版本

v0.0.1-alpha-2

main


用于 Linux 的 Swift UI 工具包。由 Vulkan 提供支持




AppKid

Platforms License Test

AppKid 是一个开源应用程序开发框架,深受 Apple 的 AppKit 和 UIKit 的启发。它的初衷是为启用 X11 的 GNU/Linux 环境提供一个便捷的 SDK,用于构建 UI 应用程序。该框架完全使用 Swift 编写,使用 Vulkan 作为渲染后端,并依赖 X11 进行窗口管理和用户输入事件。

Hello World with AppKid

import AppKid
import Foundation

class RootViewController: ViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let label = Label(frame: CGRect(x: 0.0, y: 0.0, width: 320.0, height: 44.0))
        label.text = "Hello World"
        view.addSubview(label)
        label.center = CGPoint(x: 160.0, y: 120.0)
    }
}

@main
final class AppDelegate: ApplicationDelegate {
    func application(_: Application, didFinishLaunchingWithOptions _: [Application.LaunchOptionsKey: Any]? = nil) -> Bool {
        let window = Window(contentRect: CGRect(x: 0.0, y: 0.0, width: 320.0, height: 240.0))
        window.title = "Hello World"
        window.rootViewController = RootViewController()
        return true
    }
}

在您的项目中开始使用 AppKid

AppKid 依赖于多个开源项目。以下是在基于 Debian 的 Linux 发行版上设置这些项目的说明。基于 RPM 的说明将在稍后添加。

  • Swift 语言
    • swift.org 获取 tarball 包,将其解压到某个系统目录(如 /opt/swift),并更新全局 $PATH 变量

       sudo nano /etc/profile.d/10swift_path.sh

      粘贴此内容

       export PATH=/opt/swift/usr/bin:"${PATH}"`

      其中 /opt/swift 是您的 swift 工具链的路径

    • 或者,通过 swiftlang 构建 安装 swiftlang 包(不需要扩展 $PATH 变量)

       wget -qO - https://archive.swiftlang.xyz/install.sh | sudo bash
       sudo apt install swiftlang -y
  • Vulkan SDK
    • 来自 LunarG 仓库的 Vulkan SDK LunarG 正在使用已弃用的 apt-key 来验证签名,因此此仓库通过 SupportingFiles 提供了更现代和安全的配置
       wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | gpg --dearmor | sudo tee -a /usr/share/keyrings/lunarg-archive-keyring.gpg
       sudo wget -q https://raw.githubusercontent.com/smumriak/AppKid/main/SupportingFiles/lunarg-vulkan-jammy.list -O /etc/apt/sources.list.d/lunarg-vulkan-jammy.list
       sudo apt update
       sudo apt install -y vulkan-sdk
    • 或者,您可以尝试从 LunarG 提供的 tarball 安装 Vulkan SDK,或者如果您使用的是 Debian 12 及更高版本或 Ubuntu 23.04 及更高版本,则可以使用发行版仓库中的软件包来替代 LunarG 的 Vulkan SDK
       sudo apt install -y \
       	libvulkan-dev \
       	vulkan-validationlayers \
       	glslc
      
      但是您将必须手动安装来自 Gooogle 的 shaderc 项目的 glslc 编译器,该项目位于 此处
  • 系统库
     sudo apt install -y \
     	libx11-dev \
     	libxi-dev \
     	libwayland-dev \
     	libcairo2-dev \
     	libpango1.0-dev \
     	libglib2.0-dev
  • 用于着色器预处理的 libclang

    注意: 由于着色器编译现在是管道的一部分,因此这现在是一个必需的依赖项

    AppKid 正在为其内部着色器使用自己的 GLSL 方言。它通过自定义工具进行预处理,该工具构建在 libclang 之上。

    安装 libclang 本身

     sudo apt install -y \
     	libclang-15-dev 

    安装为 libclang 提供的软件包配置文件,因为 llvm 不提供该文件

     sudo mkdir -p /usr/local/lib/pkgconfig
     sudo wget -q https://raw.githubusercontent.com/smumriak/AppKid/main/SupportingFiles/clang.pc -O /usr/local/lib/pkgconfig/clang.pc

    如果您要安装不同版本的 libclang - 请相应地调整 clang.pc。

  • 用于调试器支持的 libpython3.8

    注意: 如果您不打算调试 Swift 代码,则可以跳过此步骤

    Swift 的 LLDB 是使用 libpython3.8 构建的。在现代系统上,您可能会遇到 libpython3.9 或更高版本。只需从新版本到旧版本创建一个符号链接即可。但这并非理想选择,并且每次主要发行版更新时都会中断

     cd /usr/lib/x86_64-linux-gnu
     sudo ln -sf libpython3.10.so libpython3.8.so.1.0

    其中 libpython3.10.so 是当前安装的版本,而 libpython3.8.so.1.0 是 Swift 的 LLDB 构建所针对的文件名。

在设置必要的依赖项后,只需将此软件包添加到您的 SwiftPM 清单文件中作为依赖项,并将 AppKid 产品作为依赖项添加到您的目标

// swift-tools-version: 5.8
import PackageDescription

let package = Package(
  name: "MyApp",
  dependencies: [
    .package(
	  url: "https://github.com/smumriak/AppKid", 
	  branch: "main"
	),
  ],
  targets: [
    .executableTarget(
      name: "MyApp",
      dependencies: [
        .product(name: "AppKid", package: "AppKid")
      ])
  ]
)

贡献

非常欢迎贡献。在您深入之前,建议设置您的本地开发环境

您可以使用提供的示例应用程序 AppKidDemo,它位于此仓库中,是产品之一。 AppKidDemo 用 swift 编写,并为 AppKid 开发提供示例环境。

appkiddemo_2.mp4
appkiddemo.mp4

开发

在直接开始编写代码之前,需要进行一些开发设置。以下是如何为基于 Debian 的 Linux 或 macOS 设置开发环境的说明

基于 Debian 的 Linux

macOS

  • 通过 AppStoredeveloper.apple.com 获取 Xcode

  • XQuartz
    brew install xquartz
  • 通过 lunarg.com 获取 Vulkan SDK

  • PKG_CONFIG_PATH 全局变量

    更新全局 PKG_CONFIG_PATH 变量,以便命令行工具具有正确的 pkg-config 搜索路径

     sudo nano /etc/profile

    粘贴此内容

     export PKG_CONFIG_PATH="/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/lib:$PKG_CONFIG_PATH"

    添加一个 launchctl 代理,该代理将更新每个用户会话的环境变量,以便 Xcode 可以找到正确构建项目所需的所有 pkg-config 文件

     mkdir -p ~/Library/LaunchAgents
     curl -s https://raw.githubusercontent.com/smumriak/AppKid/main/SupportingFiles/environment.plist -o ~/Library/LaunchAgents/environment.plist
     launchctl load -w ~/Library/LaunchAgents/environment.plist

    注意: 此文件不会被 TimeMachine 备份,因此您可能需要以其他方式为命令行工具扩展此环境变量

  • 安装其他项目依赖项
     brew install \
     	pkg-config \
     	cairo \
     	glib \
     	pango

构建和运行

此仓库中的所有项目都专门使用 Swift Package Manager。这意味着构建顶级产品就像这样简单

注意: 由于目前这是一个包含多个项目的 monorepo,因此建议通过向 swift 命令添加 --build-path 参数来使用专用构建目录

警告: 在 macOS 上无法运行使用 AppKid 构建的应用程序,并且没有计划这样做

swift build --product AppKid

运行也是如此

swift run --product AppKid

Utilities 目录下有其他脚本,其中包含预定义的构建、运行、清理和其他命令。

警告: 由于在纯 swift 项目中使用 vulkan-sdk 作为 C 库的问题,目前在 macOS 上构建已损坏

IDE

在 Linux 上,推荐的编写代码方式是使用 VSCodeVSCodium IDE。这样您将获得预配置的 LLDB 配置以构建和运行 AppKidDemo,与 Swift SourceKit LSP 的完全集成,以实现语法高亮、符号导航、自动完成,就像在 Xcode 中一样等等。这非常方便。

在 macOS 上,您可以在 VSCode/VSCodiumXcode 之间进行选择。我建议通过 swift package generate-xcodeproj 生成 Xcode 项目并打开它,因为索引和构建目标生成速度更快,但您也可以在 Xcode 中打开 Packge.swift,用户体验几乎相同。

swift package manager 中的 generate-xcodeproj 已弃用。它不再接收更新,并且在 Package.swift 文件中遇到插件定义时会抛出致命错误。打开 Package.swift 本身也不再真正有效,因为它只是没有在 Xcode 源代码树中显示任何本地子模块。

在 reporisotory 的根目录中提供了一个精心制作的 VSCode/VSCoium 配置,包括启动配置和许多任务,例如从 Vulkan 规范重新生成 Vulkan 实体接口一致性或重建 ContentAnimation 着色器。为了在 VSCode/VSCodium 中获得最佳体验,强烈建议安装以下扩展

许可证

本仓库中的代码根据 Apache-2.0 许可证分发。在创建拉取请求之前,请查看贡献

致谢

AppKid 正在使用以下开源项目