如何在构建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
相关产品推荐
相关产品推荐

