如何在Swift包的开发App中仅启用SwiftLint而不影响发布?
Swift包本地开发SwiftLint检测配置方案
方案1:调整devapp的Run Script路径,覆盖整个包目录
直接在devapp的Xcode项目中修改Run Script,让SwiftLint不仅检测devapp代码,还指向Swift包的Sources和Tests目录。
脚本示例:
# 检查SwiftLint是否安装 if which swiftlint >/dev/null; then # 从devapp目录向上一级就是Swift包的根目录 SWIFT_PACKAGE_ROOT="${SRCROOT}/.." # 指定要检测的目录:包的Sources、Tests,以及devapp本身 swiftlint lint --path "$SWIFT_PACKAGE_ROOT/Sources" \ --path "$SWIFT_PACKAGE_ROOT/Tests" \ --path "$SRCROOT" # 可选:如果需要自动修复,把lint换成autocorrect # swiftlint autocorrect --path "$SWIFT_PACKAGE_ROOT/Sources" --path "$SWIFT_PACKAGE_ROOT/Tests" --path "$SRCROOT" else echo "SwiftLint未安装,请先通过Homebrew安装:brew install swiftlint" fi
这个方案不需要修改Swift包的Package.swift,完全在devapp侧配置,不会影响包的发布内容。
方案2:用环境变量控制Package.swift的插件加载
在Package.swift中添加条件判断,仅当本地存在特定环境变量时,才引入SwiftLint插件和依赖,发布时自动忽略。
修改Package.swift示例:
import PackageDescription let isLocalDev = ProcessInfo.processInfo.environment["LOCAL_DEV"] == "1" let package = Package( name: "YourPackageName", products: [ .library(name: "YourPackage", targets: ["YourPackage"]), ], dependencies: [ // 常规依赖放在这里 // 仅本地开发时添加SwiftLint依赖 isLocalDev ? .package(url: "https://github.com/realm/SwiftLint.git", from: "0.54.0") : nil ].compactMap { $0 }, targets: [ .target(name: "YourPackage"), .testTarget(name: "YourPackageTests", dependencies: ["YourPackage"]), // 仅本地开发时添加SwiftLint插件 isLocalDev ? .plugin( name: "SwiftLintPlugin", capability: .command( intent: .custom(verb: "lint", description: "Runs SwiftLint on the package"), permissions: [] ), dependencies: [.product(name: "SwiftLintBinary", package: "SwiftLint")] ) : nil ].compactMap { $0 } )
配置方式:
- 在devapp的Xcode Scheme中,添加环境变量
LOCAL_DEV=1:- 打开devapp的Scheme编辑界面
- 切换到"Run"选项卡 → "Arguments" → "Environment Variables"
- 点击"+",添加
LOCAL_DEV,值设为1
- 本地终端执行包命令时,先设置环境变量:
export LOCAL_DEV=1 && swift package lint
这样发布到GitHub时,因为没有LOCAL_DEV环境变量,SwiftLint相关的依赖和插件不会被包含在包定义中。
方案3:使用本地专属的Package.swift变体
复制一份Package.swift为Package.dev.swift,在这个文件中添加SwiftLint插件和依赖,本地开发时用这个文件,发布时用原文件。
操作步骤:
- 在Swift包根目录创建
Package.dev.swift,添加SwiftLint相关配置 - 在devapp的Xcode项目中,修改本地包的引用:
- 移除原有的包引用
- 重新添加包时,选择
Package.dev.swift作为包定义文件
- 在
.gitignore中添加Package.dev.swift,避免提交到GitHub
这个方案完全隔离了本地开发配置和正式包定义,不会有发布时的意外。
内容的提问来源于stack exchange,提问作者beowulf
相关产品推荐
相关产品推荐

