Apple의 Xcode 시스템 요구 사항에는 Swift 6.4 컴파일러와 Swift 6, Swift 5, Swift 4.2, Swift 4 언어 모드가 함께 안내되어 있습니다. 즉, Swift 6.4 컴파일러를 사용해도 기존 iOS 프로젝트를 Swift 5 모드로 빌드할 수 있습니다. 이번 주에는 앱 전체를 한꺼번에 바꾸지 말고, 대상 하나에서 완전한 동시성 검사를 실행해 진단과 의존성부터 확인하세요.
이 글은 Swift 5 모드로 앱을 유지하며 전환 시점을 검토하는 독립 개발자와 소규모 팀을 위한 안내입니다.
여러 대상을 운영하거나 출시 빌드를 맡고 있다면, 대상별 설정과 실제 보관 결과를 비교하는 데 활용할 수 있습니다.
마지막 검토: 2026년 10월 30일. 확인 기준은 본문에 인용한 Apple의 시스템 요구 사항과 Swift 공식 마이그레이션 안내입니다.
컴파일러 버전과 Swift 6 모드는 별개의 설정입니다
Swift 6.4는 컴파일러 버전이고, Swift 6 모드는 대상에 적용되는 언어 모드입니다. 컴파일러를 올리는 것만으로 모든 대상의 언어 모드가 자동 변경되지는 않습니다. 따라서 전환 판단은 Xcode 버전 확인에서 끝내지 말고, 빌드에 실제로 적용되는 대상별 설정까지 확인해야 합니다.
Swift 공식 마이그레이션 안내는 언어 모드를 대상별로 선택하고 점진적으로 적용하는 방법을 설명합니다. 기존 앱에 여러 Swift 대상이 있다면, 각 대상을 한 묶음으로 취급하지 말고 의존 관계와 변경 위험에 따라 나눠 보세요.
빌드 설정에서는 SWIFT_VERSION과 SWIFT_STRICT_CONCURRENCY의 값을 확인합니다. 이름이 비슷한 옵션이나 프로젝트 기본값만 확인하지 말고, 실제로 빌드하는 대상과 구성이 같은지 살핍니다. Apple의 빌드 설정 참고 자료에서 설정의 의미를 대조하고, 로그에서 해당 설정이 적용된 빌드를 확인하세요.
주의: 프로젝트 편집기의 설정 화면은 의도한 값을 보여줄 뿐, 특정 보관 빌드가 그 값을 사용했다는 증거는 아닙니다. 대상, 구성, 빌드 로그를 함께 보관하세요.
동시성 검사는 진단의 강도를 나눠 비교합니다
기존 검사 상태를 유지하면 지금과 비슷한 진단 기준으로 작업을 이어갈 수 있습니다. Swift 5 모드에서 완전한 동시성 검사를 켜면 아직 Swift 6 모드로 전환하지 않고도 더 많은 문제를 진단할 수 있습니다. 이때 진단이 경고로 표시되는지, 빌드를 막는 오류가 되는지는 선택한 언어 모드와 설정을 함께 기준으로 판단해야 합니다.
Swift 6 모드에서는 동시성 안전성 규칙에 어긋나는 코드가 오류가 될 수 있습니다. 이는 새 컴파일러가 앱의 동작을 자동으로 안전하게 고친다는 뜻이 아닙니다. 진단을 수정한 뒤에도 실제 실행 경로와 테스트로 동작을 검증해야 합니다. Swift의 완전한 동시성 검사 안내와 일반적인 동시성 컴파일 문제를 참고해 진단 원인을 분류하세요.
로그에는 파일과 대상, 진단 종류, 경고 또는 오류 여부를 기록합니다. 변경 전후 로그를 같은 빌드 구성에서 비교하면 새로 생긴 문제와 원래 있던 문제를 구분하기 쉽습니다. 진단이 사라졌다는 사실만으로 데이터 경쟁이 모두 제거됐다고 결론 내리지는 마세요.
의존성은 해석 성공과 컴파일 호환성을 따로 봅니다
먼저 앱이 직접 관리하는 모듈, Swift 패키지, 외부 의존성을 목록화합니다. 패키지 해석이 끝났다는 결과는 의존성을 가져왔다는 뜻이지, 선택한 언어 모드에서 앱 전체가 컴파일되고 실행된다는 확인은 아닙니다. SwiftPM 의존성 추가 안내를 참고하되, 최종 판단은 프로젝트의 실제 빌드로 내리세요.
의존성별로 다음 항목을 적습니다.
- 현재 앱 대상과 연결되는 제품 및 모듈
- 프로젝트가 지정한 언어 모드와 빌드 설정
- 동시성 관련 진단이 발생하는 위치
- 해당 의존성을 포함한 앱 빌드와 테스트 결과
패키지에 동시성 관련 주석이 있다는 사실만으로 마이그레이션이 완료됐다고 보지 않습니다. 그 주석이 현재 호출 방식과 맞는지, 앱 경계에서 진단이 남는지 확인하세요. 호환성 문제가 특정 모듈에 집중돼 있다면 그 대상을 기존 모드에 두고, 독립적인 대상부터 검증하는 선택지도 있습니다.
테스트 통과와 출시용 보관 결과를 함께 확인합니다
컴파일 진단과 제품 동작 회귀는 서로 다른 검증 항목입니다. 주요 비동기 작업, 작업 취소, 공유 상태 갱신처럼 앱이 실제로 사용하는 경로를 고르고 단위 테스트와 통합 테스트로 확인하세요. 전환 전후 결과를 따로 기록해야 컴파일러 진단 수정이 동작 변화까지 검증했다고 착각하지 않습니다.
Debug에서 성공한 빌드가 Release에서도 같은 설정을 사용한다고 가정하지 마세요. 출시 구성과 보관 절차에서 선택된 대상, 언어 모드, 동시성 검사 설정을 로그로 확인합니다. Apple의 Release 빌드 테스트 안내와 Xcode Scheme 설정 안내를 함께 확인하면 실행 구성과 출시 검증을 연결하는 데 도움이 됩니다.
전환은 선택한 대상부터 단계별로 검증합니다
Swift 공식 마이그레이션 전략에 맞춰 범위를 작게 시작합니다. 다음 순서로 기록을 남기세요.
- 현재 상태를 보존합니다. 빌드에 사용하는 Xcode와 컴파일러, 대상별
SWIFT_VERSION, 동시성 검사 설정을 기록합니다. - 대상을 고릅니다. 의존성이 단순하고 대표적인 동시성 코드를 포함한 대상 하나를 선택합니다. 앱의 핵심 출시 경로에 바로 적용하는 것은 피합니다.
- 완전한 동시성 검사를 실행합니다. 기존 언어 모드를 유지한 채 진단을 모으고, 경고와 오류를 구분해 수정 우선순위를 정합니다.
- 의존성과 테스트를 검증합니다. 해당 대상이 사용하는 내부 모듈과 패키지를 포함해 빌드합니다. 주요 동시성 경로의 테스트 결과도 기록합니다.
- Swift 6 모드에서 다시 빌드합니다. 진단이 남으면 모듈 경계와 호출 코드를 살펴봅니다. 단순히 경고를 억제해 통과시키지 않습니다.
- 출시 구성을 재현합니다. Debug와 Release, 보관 절차에서 의도한 설정이 쓰였는지 빌드 로그와 결과물로 확인합니다.
- 범위를 넓힐지 결정합니다. 테스트와 보관 결과가 재현되고 의존성의 진단을 처리했을 때 다음 대상에 적용합니다. 실패 원인이 정리되지 않았다면 현재 대상에서 멈춥니다.
점검표와 비교표로 전환 범위를 정합니다
아래 조건을 대상별로 확인합니다.
- [ ] 사용한 컴파일러와 대상별 언어 모드를 기록했습니다.
- [ ] 완전한 동시성 검사 결과를 경고와 오류로 나눴습니다.
- [ ] 내부 모듈과 패키지를 포함한 실제 앱 빌드를 확인했습니다.
- [ ] 대표적인 동시성 경로의 테스트 결과를 전환 전후로 비교했습니다.
- [ ] Release와 보관 빌드 로그에서 적용 설정을 확인했습니다.
| 선택지 | 적합한 상태 | 장점 | 남는 확인 사항 |
|---|---|---|---|
| 기존 언어 모드 유지 | 출시 위험을 먼저 낮춰야 하거나 진단 수집이 시작 단계인 경우 | 기존 흐름을 유지하면서 전환 준비를 시작할 수 있습니다 | 새 진단을 충분히 확인하지 못할 수 있습니다 |
| 기존 모드에서 완전한 동시성 검사 | 코드 문제를 먼저 찾아 수정하려는 경우 | Swift 6 모드 전환 전에 진단을 분류할 수 있습니다 | 경고를 수정해도 실행 동작 검증은 별도로 필요합니다 |
| 선택한 대상만 Swift 6 모드 적용 | 대상의 의존성과 테스트, 출시 절차를 검증할 수 있는 경우 | 영향 범위를 제한해 전환 결과를 비교할 수 있습니다 | 다른 대상과 출시 구성도 별도로 확인해야 합니다 |
| 전체 대상 전환 | 모든 대상과 의존성, 보관 절차의 결과가 확인된 경우 | 설정을 일관되게 운영하기 쉽습니다 | 한 대상의 성공만으로 전체 전환을 정당화할 수 없습니다 |
| 검증 지점 | 남길 증거 | 다음 판단 |
|---|---|---|
| 대상 설정 | 실제 적용된 언어 모드와 검사 설정이 담긴 빌드 로그 | 설정이 예상과 다르면 전환을 멈추고 구성부터 수정합니다 |
| 의존성 | 패키지를 포함한 대상별 컴파일 결과와 진단 목록 | 해결되지 않은 진단이 있으면 해당 경계를 격리합니다 |
| 테스트 | 대표 동시성 경로의 단위 및 통합 테스트 결과 | 컴파일 성공과 별개로 동작 회귀를 조사합니다 |
| 출시 절차 | Release 구성과 보관 결과, 사용한 빌드 설정 | 보관 환경이 재현되지 않으면 전체 적용을 보류합니다 |
Swift 6.4 컴파일러를 도입하는 일과 Swift 6 모드로 전환하는 일은 같은 결정이 아닙니다. 개발용 맥에서만 확인할 때는 원격 환경의 Xcode와 설정 차이가 재현성을 해칠 수 있고, 기존 머신은 저장 공간과 지속 실행 여유가 부족할 수 있습니다. 다만 장기간 고정된 고부하 작업이나 물리 기기 연결이 중심이라면 자체 맥이 더 적합할 수 있습니다.
다른 맥에서 빌드와 보관을 재현해야 하지만 장비를 상시 구매할 필요는 없다면, MESHLAUNCH의 원격 맥 대여 방식을 프로젝트의 도구 체인과 실제 로그로 평가할 수 있습니다. 비용 조건을 비교할 때는 맥 미니 대여 가격 안내도 함께 확인하세요. 원격 환경 역시 대상 설정과 의존성, 출시 보관을 직접 검증해야 하며, 결과를 확인하기 전에는 호환성을 전제하지 않는 것이 안전합니다.