You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在构建Swift Package时无需外部库实现代码检查

Swift Package 构建时代码格式检查方案(无额外外部依赖)

可以通过 Swift Package Manager(SPM)集成官方 swift-format 作为包依赖,配合自定义构建插件实现构建阶段的代码风格检查,无需用户手动安装外部工具。具体实现步骤如下:

1. 更新 Package.swift 配置

修改你的 Package.swift,添加 swift-format 依赖和自定义插件目标:

import PackageDescription

let package = Package(
    name: "MyPackage",
    products: [
        .library(name: "MyPackage", targets: ["MyPackage"])
    ],
    dependencies: [
        // 引入官方 swift-format 依赖
        .package(url: "https://github.com/apple/swift-format.git", from: "509.0.0")
    ],
    targets: [
        .target(
            name: "MyPackage",
            plugins: [.plugin(name: "FormatLintPlugin")]
        ),
        // 定义格式检查构建插件
        .plugin(
            name: "FormatLintPlugin",
            capability: .buildTool(),
            dependencies: [.product(name: "swift-format", package: "swift-format")]
        )
    ]
)

2. 编写插件逻辑

在包目录下创建 Plugins/FormatLintPlugin/FormatLintPlugin.swift 文件,实现构建时的检查逻辑:

import PackagePlugin

@main
struct FormatLintPlugin: BuildToolPlugin {
    func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
        guard let sourceTarget = target as? SourceModuleTarget else { return [] }
        
        // 获取 SPM 管理的 swift-format 工具路径
        let swiftFormatTool = try context.tool(named: "swift-format")
        let outputFile = context.pluginWorkDirectory.appending("format-lint-results.txt")
        
        return [
            .prebuildCommand(
                displayName: "代码风格检查(swift-format)",
                executable: swiftFormatTool.path,
                arguments: [
                    "lint",
                    "--path", sourceTarget.sourceDirectory.string,
                    "--strict", // 启用严格模式,所有格式问题都会被捕获
                    "--output", outputFile.string
                ],
                outputFiles: [outputFile]
            )
        ]
    }
}

3. 验证效果

在 Xcode 中构建该 Swift Package 时,插件会自动拉取 swift-format 并执行检查。你示例中 var b: Int 行的多余缩进问题,会被识别为格式错误,在 Xcode 的问题面板中显示为警告(或错误,取决于规则配置)。

自定义风格规则(可选)

如果需要调整代码风格规则,可以在包根目录创建 .swift-format 配置文件,自定义缩进、空格、换行等规则,swift-format 会自动读取该文件生效。

内容的提问来源于stack exchange,提问作者Oleksii Kolomiiets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:02:06