Xcode 27에서 CodeQL이 막혔다면, Swift 검사는 어떻게 유지하나?

Xcode 27로 올린 뒤 앱은 그대로 빌드되는데 CodeQL의 Swift 보안 검사만 따라오지 못한다. 러너의 macOS는 건드리지 않았는데, 무엇을 되돌려야 검사가 다시 돌까?

Xcode 27에서 CodeQL이 막혔다면, Swift 검사는 어떻게 유지하나?
세 줄 요약
  • Swift CodeQL 검사를 유지하려면 macOS 26 이하와 Xcode 26 이하의 지원 조합이 필요하다.
  • C/C++·C#·Java에 제시된 build-mode none 우회는 Swift에 적용할 수 없다.
  • 러너 OS, 선택된 Xcode, 소스가 요구하는 Swift 버전을 함께 확인해야 한다.

Swift라면 지원되는 이전 도구 조합을 유지해야 한다

GitHub의 10월 19일 안내는 Swift 검사 또는 빌드를 추적하는 분석 작업에 macOS와 Xcode를 각각 26 이하로 고정하라고 권고한다. Swift 6.4는 어느 플랫폼에서도 CodeQL 지원 대상이 아니다.

이번 제약은 Xcode 27과 macOS 27의 일부 시스템 바이너리·라이브러리에 CodeQL의 빌드 추적이 의존하던 Intel 코드가 더 이상 포함되지 않는 데서 비롯됐다. 앱을 컴파일할 수 있다는 사실과 그 빌드를 CodeQL이 추적해 분석할 수 있다는 사실은 다르다.

macOS 26에서도 Xcode 27을 선택하면 조건이 달라진다

CodeQL 지원 플랫폼 문서는 macOS 26에서 Xcode 27을 선택한 경우에도 빌드 없는 none 모드만 지원한다고 명시한다. 러너의 OS 번호만 고정해서 해결되는 문제가 아니다.

실행 조합Swift 검사 판단
지원되는 macOS 26 이하 + Xcode 26 이하현재 Swift 검사를 유지할 때 선택할 조합이다. 소스와 Swift 버전도 지원 범위에 맞아야 한다.
macOS 26 + 선택된 Xcode 27none 모드로 제한되므로 Swift 검사 우회가 되지 않는다.
macOS 27Apple Silicon·none 모드로 제한되며 Swift 검사를 지원하는 조합이 아니다.

Apple Silicon으로 러너를 바꾸는 것만으로 이 제약이 사라지지도 않는다. CPU 조건을 맞추더라도 Swift에 필요한 분석 모드가 지원돼야 한다.

Java에 가능한 none을 Swift나 Kotlin에 복사할 수 없다

언어별 빌드 모드 문서에서 Swift는 autobuild와 manual을 사용한다. Go와 Kotlin도 이 두 모드가 지원되며, 세 언어 모두 none으로 바꿔 이번 제약을 피할 수 없다.

C/C++·C#·Java에는 빌드 추적 없이 데이터베이스를 만드는 none 모드가 있다. 다만 모드를 바꾸는 것은 분석 방법을 바꾸는 선택이다. Java의 경우 빌드 중 생성되는 코드나 정확하게 파악하지 못한 의존성 때문에 결과의 정확도가 달라질 수 있다고 문서는 설명한다.

특히 Java와 Kotlin을 함께 쓰는 저장소를 Java만 있는 저장소와 같은 조건으로 처리하면 안 된다. 같은 저장소 안에서도 언어별 지원 모드가 다르기 때문이다.

CI가 사용하는 Xcode 경로와 소스 호환성을 함께 본다

여러 Xcode를 설치한 러너에서는 어느 버전이 있는지와 어느 버전이 선택됐는지가 다를 수 있다. Apple의 명령줄 도구 문서가 제시하는 다음 명령으로 현재 선택된 개발 도구 경로를 확인할 수 있다.

xcode-select --print-path

해당 경로가 가리키는 Xcode 버전을 확인하고, 워크플로의 러너 이미지와 툴체인 선택을 함께 고정한다. 현재 CodeQL 언어 지원표의 Swift 범위는 5.4~6.3이다. 이전 러너를 준비해도 소스가 그 도구로 빌드되지 않으면 검사를 유지할 수 없다.

Swift 6.4가 필요한 프로젝트에는 none 설정 한 줄로 해결하는 방법이 없다. 현재 검사를 계속할 수 있는 프로젝트는 지원되는 도구 조합을 명시적으로 유지하고, 새 언어 기능 도입은 분석 도구의 지원 범위와 함께 결정해야 한다.