TOPIC COLLECTION
CodeQL不支持Xcode 27和Swift 6.4:iOS项目代码扫描失败怎么办,固定macOS 26 runner还是改build mode none
GitHub在2026-10-19公告:macOS 27和Xcode 27的部分系统二进制不再含Intel(x86_64)代码,CodeQL无法在这些版本上做traced扫描,Swift 6.4在任何平台都不支持;Intel Mac上的CodeQL将在2026年12月中旬弃用。官方建议把工作流固定在macOS 26/Xcode 26,C/C++、C#、Java可改用build mode none。
资料更新:2026-10-20
依据GitHub Changelog(2026-10-19)。工作流示例为本站整理,runner标签与codeql-action版本请以你仓库当前可用的为准。核查2026-10-20(新加坡时间)。
主题标签:CodeQL、Xcode 27、Swift 6.4、代码扫描、GitHub Actions
如果你维护的是iOS或macOS项目,最近升级了Xcode 27,然后发现GitHub上的代码扫描(Code scanning)开始报错或者干脆没结果,先别急着翻自己的配置。这次是工具链本身的问题,GitHub在10月19日的Changelog里已经承认了。
一句话版本:苹果从macOS 27和Xcode 27开始,部分系统二进制和库里不再带Intel(x86_64)代码,而CodeQL追踪构建过程恰好依赖这些东西。结果就是traced扫描在新版本上跑不起来,Swift 6.4则在任何平台上都不被CodeQL支持。
具体影响哪些情况
| 场景 | 官方说法 | 实际影响 |
|---|---|---|
| 装了Xcode 27 | C/C++、C#、Go、Java、Kotlin、Swift的traced extraction不可用 | 依赖编译追踪的扫描直接失效 |
| macOS 27 | 上述语言的traced extraction「可能」不可用 | 不一定全挂,但不能指望 |
| Swift 6.4 | 任何平台都不支持 | 换Linux runner也没用 |
| Intel芯片的Mac | 2026年12月中旬弃用CodeQL支持 | 自建Intel Mac runner要提前换 |
受影响最重的是Swift项目。其他语言多少还有绕路的办法,Swift现在只能停在旧工具链上。
先弄懂什么叫traced扫描
CodeQL分析编译型语言时,常见做法是「看着你编译」:它挂在构建过程上,记录编译器实际处理了哪些文件、用了什么参数,再据此建立代码数据库。这就是traced extraction,也叫追踪构建。
另一种是build mode none,不跑构建,直接读源码。好处是快、不依赖工具链;代价是对复杂项目的分析可能没那么完整。目前官方说C/C++、C#、Java可以切到这种模式。
苹果这次去掉x86_64代码,本身是Apple Silicon全面替代Intel的延续。站内之前写过GitHub Actions的Xcode 27镜像转正式版只支持Apple Silicon,两件事是一条线上的。
怎么改:按语言分三种情况
情况一:Swift项目
官方给的办法只有一个:把扫描用的工作流固定在macOS 26(或更早)和Xcode 26(或更早)。日常构建可以继续用Xcode 27,扫描单独起一个job,用旧版本跑。
这里有个隐患要提前想到:如果你的代码已经用上了Swift 6.4的新语法,旧工具链可能编译不过,扫描也就跟着失败。这种情况下,短期内只能接受Swift部分暂时没有CodeQL覆盖,用其他检查手段补位,比如Semgrep或Snyk这类不依赖编译追踪的工具。
情况二:C/C++、C#、Java
两个选项。一是同样固定macOS 26 runner;二是改用build mode none。我倾向先试后者,因为固定旧系统总有到期的一天,build mode none至少不再受苹果工具链升级影响。改完对比一下告警数量,差距不大就切过去。
情况三:Go、Kotlin,以及跨平台的Java代码
官方没给这几种语言单独的绕法。我的建议是:如果这部分代码本来就不依赖苹果平台,把CodeQL扫描job挪到Linux runner上跑,彻底避开macOS工具链。很多项目里的Go服务端、Kotlin共享模块其实完全没必要在Mac上扫。
工作流大概长这样
下面是思路示意,runner标签和action版本请换成你仓库里实际在用的:
jobs:
codeql-swift:
runs-on: macos-26 # 固定旧系统,别用 macos-latest
steps:
- uses: actions/checkout@v4
- name: 选择 Xcode 26
run: sudo xcode-select -s /Applications/Xcode_26.app
- uses: github/codeql-action/init@v4
with:
languages: swift
- name: 构建
run: xcodebuild -scheme App build
- uses: github/codeql-action/analyze@v4
codeql-java:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v4
with:
languages: java-kotlin
build-mode: none
- uses: github/codeql-action/analyze@v4
关键点就两个:不要写macos-latest,因为它迟早会指向macOS 27;Xcode版本要显式选定,别依赖镜像默认值。
自建runner的团队多看一眼
用自己机房Mac mini跑Actions的团队,有两件事要排进计划:
- 机器上如果已经装了Xcode 27,扫描job要明确切到旧版Xcode,或者干脆留一台不升级的机器专门做扫描。
- 还在用Intel Mac的,12月中旬之后CodeQL不再支持。趁年底预算还没花完,申请换Apple Silicon机器。
这事对谁影响最大
说实话,大多数个人开发者不会开CodeQL扫描,感觉不到。真正要处理的是三类:开源仓库默认开了代码扫描的维护者、公司要求「合并前必须过安全扫描」的iOS团队、以及要给客户出安全报告的外包团队。
尤其是第二类。如果流水线把CodeQL失败设成阻断合并,Xcode 27一升,所有PR都卡住。临时办法是把扫描改成非阻断,修好工作流再改回来,但一定要有人记着改回来。
和苹果最近的其他变化一起看
10月前后苹果这边的变化挺密:Xcode 27镜像只支持ARM、App Store审核指南更新(见苹果10月16日审核指南),现在又轮到安全扫描工具链。做iOS的团队这个季度最好专门留出时间处理CI。
如果你们还用GitHub的AI扫描和自动修复,可以对照看GitHub AI扫描PR和GitHub代理式自动修复,这两者底层也依赖CodeQL的结果。CI拉取公共仓库时偶尔要求认证的问题,见Git HTTPS克隆要求认证怎么办。
常见问题
GitHub会修复吗?
公告标签是Retired(停用),没有给修复时间表。我理解短期内不会有,Swift 6.4支持什么时候来也没说。
不用CodeQL的扫描工具受影响吗?
这次只说了CodeQL。其他工具是否依赖x86_64系统库,要看各自的说明。SonarQube、Semgrep这类以源码分析为主的工具一般不受编译追踪影响。
Swift官网能看到6.4的变化吗?
语言本身的更新看Swift官网,GitHub相关文档在GitHub Docs。更多工具在代码审查分类、开发工具分类和编程语言分类。
来源与核查日期
- GitHub Changelog:CodeQL changes for macOS 27, Xcode 27, and Swift 6.4(2026-10-19)
- GitHub Changelog 2026年10月汇总(含Xcode 27 runner镜像GA,2026-10-15)
核查日期:2026-10-20(新加坡时间)。工作流示例仅示意,runner标签与action版本以仓库实际为准。