SwiftLint 0.46.2 读取含空格路径文件时报错异常问题求助
SwiftLint 0.46.2 含空格目录下文件检查失败解决方案
问题说明
- 接入SwiftLint版本:0.46.2
- 触发场景:修改存放在名称含空格的文件夹内的Swift文件时,SwiftLint抛出文件不存在的异常,报错信息如下:
error opening input file '/Users/mg/Documents/Project/Folder/CustomeCell/SwiftCode.swift' (No such file or directory) Most rules will be skipped because sourcekitd has failed. SourceKittenFramework/File.swift:20: Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=260 "The file “paymentOptionCell.swift” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/mg/Documents/Project/Folder/CustomeCell/SwiftCode.swift, NSUnderlyingError=0x600002ad8000 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
- 根因:报错中打印的文件路径缺失了带空格的目录段,实际文件路径为
/Users/mg/Documents/Project/My Module Folder/CustomeCell/SwiftCode.swift,路径中的空格未被正确识别转义,被当做参数分隔符截断了路径,导致SwiftLint无法找到目标文件,触发SourceKitten框架的致命错误,多数代码检查规则被跳过。
解决方案
按落地成本从低到高排序:
- 升级SwiftLint版本
该路径解析bug是0.46.2版本的已知问题,在0.47.0及后续正式版本中已被官方修复,直接升级SwiftLint到最新稳定版即可解决问题,不需要额外调整项目配置。 - 无法升级版本时修改Run Script传参逻辑
找到Xcode中执行SwiftLint的Run Script构建阶段,所有传入SwiftLint命令的文件路径变量,必须用双引号包裹,避免空格被Shell识别为参数分隔符。
错误写法示例:
正确写法示例:swiftlint --path $SCRIPT_INPUT_FILE_0
如果脚本是通过循环遍历所有swiftlint --path "$SCRIPT_INPUT_FILE_0"SCRIPT_INPUT_FILE_*传入待检查文件,循环内取到的单个路径变量同样需要用双引号包裹,不要手动给路径加反斜杠做转义,避免二次转义导致路径匹配失败。 - 配置文件适配
如果是通过.swiftlint.yml配置扫描路径,含空格的路径直接用单引号包裹即可,不要在路径中加反斜杠转义空格,示例配置:included: - 'My Module Folder/Sources' excluded: - 'My Module Folder/ThirdParty'
内容的提问来源于stack exchange,提问作者Moinuddin Girach
相关产品推荐
相关产品推荐

