본문 바로가기
C.W.K.
Lesson 02 of 06 · published

지금 네 손에 있는 툴체인

~14 min · platform-map, xcode, command-line-tools, versions

Level 0번들 열어본 사람
0 XP0/84 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete
"다들 'Swift 버전'이라고 부르는 숫자가 네 개인데, 진짜 Swift 버전은 그중 하나뿐이야."

Xcode냐, Command Line Tools만 있냐

Mac에 깔 수 있는 애플 툴체인은 두 종류야. Xcode는 전부 다 들어 있어. Swift 컴파일러, SwiftPM, xcodebuild, 플랫폼 SDK 전부(macOS, iOS, watchOS), 시뮬레이터, Instruments, 개발자 계정과 연동되는 서명 도구까지. Command Line Tools는 훨씬 작아. 컴파일러, SwiftPM, git, macOS SDK 정도야. iOS용은 아무것도 없고, 시뮬레이터도 없고, xcodebuild로 아카이브하거나 업로드할 수도 없어.

이 차이는 실제로 발목을 잡아. Command Line Tools만 깔린 가족 Mac 하나에서 SwiftPM 앱 빌드는 멀쩡히 됐는데, swift test를 돌리면 매번 no such module 'XCTest'로 죽었어. 그 도구엔 'Testing'도 없었고. 앱이 망가진 게 아니라 툴체인에 테스트 프레임워크가 안 들어 있었던 거야. 요즘 Command Line Tools엔 Swift Testing은 들어 있지만, XCTest는 여전히 없어. 그래서 그 Mac을 쓰는 레포들엔 딱 그 경우를 위한 작은 자체 테스트 실행 파일이 있어. 패키지 트랙에서 다시 만날 거야.

지금 셸이 뭘 쓰고 있는지는 xcode-select -p가 알려줘. xcrun은 선택된 개발자 디렉터리 안에서 swift, codesign, simctl, notarytool 같은 도구를 찾아줘. 스크립트가 전체 경로를 적는 대신 xcrun simctl로 부르는 이유가 그거야.

같은 숫자가 아닌 숫자 네 개

숫자뭘 정하나어디서 보나
컴파일러 버전어떤 Swift 기능과 진단이 있는지(이 퀘스트의 빌드 Mac은 6.3.3)swift --version
언어 모드컴파일러가 소스를 Swift 5 규칙으로 읽을지 Swift 6 규칙으로 읽을지(타깃마다 따로 정해)swiftLanguageModes / SWIFT_VERSION
SDK 버전네가 호출해도 되는 API가 어디까지인지(Xcode 26이면 26.x)xcrun --sdk iphoneos --show-sdk-version
배포 대상네가 돌아간다고 약속하는 제일 오래된 OS(이 가족은 macOS 14 / iOS 17 / watchOS 10)platforms: / deploymentTarget

이걸 섞으면 확신에 찬 헛소리가 나와. "우리 Swift 6야"가 사실은 6.x 컴파일러로 모든 걸 Swift 5 모드에서 컴파일한다는 뜻일 수도 있어. 실제로 크래시 하나가 바로 그 틈으로 빠져나갔어. 26 SDK에서 새로 나온 API는 배포 대상이 iOS 17이면 if #available로 감싸기 전까진 컴파일조차 안 돼. 그 검사가 있어야 iOS 17 기기가 자기한테 없는 심볼에 손을 뻗지 않아.

애플은 해마다 최소 기준을 올려

애플은 가을마다 새 Xcode, SDK, Swift를 내고 업로드 최소 조건을 올려. 2026년 4월 28일부터는 App Store Connect에 올리는 iOS, iPadOS, tvOS, visionOS, watchOS 앱이 Xcode 26 이상과 26 SDK로 빌드돼야 해. 애플 공지엔 macOS가 없어. 배포 대상은 낮게 둬도 되지만, 빌드 툴체인은 최신이어야 한다는 거지. 이 퀘스트는 가족이 실제로 배포할 때 쓰는 기준에 맞춰져 있어. macOS 26에서 Swift 6.3.3, Xcode 26.6. Swift 6.4랑 Xcode 27은 WWDC 2026에서 발표됐어. 그게 빌드 Mac에 깔리면, 버전에 따라 달라지는 설명은 전부 기억에 기대지 말고 릴리스 노트로 다시 확인해.

Code

숫자 네 개 찍어보기(어떤 툴체인이 선택됐는지도)·bash
xcode-select -p                         # /Applications/Xcode.app/Contents/Developer, or CommandLineTools
swift --version                         # compiler version
xcodebuild -version                     # Xcode version (fails on Command Line Tools only)
xcrun --sdk macosx --show-sdk-version   # SDK you compile against
xcrun --sdk iphoneos --show-sdk-version
sw_vers -productVersion                 # the OS this Mac runs (not your deployment target)

# Switch the selected Xcode (needs an admin password):
#   sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

External links

Exercise

네 Mac에서 위 명령들을 돌리고, 이제 시작할 Spark 프로젝트의 숫자 네 개를 적어. 컴파일러 버전, 선언할 언어 모드, 설치된 SDK, macOS·iOS·watchOS별로 고른 배포 대상이야. 배포 대상마다 가용성 검사 없이 호출하면 안 되는 게 뭔지 한 문장씩 써봐.
Hint
xcodebuild -version이 실패하면 Command Line Tools만 있는 거야. 앞쪽 트랙까진 괜찮지만 iOS, 워치, TestFlight 트랙에선 막혀. 거기 가기 전에 Xcode를 깔아둬.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.