惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
腾讯CDC
S
Securelist
Know Your Adversary
Know Your Adversary
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 【当耐特】
V2EX - 技术
V2EX - 技术
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
Cisco Talos Blog
Cisco Talos Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
W
WeLiveSecurity
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
博客园 - Franky
S
Security Affairs
博客园 - 司徒正美
V
V2EX
K
Kaspersky official blog
T
Threatpost
NISL@THU
NISL@THU
博客园 - 叶小钗
Help Net Security
Help Net Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
小众软件
小众软件
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Last Week in AI
Last Week in AI
Jina AI
Jina AI
爱范儿
爱范儿
罗磊的独立博客
N
News and Events Feed by Topic
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
L
LINUX DO - 热门话题
Google Online Security Blog
Google Online Security Blog
雷峰网
雷峰网
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint

肘子的 Swift 记事本 | Fatbobman's Blog

当灵感跑在了结果前面 -- 肘子的 Swift 周报 #145 当每一次写入都有了新价格 -- 肘子的 Swift 周报 #144 当 Linux 成为“空气”:容器、Agent 与不再重要的“桌面之争” -- 肘子的 Swift 周报 #143 两个 SwiftUI 动画 Bug 排查小记 SPI 加入 Apple,Swift 迈向自举 -- 肘子的 Swift 周报 #142 Swift 还让你 Excited 吗? -- 肘子的 Swift 周报 #141 从 Size Class 到可用空间,horizontalSizeClass 还可靠吗? WWDC 26:AI 帮你看完了,然后呢? -- 肘子的 Swift 周报 #140 WWDC 2026 初印象:符合预期,但更务实 -- 肘子的 Swift 周报 #139 Core Data + Observation:从属性级响应到心智解放 稳定 > 新功能 -- 肘子的 Swift 周报 #138 用自定义 Layout 化解 SwiftUI List 的行高与间距跳变 从社区路标到生态基石:Dave Verwer 的新篇章 -- 肘子的 Swift 周报 #137 消失的 WWDC 愿望单 -- 肘子的 Swift 周报 #136 CocoaPods 正在退场,SwiftPM 才刚到第二章 -- 肘子的 Swift 周报 #135 让 AI 从称手到称心 -- 肘子的 Swift 周报 #134 Swift 并发正被更广泛地接纳 -- 肘子的 Swift 周报 #133 从 OpenSwiftUI 到 DanceUI:换个方式 Dive SwiftUI -- 肘子的 Swift 周报 #132 被 Vibe 摧毁的版权壁垒,与开发者的新护城河 -- 肘子的 Swift 周报 #131 苹果的罕见妥协:当高危漏洞遇上“拒升”潮 -- 肘子的 Swift 周报 #130 一墙之隔,不同的时空 -- 肘子的 Swift 周报 #129 我的 App 审核被卡了? -- 肘子的 Swift 周报 #128 CDE:一次让 Core Data 更像现代 Swift 的尝试 50 岁的苹果和 51 岁的我 -- 肘子的 Swift 周报 #127 2026 年,为什么我仍在思考 Core Data Macbook Neo:苹果重回校园的起点 -- 肘子的 Swift 周报 #126 跨域传递 NSManagedObjectContext 为什么在 Swift 6.2 中不再报错?真正的变化不在编译器 Xcode 26.3 + Claude Agent:模型替换、MCP、Skill 与自适应配置 macOS 录屏软件开发实录:从像素抓取到元数据重现 isolated(any) 与 #isolation:让 Swift 闭包自动继承隔离域 在 tvOS 上活下來:一個非典型播放器的工程實錄 告别“可移植汇编”:我已让 Swift 在 MCU 上运行七年 独立开发者的试炼:Zipic 从 0 到 1 的产品化之路 逃离 Mac App Store:如何从零构建独立应用的分发与售卖体系 为什么父视图无法修改子视图的 @State Partytown 实战:修复 GTM 自定义事件与 dataLayer 失效问题 Swift 6 编译加速:启用 Swift-Syntax 预构建 (Prebuilts) Swift 模块化:使用 package 关键字实现 Target 间安全共享 VSCode/Cursor 测试 Core Data:手动编译 xcdatamodeld 指南
Monorepo 实战:解决 VSCode/Cursor 中 SwiftLint 配置失效问题
东坡肘子 · 2025-04-24 · via 肘子的 Swift 记事本 | Fatbobman's Blog

Read in English

🔦

(更新于 )

核心速览:在 VSCode 或 Cursor 中打开 Swift Monorepo 的子目录时,根目录的 .swiftlint.yml 往往无法生效。解决方案是在 .vscode/settings.json 中显式指定 swiftlint.configSearchPaths,并在配置文件中避免使用通配符路径。

在使用 Monorepo(单一代码仓库)管理 Swift 项目时,我们通常希望在根目录维护一份统一的 .swiftlint.yml 配置。然而,当使用 VSCode、Cursor(或其 VSCode 分支应用)直接打开项目中的某个子 Package 目录时,SwiftLint 插件往往无法自动向上查找到根目录的配置,导致 Lint 规则失效。

本文介绍如何通过正确配置路径,确保 SwiftLint 在 Monorepo 的任何层级都能正常工作。

环境要求

  • 工具:SwiftLint 命令行工具
  • 插件:VSCode/Cursor 中的 SwiftLint 插件
  • 架构:典型的 Swift Monorepo 结构
MyProject/                  
├── .swiftlint.yml          // 根目录统一配置
├── .vscode/settings.json   // 根目录编辑器设置
├── Domain/
│   └── Package.swift
│   └── .vscode/settings.json // 子包编辑器设置
└── Persistent/
    └── Package.swift
    └── .vscode/settings.json

解决方案

要解决此问题,需要配合修改 VSCode 的设置文件和 SwiftLint 的配置文件。

1. 根目录编辑器设置

在项目根目录的 .vscode/settings.json 中,强制指定 SwiftLint 配置文件的搜索路径。这确保了当你打开根文件夹时,插件能准确锁定配置文件。

{
    "swiftlint.configSearchPaths": [
        ".swiftlint.yml"
    ]
}

2. 修正 .swiftlint.yml (关键)

在根目录的 .swiftlint.yml 中,必须明确列出需要 Lint 的子目录路径。

❌ 避免做法:不要依赖默认扫描或使用模糊的通配符,这在某些插件实现中会导致路径解析错误。

✅ 推荐做法:显式指定 included 路径:

included:
  - Domain/Sources
  - Persistent/Sources
  # - FeatureA/Sources

3. 子 Package 编辑器设置 (解决子目录打开问题)

这是很多开发者容易忽略的一步。如果你经常直接用 VSCode 打开 DomainPersistent 文件夹进行独立开发,你需要在这些子目录中也创建一个 .vscode/settings.json,并指向上层的配置文件:

{
    "swiftlint.configSearchPaths": [
        "../.swiftlint.yml"
    ]
}

通过设置 ../.swiftlint.yml,即使工作区的根目录是 Domain,插件也能“顺藤摸瓜”找到父级目录的配置文件。

补充:SwiftFormat 配置

如果你同时使用 SwiftFormat,它的配置相对更智能一些,通常不需要在配置文件中硬编码路径,只需指定配置文件位置即可:

// 根目录 .vscode/settings.json
"swiftformat.configSearchPaths": [".swiftformat"]

// 子目录 .vscode/settings.json
"swiftformat.configSearchPaths": ["../.swiftformat"]

相关提示

订阅 Fatbobman 周报

每周精选 Swift 与 SwiftUI 开发技巧,加入众多开发者的行列。

立即订阅