Swift.org는 2026년 9월 15일 Swift 6.4를 발표했습니다. 이 사실만으로 프로젝트가 Swift 6 언어 모드로 바뀌지는 않습니다. 컴파일러 업그레이드와 언어 모드 전환을 분리하고, 먼저 현재 설정에서 동시성 진단을 시작한 다음 target별로 이전하십시오. Apple SDK나 Xcode가 필요한 빌드와 테스트는 원격 Mac CI에서 검증하고, 실행 가능한 크로스 플랫폼 작업은 기존 CI에 남길 수 있습니다.
Swift 앱과 프레임워크의 이전을 담당하는 개발자, Apple 플랫폼 CI 엔지니어를 위한 절차입니다.
크로스 플랫폼 Swift 패키지를 관리하며 CI 작업을 나누려는 DevOps 담당자도 참고할 수 있습니다.
마지막 업데이트: 2026년 10월 10일. Swift.org의 Swift 6.4 발표 및 이전 안내와 Apple의 Xcode 릴리스 노트를 기준으로 확인했습니다.
[ SECTION_01 ] 이전 전에 기준선을 남깁니다
먼저 “Swift 6.4로 빌드했다”는 기록만으로는 상태를 판단할 수 없습니다. 컴파일러 버전과 각 target의 언어 모드는 별도로 확인해야 합니다. Swift 이전 안내도 언어 모드를 target 단위로 다룰 수 있음을 설명합니다.
아래 항목을 변경 전 기준선으로 저장합니다.
- 실제 빌드에서 사용한 Swift 컴파일러 버전. 명령줄 빌드라면
swift --version결과를 기록합니다. - Xcode를 쓰는 경우
xcodebuild -version결과와 실제 빌드에 연결된 도구 체인. - 각 target의 Swift 언어 모드와 동시성 관련 빌드 설정.
- target별 빌드 결과, 테스트 결과, 기존 진단 메시지.
- 해당 빌드가 실행된 CI 환경과 재현에 필요한 명령 및 설정.
Xcode 버전과 Swift 도구 체인의 대응 관계는 추측하지 마십시오. Apple의 Xcode 릴리스 노트에서 사용하는 Xcode 버전의 정보를 확인하고, 프로젝트의 실제 빌드 결과와 맞춰 기록합니다.
[ SECTION_02 ] 첫 단계: 기존 모드에서 진단을 켭니다
기준선이 확보되면 언어 모드는 유지한 채 동시성 검사를 시작합니다. Swift 공식 이전 전략과 현재 도구 체인 문서를 기준으로 진단 설정을 확인하십시오. 프로젝트 전체의 설정을 한꺼번에 바꾸기보다, CI에서 재현할 수 있는 빌드 명령으로 결과를 모으는 편이 안전합니다.
진단은 target별로 묶고, 원인도 분류합니다. 예를 들어 값과 참조의 전달 가능성, 공유 상태의 격리, actor 경계, 전역 상태, Objective-C와 맞닿은 코드가 서로 다른 수정 지점을 드러낼 수 있습니다. 공식 자주 발생하는 문제 안내를 참고해 진단 내용을 확인하되, 메시지를 숨기는 설정을 완료 기준으로 삼지는 마십시오.
진단이 한꺼번에 많이 나오면 언어 모드를 먼저 바꾸지 마십시오. target과 의존 관계별로 묶어 우선순위를 정하고, 각 변경이 빌드와 테스트에 미치는 영향을 추적해야 되돌릴 지점도 분명해집니다.
[ SECTION_03 ] 시험 target은 의존 경계가 분명한 곳에서 고릅니다
첫 적용 대상은 다른 모듈과의 연결이 단순하고 따로 빌드할 수 있는 target이 적합합니다. Swift의 증분 도입 안내는 점진적인 적용 방법을 다룹니다. 프로젝트 전체를 동시에 전환하지 않고 시험 범위를 제한하면, 새 진단이 어느 변경에서 생겼는지 구분하기 쉽습니다.
수정할 때는 데이터 격리, Sendable 적합성, actor 격리 경계를 각각 살펴봅니다. 외부 의존성이나 Objective-C 코드가 진단에 영향을 주면 재현 조건과 경계에서 발생한 문제를 남기고 호환 방안을 검토합니다. 근거 없이 경고를 억제하거나 타입을 강제로 안전하다고 선언하면, 진단이 사라져도 동시성 안전성을 확인한 것은 아닙니다.
[ SECTION_04 ] 중간 점검 FAQ
진단이 나타나면 바로 Swift 6 언어 모드로 바꿔야 하나요?
바로 바꾸지 않아도 됩니다. 새 컴파일러를 사용하는 것과 target을 Swift 6 언어 모드로 전환하는 것은 별개의 설정입니다. 먼저 기존 모드에서 진단의 종류와 발생 위치를 확인하고, 수정 가능한 시험 target부터 적용하십시오. 언어 모드를 바꿀 시점은 프로젝트 설정과 실제 도구 체인을 검토한 뒤 정합니다. 버전 이름만 근거로 전체 target의 설정이 바뀌었다고 판단하지 마십시오.
크로스 플랫폼 CI를 유지하면서 Mac 작업을 추가할 수 있나요?
가능합니다. Swift 패키지의 크로스 플랫폼 빌드와 테스트 중 기존 실행 환경에서 지원되는 작업은 기존 CI에 둘 수 있습니다. 반면 Xcode, Apple SDK, Apple 플랫폼 target 또는 Simulator를 포함하는 작업은 요구되는 Mac 도구 체인에서 확인해야 합니다. 파이프라인을 나눌 때는 각 단계의 대상 플랫폼, 빌드 명령과 결과물을 기록해 패키지 테스트의 통과가 Apple 플랫폼 검증을 대신하지 않도록 합니다.
[ SECTION_05 ] 다음 단계: CI에서 시험 결과를 반복 가능하게 만듭니다
시험 target을 기존 CI에서 빌드할 수 있다면, 같은 명령과 설정으로 결과를 다시 얻을 수 있는지 확인합니다. 실패한 진단과 테스트는 target별로 남기고, 기준선과 비교할 수 있도록 컴파일러 버전, 언어 모드, 실행 환경도 함께 저장합니다.
이 단계에서 모든 CI를 Mac으로 옮길 이유는 없습니다. Apple 플랫폼과 무관한 패키지 작업은 기존 실행 환경을 활용하고, Mac이 필요한 단계만 분리하면 변경 영향을 좁힐 수 있습니다. 다만 Apple 플랫폼 결과와 크로스 플랫폼 결과를 하나의 통과 표시로 합치면 어떤 환경에서 검증했는지 놓치기 쉽습니다.
[ SECTION_06 ] Apple 플랫폼 작업은 원격 Mac에서 확인합니다
Xcode, Apple SDK, Apple 플랫폼 target 또는 Simulator에 의존하는 작업은 프로젝트에 맞는 Mac 도구 체인에서 실행합니다. 원격 Mac CI에 해당 작업을 넣을 때는 빌드와 테스트를 구분하고, 산출물까지 따로 확인하십시오. Swift 패키지 테스트의 성공은 Apple 플랫폼 앱이나 프레임워크가 빌드되고 테스트되었다는 증거가 아닙니다.
원격 실행에서도 기준선과 같은 종류의 기록을 보관합니다. 어떤 컴파일러와 Xcode를 사용했는지, target이 어떤 언어 모드였는지, 진단과 테스트가 어떻게 끝났는지 확인할 수 있어야 합니다. 구체적인 Xcode 및 도구 체인 정보는 Apple 공식 릴리스 노트로 확인하고, 실제 프로젝트의 빌드 결과와 대조하십시오.
[ SECTION_07 ] 진단과 배포 증거로 적용 범위를 정합니다
시험 target의 결과가 기존 기준선과 비교 가능해지면 적용 범위를 판단합니다. 아래 조건으로 진행 여부를 나누십시오.
- 독립 target의 진단을 원인별로 처리했고 빌드와 테스트 결과가 확인되면, 의존 관계를 고려해 다음 target으로 넓힙니다.
- 크로스 플랫폼 패키지는 통과했지만 Apple 플랫폼 빌드 또는 테스트가 남아 있으면, 이전 완료로 기록하지 말고 Mac 검증을 진행합니다.
- 진단이 미해결 의존성이나 Objective-C 경계에 집중되거나 회귀가 생기면, 현재 범위를 유지하고 호환 처리 또는 보류 근거를 남깁니다.
- 릴리스에 필요한 실제 빌드, 테스트, 산출물 확인까지 통과하지 못했다면, 언어 모드 전환을 완료로 표시하지 않습니다.
Swift 언어 모드와 컴파일러 버전의 차이, 그리고 호환성 경계는 Swift 버전 호환성 안내에서도 확인할 수 있습니다.
| 운영 방식 | 적합도 판단 | 확인할 점 |
|---|---|---|
| 기존 비맥 CI만 사용 | 크로스 플랫폼 패키지 작업에는 적합 | Apple SDK나 Xcode가 필요한 결과까지 검증했다고 볼 수 없습니다. |
| Mac CI만 사용 | Apple 플랫폼 작업을 한 환경에서 다루려는 경우에 적합 | 크로스 플랫폼 작업까지 옮길 필요가 있는지, 실행 환경과 설정을 검토해야 합니다. |
| 기존 CI와 원격 Mac CI 병행 | 플랫폼별 작업을 나눌 수 있을 때 적합 | 작업별 도구 체인과 결과를 분리해 기록해야 합니다. |
현재 CI만으로 이전을 진행하면 Apple SDK 기반 빌드의 확인이 빠질 수 있고, Xcode와 Simulator가 필요한 테스트를 별도 증거 없이 통과로 오인할 수 있습니다. 반대로 모든 패키지 작업을 Mac으로 옮기면 기존 크로스 플랫폼 실행 환경을 활용하지 못할 수 있습니다. 이런 제약이 실제 시험 target의 병목이라면, NOVAKVM의 원격 Mac 이용 안내를 확인해 이전 기간에 필요한 Mac 실행 단계를 별도로 마련하는 방안을 비교할 수 있습니다. 맥 미니 렌탈 가격 정보를 살펴볼 때도 비용만 보지 말고, 필요한 Xcode 도구 체인과 접근 방식이 프로젝트 조건에 맞는지 확인하십시오. 장기간 높은 이용률을 유지하거나 물리 장비 접근이 필요한 경우에는 자체 Mac이 더 적합할 수 있습니다.
자주 묻는 질문
Swift 6.4 프로젝트에서 동시성 진단은 어떻게 단계적으로 시작하나요?
먼저 실제 빌드에 사용되는 컴파일러와 target별 언어 모드를 기록합니다. 그다음 현재 모드를 유지한 채 공식 마이그레이션 안내에 맞춰 엄격한 동시성 진단을 켜고, 결과를 target과 진단 유형별로 나눕니다. 독립적으로 빌드할 수 있는 모듈을 시험 대상으로 정한 뒤 진단을 수정하고, 기존 빌드 및 테스트 결과와 비교합니다. 처음부터 전체 프로젝트의 언어 모드를 바꾸지는 않습니다.
Swift 컴파일러를 올리면 Swift 6 언어 모드도 자동으로 적용되나요?
아닙니다. 컴파일러 버전은 빌드에 사용하는 도구 체인의 버전이고, 언어 모드는 각 target이 적용받는 언어 규칙을 정합니다. 따라서 새 컴파일러로 빌드하더라도 target의 설정에 따라 기존 언어 모드를 유지할 수 있습니다. 프로젝트 설정과 실제 빌드 로그를 확인하고, Xcode를 사용하는 경우 해당 버전의 Apple 공식 릴리스 노트에서 포함된 도구 체인을 따로 검토해야 합니다.
CI에서 Swift 동시성 이전을 모듈별로 관리하려면 무엇을 비교해야 하나요?
target마다 현재 언어 모드, 동시성 진단, 컴파일 성공 여부와 테스트 결과를 남기고, 변경 전 기준선과 대조합니다. 의존 모듈이나 Objective-C 경계 때문에 진단을 바로 해결하기 어려우면 해당 원인과 호환 처리 방식을 기록합니다. 경고를 억제한 상태를 완료로 간주하지 말고, 시험 target을 기존 CI에서 재현 가능하게 빌드한 다음 변경 범위를 넓힐지 판단합니다.
Swift 패키지의 동시성 이전에서 어떤 CI 작업에 Mac이 필요한가요?
Apple SDK나 Xcode, Apple 플랫폼 target, Simulator를 실제로 사용하는 빌드와 테스트는 프로젝트가 요구하는 도구 체인이 갖춰진 Mac에서 검증해야 합니다. 반면 해당 플랫폼에서 수행할 수 있는 크로스 플랫폼 Swift 패키지 작업은 기존 비맥 CI에 남길 수 있습니다. 패키지 테스트 통과만으로 Apple 플랫폼 산출물의 빌드와 테스트까지 확인했다고 판단하지 말고, 두 작업의 결과를 별도 증거로 보관합니다.