如何配置xcodebuild analyze忽略CocoaPods和SPM依赖的分析警告
静态分析的扫描范围由Xcode构建系统的Target编译配置控制,不需要修改第三方源码,按你使用的依赖管理方式选择对应配置即可:
通用基础方案:指定分析目标
执行xcodebuild analyze时不要直接对整个workspace做全量扫描,通过-target参数明确指定自有业务Target,构建系统只会对指定Target运行静态分析,所有依赖的链接Target仅做常规编译,不会触发分析流程,示例命令:
xcodebuild analyze \ -workspace 你的工程名.xcworkspace \ -scheme 你的业务Scheme名 \ -configuration Debug \ -target 你的自有AppTarget名 \ # 追加你原有的其他构建参数
CocoaPods依赖配置
如果用CocoaPods管理依赖,不需要手动修改Pods工程文件,直接在Podfile中添加post_install钩子,给所有第三方依赖Target默认关闭静态分析,执行pod install后永久生效:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['RUN_CLANG_STATIC_ANALYZER'] = 'NO' end end end
配置完成后正常执行分析命令,不会扫描Pods目录下的任何第三方代码,自有主Target的分析逻辑不受影响。
SPM依赖配置
针对Swift Package Manager引入的依赖,两种处理方式:
- 本地工程配置:Xcode 13及以上版本可直接在Build Setting中调整,找到SPM引入的第三方Target,将
Run Static Analyzer选项设置为No,自有Target保持Yes即可。 - CI无侵入配置:执行分析命令时追加参数,全局关闭所有SPM依赖的静态扫描,不会影响本地工程的自有代码:
# 在原有xcodebuild analyze命令后追加参数 SWIFT_PACKAGE_RUN_STATIC_ANALYZER=NO
兜底过滤方案
如果工程结构特殊(比如存在跨Target源码引用),上述配置后仍有第三方警告漏出,可以在CI流程中加一层结果过滤:静态分析结果默认存放在构建产物的StaticAnalyzer目录下,执行完分析后,过滤掉路径包含Pods/、SourcePackages/checkouts/(SPM依赖默认存放路径)的结果条目,仅上报自有代码路径下的警告即可。
注意:不要直接给整个workspace全局设置RUN_CLANG_STATIC_ANALYZER=NO再单独给主Target开配置,容易出现参数覆盖导致自有代码分析失效,优先使用按依赖类型单独配置的方式,稳定性更高。
内容的提问来源于stack exchange,提问作者Zach

