최신 iOS SDK가 나왔습니다. "이번 버전에서 새로 채택할 만한 게 뭐가 있나"를 찾는 작업을 했습니다.
새 API 심볼과 시그니처는 SDK의 인터페이스 파일에 다 나와 있습니다. 그걸 읽고 다섯 건을 골라 여러 앱에 심었습니다.
다섯 건 전부 되돌렸습니다. 그리고 이틀 뒤, 그중 "확인됐다"고 적어둔 세 건도 다시 전부 무너졌습니다.
당신은 "이 API를 채택했다"를 무엇으로 증명합니까?
첫 번째 실수: 설명이 없는 파일을 읽었습니다
SDK의 인터페이스 파일(.swiftinterface)에는 함수 시그니처와 사용 가능 버전만 있습니다. 그 함수가 실제로 뭘 하는지 설명하는 문서 주석은 0줄입니다.
grep -c '///' SwiftUI.swiftinterface # → 0그래서 "새 API가 생겼다"를 "사용자 화면이 바뀐다"로 착각하기 쉽습니다.
정답은 같은 폴더의 별도 문서 파일(.swiftdoc)에 있었습니다. 바이너리라 직접 안 열리지만, 문자열 추출로 읽으면 Apple이 쓴 설명이 나옵니다.
strings <SwiftDoc 파일> | grep -A6 '<심볼명>'이걸 읽자 다섯 건 중 두 건이 즉시 무효화됐습니다.
- 어떤 UI 컴포넌트의 새 스타일은 **"iOS에서는 기존 스타일과 겉모습이 완전히 같다. 유일한 차이는 보이스오버가 다르게 읽어준다는 것"**이라고 명시돼 있었습니다. 제가 붙이려던 자리는 시각적 변화를 기대한 곳이라, 화면은 그대로에 접근성 의미만 후퇴하는 교환이었습니다.
- 다른 API는 특정 컨테이너 안에서는 아무 동작도 하지 않는 no-op이라고 적혀 있었습니다.
여러 개의 독립적인 분석이 전부 같은 실수를 반복했습니다. 전부 같은 출처만 읽었기 때문입니다.
여기서 끝났으면 좋았을 텐데
"문서를 읽으면 된다"는 교훈으로 마무리될 뻔했습니다. 나머지 세 건은 문서를 인용해서 "동작 확인됨"이라고 적어뒀으니까요.
이틀 뒤 시뮬레이터에서 실제 화면으로 재현해봤습니다. 셋 다 사용자 눈에 아무 변화도 없었습니다.
- 화면 전환 효과 하나는 두 가지 구조로 실험해봤는데 둘 다 그냥 가로 슬라이드였습니다. 문서가 말한 효과가 특정 네비게이션 구조 조합에서는 적용되지 않는 듯했습니다.
- 복사 기능 하나는 터치 전용 화면에 애초에 그 기능을 실행할 트리거가 없었습니다. 길게 눌러도 메뉴가 안 뜨고, 붙여넣기 버퍼는 미리 심어둔 테스트 값 그대로였습니다.
- 툴바 우선순위 기능 하나는 항목 배치상 "넘칠" 수가 없는 구조였습니다. 코드만 읽어도 알 수 있는 것이었는데 놓쳤습니다.
문서 인용은 "이 API가 무엇을 한다"까지만 증명합니다. "내 화면에서 그 일이 일어난다"는 전혀 증명하지 않습니다.
빌드 성공도, 심볼 존재도 마찬가지입니다. 셋 다 통과한 채로 다섯 건이 무효였습니다.
여기서 선택이 갈립니다
당신이라면 "채택 완료"의 기준을 어디에 두겠습니까 — 빌드가 되면, 문서가 그렇다고 하면, 아니면 화면이 실제로 달라지면?
저는 마지막으로 옮겼고, 판정 방법을 실측으로 정립했습니다.
- 화면 전환·애니메이션: 시뮬레이터 화면 녹화 → 프레임 추출 → 연속 프레임 차이로 전환 구간을 찾고 중간 프레임 한 장을 봅니다.
- 복사/붙여넣기: 클립보드에 센티넬 값을 미리 심고 → 조작 → 다시 읽어서 변경 여부를 확인합니다.
- 로그인이 필요한 화면: 앱 자체의 캡처용 진입 인자로 우회합니다.
자가진단
- 새 API를 채택할 때 시그니처만 있는 파일을 읽고 있습니까? 설명이 있는 파일은 따로 있습니다.
- "확인됨"이라고 적을 때, 근거가 문서 인용입니까 화면입니까?
- 당신이 붙인 API가 그 컨테이너 안에서 no-op일 가능성을 확인했습니까?
솔직한 부분
같은 실수를 두 번 했습니다. 처음엔 시그니처만 보고, 두 번째는 문서만 보고요. 두 번 다 "근거가 있다"고 느꼈습니다.
느낌상 두 번째가 더 나빴습니다 — 문서를 인용해뒀기 때문에, 제 기록만 보면 검증된 것처럼 보였습니다. 아무도 다시 안 열어봤다면 그대로 남았을 겁니다. 열네 개 앱을 진단하고 전부 틀렸던 사건도 같은 모양입니다.
당신이 최근 "채택 완료"로 적어둔 항목 하나를 골라, 화면에서 뭐가 달라졌는지 한 문장으로 써보세요. 안 써지면 그건 아직 확인이 아닙니다.