Swift 6.4 컴파일러로 올려도 곧바로 Swift 6 언어 모드로 바꿀 필요는 없습니다. 기존 앱은 Swift 5 모드로 기준 빌드를 먼저 확보하고, 새 모듈이나 영향 범위가 작은 타깃부터 옮기며, 정식 배포는 검증된 도구 체계에 남겨야 합니다. Xcode 27 Beta 6은 Swift 6.4 컴파일러와 여러 Swift 언어 모드를 지원하지만, 베타 도구 체계 자체를 정식 배포 환경으로 간주해서는 안 됩니다. Xcode 27 출시 기록에서 확인할 수 있습니다.
이 글은 Swift 6.4를 시험하면서도 현재 앱의 발행을 멈출 수 없는 독립 개발자를 위한 안내입니다. 엄격한 동시성 진단이나 외부 의존성 문제를 만난 기존 프로젝트 유지자, 정식 버전과 베타 도구 체계를 원격 맥에서 함께 관리하려는 작은 팀에도 적합합니다.
마지막 업데이트: 2026년 9월 6일. Xcode 출시 기록, Swift 호환성 문서, App Store Connect 출시 기록을 기준으로 확인했습니다. 베타 후속 버전과 최종 제출 지원은 별도로 다시 검증해야 합니다.
먼저 구분해야 할 세 가지 설정
Swift 6.4 컴파일러, Swift 언어 모드, 엄격한 동시성 검사는 서로 같은 스위치가 아닙니다. 컴파일러를 바꾸면 진단과 SDK 반응이 달라질 수 있지만, 프로젝트의 언어 모드가 자동으로 Swift 6으로 바뀐다고 단정할 수는 없습니다. Swift 공식 호환성 문서도 기존 언어 모드와 새 언어 기능의 관계를 따로 설명합니다. Swift 호환성 안내를 기준으로 설정을 확인해야 합니다.
Xcode 27 Beta 6에서 확인된 언어 모드는 Swift 6, Swift 5, Swift 4.2, Swift 4입니다. 이 네 가지 선택지는 컴파일러가 제공하는 언어 모드의 범위이며, 특정 프로젝트가 어느 모드로 빌드되는지는 타깃의 빌드 설정과 프로젝트 상태에 따라 달라집니다. Xcode 빌드 설정 문서에서 타깃별 설정을 확인할 수 있습니다.
따라서 새 경고가 나타났다는 이유만으로 모든 코드를 Swift 6으로 바꾸면 안 됩니다. 경고의 원인이 컴파일러 변경인지, SDK 변경인지, 동시성 검사 강화인지 먼저 나누어야 합니다.
업그레이드 전에 기준선을 고정합니다
Swift 6.4 검증은 새 브랜치를 만드는 일보다 비교 가능한 기준을 남기는 일이 먼저입니다. 다음 항목을 같은 커밋에서 기록합니다.
- 현재 Xcode와 Swift 언어 모드
- 정식 빌드의 구성과 선택한 스킴
- 패키지 잠금 파일과 외부 의존성 버전
- 단위 테스트와 통합 테스트의 통과 결과
- 보관 파일 생성, 서명 내보내기, 업로드까지의 실제 절차
- Swift Package, Objective-C 혼합 모듈, 빌드 스크립트의 위치
특히 정식 서명 자료와 실제 업로드 작업은 검증되지 않은 베타 환경으로 옮기지 않는 편이 안전합니다. App Store Connect의 빌드 업로드 조건은 도구 체계와 서명 상태에 영향을 받으므로, 공식 빌드 업로드 안내를 확인하면서 현재 배포 절차를 보존해야 합니다.
프로젝트 이름, 타깃 이름, 계정, 경로, 로그에는 실제 식별 정보를 넣지 않습니다. 예시 로그도 탈취 가능한 서명 정보나 저장소 주소를 포함하지 않도록 지웁니다.
표준 모드를 유지한 채 첫 빌드를 비교합니다
처음부터 Swift 6 모드로 바꾸지 말고, 같은 커밋과 같은 스킴으로 Swift 6.4 컴파일러를 사용해 기존 언어 모드를 유지한 빌드를 실행합니다. 이 단계의 목적은 이전이 아니라 원인 분리입니다.
| 비교 항목 | 정식 기준 환경 | Swift 6.4 검증 환경 |
|---|---|---|
| 언어 모드 | 현재 통과한 모드 유지 | 처음에는 동일한 모드 유지 |
| 소스 기준 | 동일한 커밋 | 동일한 커밋 |
| 확인 작업 | 빌드, 테스트, 보관 파일 | 빌드, 테스트, 보관 파일 |
| 결과 기록 | 기존 로그와 산출물 보관 | 새 로그와 산출물 보관 |
| 배포 용도 | 정식 발행에 사용 | 검증 전용으로 제한 |
빌드가 실패하면 먼저 외부 패키지와 SDK 변화부터 확인합니다. 새 경고를 모두 Swift 6 동시성 문제로 분류하면 불필요한 수정이 늘어납니다. 로그에는 오류 종류와 발생 타깃을 남기고, 수정 전후의 테스트 결과와 보관 파일 생성 여부를 함께 비교합니다.
이때 공식 이전 안내의 목표는 경고를 숨기는 것이 아니라 실제 데이터 경쟁과 격리 문제를 찾아내는 것입니다. Swift 이전 안내의 방향처럼 임시 억제 설정은 적용 범위와 제거 조건을 기록해야 합니다.
Swift 6 모드는 타깃 단위로 옮깁니다
기존 iOS 프로젝트 전체를 한 번에 바꾸는 방식은 영향 범위를 추적하기 어렵습니다. 테스트가 충분하고 다른 모듈과의 연결이 적은 주변 타깃부터 전환합니다. 핵심 앱 타깃과 모든 의존성을 같은 커밋에서 동시에 바꾸지 않는 것이 좋습니다.
각 타깃을 옮길 때는 아래 순서를 지킵니다.
- 타깃의 Swift 언어 모드를 Swift 6으로 바꿉니다.
- 컴파일 진단을 오류 종류별로 분류합니다.
- 단위 테스트와 비동기 작업 테스트를 실행합니다.
- 다른 모듈에서 호출하는 공개 인터페이스를 확인합니다.
- 보관 파일과 서명 내보내기를 시험합니다.
- 외부 의존성이 막히면 해당 타깃만 보류하고 사유를 기록합니다.
Swift 6 동시성 관련 진단은 컴파일 성공만으로 끝나지 않습니다. 비동기 호출 순서, 격리 경계, 공유 상태 접근을 실제 테스트에서 확인해야 합니다. 외부 라이브러리가 아직 호환되지 않았다면 임시 격리를 적용할 수 있지만, 이를 장기적인 해결책으로 취급해서는 안 됩니다.
Xcode 27 Beta 6은 Swift 5 모드와 함께 쓸 수 있습니다
Xcode 27로 올린 뒤 프로젝트가 자동으로 Swift 6으로 전환된다고 보는 것은 안전하지 않습니다. 프로젝트 파일과 타깃 빌드 설정에서 언어 모드를 확인해야 합니다. 설정이 명시되어 있지 않거나 여러 타깃이 서로 다른 값을 갖는 프로젝트라면, 먼저 현재 상태를 파일로 남긴 뒤 검증해야 합니다.
Swift 6.4 컴파일러를 사용하면서 Swift 5 모드를 유지하는 방식은 기존 프로젝트의 기준선을 확보할 때 유용합니다. 다만 이 선택이 모든 새 진단을 없애는 것은 아닙니다. 컴파일러와 SDK가 바뀌면서 나타나는 오류, 패키지 호환성 문제, 빌드 스크립트 문제는 별도로 해결해야 합니다.
반대로 새 기능을 중심으로 만든 모듈이고 테스트 범위가 분명하다면 처음부터 Swift 6 모드를 선택할 수 있습니다. 중요한 점은 앱 전체의 전환 여부가 아니라 타깃별 의존성과 되돌림 조건입니다.
정식 빌드와 베타 검증을 분리합니다
Swift 6.4 검증 환경과 정식 빌드 환경은 같은 저장소를 사용할 수 있습니다. 그러나 DerivedData, 보관 파일, 테스트 결과, 사용자 디렉터리, 도구 체계 선택은 분리해야 합니다. 같은 경로를 공유하면 한 환경의 캐시나 산출물이 다른 환경의 결과를 오염시킬 수 있습니다.
원격 맥을 활용할 때는 다음처럼 구분합니다.
- 정식 환경: 이미 승인된 Xcode와 언어 모드, 정식 서명 자료
- 검증 환경: Xcode 27 Beta 6과 Swift 6.4 검증용 사용자 디렉터리
- 공통 기준: 동일한 커밋, 고정된 스킴, 동일한 빌드 구성
- 별도 기록: 빌드 로그, 테스트 결과, 보관 파일, 오류 재현 조건
정식 발행 작업은 베타 환경에서 실행하지 않습니다. App Store Connect의 제출 지원은 베타 기간 중 바뀔 수 있으므로, 최신 App Store Connect 출시 기록을 다시 확인해야 합니다.
원격 맥에서 여러 Xcode를 격리하는 방법을 검토할 때는 원격 맥 환경 안내를 참고할 수 있습니다. 임시 검증 환경이라도 사용자 디렉터리와 산출물 경로가 분리되어 있는지 먼저 확인해야 합니다.
다음 조건으로 전환 여부를 결정합니다
아래 조건을 만족하는지 확인하면 감으로 전환하는 일을 줄일 수 있습니다.
- 핵심 타깃과 주요 외부 의존성이 Swift 6 모드에서 컴파일되면 Swift 6 전환을 진행합니다.
- 컴파일은 되지만 비동기 테스트나 공개 인터페이스 검증이 실패하면 해당 타깃만 Swift 5 모드에 남깁니다.
- 외부 의존성이 아직 호환되지 않으면 정식 환경은 유지하고, 검증 환경에서 대체 버전이나 수정 일정을 확인합니다.
- 보관 파일은 만들어지지만 서명 내보내기나 실제 업로드가 실패하면 생산 전환을 보류합니다.
- 원래 정식 빌드로 되돌리는 절차가 문서화되지 않았다면 이중 트랙을 계속 유지합니다.
- 모든 핵심 타깃과 실제 발행 절차가 통과하면 그때 정식 기본 도구 체계의 변경을 검토합니다.
즉시 채택할 상황은 새 모듈 중심이고 테스트와 외부 의존성이 모두 통과한 경우입니다. 점진적 이전은 일부 타깃만 통과하거나 동시성 진단을 계속 분석해야 하는 경우에 맞습니다. 핵심 빌드가 실패하거나 되돌림 경로가 불명확하면 Swift 5 정식 환경을 유지하고 Swift 6.4는 검증 전용으로 제한해야 합니다.
현재 방식이 개인 맥 한 대에 정식 Xcode와 베타 Xcode를 함께 설치하는 구성이라면 캐시 오염, 저장 공간 부족, 잘못된 스킴 선택, 서명 자료 혼용이 실제 위험이 됩니다. 반대로 원격 맥은 추가 환경을 분리하기 쉽지만, 네트워크 지연과 접근 권한, 비용이 새로 생깁니다. 장기적으로 계속 무거운 빌드를 실행하거나 물리 장치와 직접 연결해야 한다면 자체 장비가 더 적합할 수 있습니다.
다만 정식 발행을 유지하면서 Swift 6.4를 짧게 검증해야 하는 단계라면, 별도 장비를 즉시 구매하기보다 RUVCLOUD 요금 안내에서 원격 맥을 임시 환경으로 검토하는 편이 합리적입니다. 동일한 커밋으로 빌드, 테스트, 보관 파일을 대조한 뒤에만 상시 환경으로 연장하면 불필요한 장기 비용과 잘못된 전환을 함께 줄일 수 있습니다.