클라우드 동기화 디렉터리에서 빌드한 뒤 코드 서명 단계가 실패합니다.
실패 환경이 macOS 14 이상이고 산출물도 실제 동기화 디렉터리 안에 있다면, Swift 6.4.2를 격리된 CI에서 시험할 만합니다. 다만 같은 커밋과 비교 가능한 경로로 재검증하기 전에는 수정 완료로 판정하지 마세요. Swift 6.4.2 공식 발표에는 해당 수정과 Xcode 27.2 포함 정보가 명시되어 있습니다. (forums.swift.org)

이 글은 Swift Package나 Apple 플랫폼 프로젝트의 macOS CI를 관리하며 패치 적용 여부를 확인하려는 개발자와 빌드 엔지니어를 위한 검수 절차입니다.
macOS 실행 노드의 도구 체인과 작업 경로를 관리하는 DevOps 담당자, 업그레이드의 단계적 적용 여부를 결정하는 릴리스 담당자도 대상입니다.

01

수정 범위와 실패 지점이 맞는지 먼저 확인합니다

공식 수정 설명은 macOS 14 이상에서 클라우드 동기화 디렉터리 안에 빌드할 때 발생하는 코드 서명 실패를 가리킵니다. 모든 codesign 오류를 이 문제로 분류하지 마세요. 인증서 접근, 권한, 프로비저닝 프로파일, 서명 설정이 원인일 수 있습니다.

먼저 실패한 작업 단계를 분리합니다. 컴파일에서 멈췄는지, 서명 명령 실행 중 실패했는지, 서명 뒤 검증에서 거부되었는지 기록합니다. 이어서 운영체제 버전과 실패 시점의 실제 경로를 확인합니다. 저장소가 동기화 폴더에 있어도 파생 데이터나 아카이브, 서명 입력 파일은 다른 경로에 있을 수 있습니다.

Swift 공식 발표의 범위는 특정한 운영체제와 디렉터리 조건을 전제로 합니다. 따라서 프로젝트에 수정이 적용될지는 빌드 경로와 실패 단계가 해당 조건에 들어맞는지로 판단해야 합니다. (forums.swift.org)

02

도구 체인 확인은 버전과 실행 경로를 함께 봅니다

Swift 6.4.2 공식 발표는 Xcode 27.2에 해당 버전이 포함된다고 설명합니다. 그러나 CI에 Xcode 27.2가 설치되어 있다는 사실만으로 작업이 그 도구 체인을 호출한다고 볼 수는 없습니다. Apple은 활성 개발자 디렉터리를 확인하고 선택하는 방법을 안내합니다. (forums.swift.org)

문제가 난 CI 작업과 동일한 실행 환경에서 다음 명령을 기록합니다.

sw_vers
xcode-select --print-path
xcrun --find swift
swift --version

출력은 실제 실행 결과로 보존해야 합니다. 아래는 로그에서 확인할 항목을 설명하기 위한 형식 예시이며, 특정 노드의 실측 결과가 아닙니다.

ProductVersion: <실제 macOS 버전>
<활성 개발자 디렉터리 경로>
<실행 중인 swift 경로>
Swift version <실제 출력>

xcode-select --print-path는 활성 개발자 디렉터리를 보여 주며, xcrun --find swift는 해당 환경에서 선택된 swift 실행 파일 경로를 확인하는 데 도움을 줍니다. 작업별 DEVELOPER_DIR 설정이나 독립 설치 도구 체인을 사용한다면 그 설정도 함께 기록하세요. Xcode 앱 버전과 명령줄에서 실제 선택한 도구 체인은 별도 항목으로 관리해야 합니다. (developer.apple.com)

03

빌드 산출물의 실제 위치를 비교합니다

동기화 폴더에서 저장소를 열었다는 이유만으로 서명 대상도 그 안에 있다고 추정하지 마세요. 작업 공간, 파생 데이터, 아카이브, 서명 대상 앱이나 프레임워크의 경로를 각각 확인합니다. CI 변수가 경로를 바꾸거나 심볼릭 링크를 거치는 경우에는 최종 경로도 로그에 남깁니다.

검수 항목 동기화 경로 시험 비동기화 경로 대조
커밋과 빌드 입력 동일 커밋·설정으로 실행 같은 커밋·설정 유지
저장소 및 산출물 경로 실제 경로와 서명 입력 기록 작업 공간과 산출물을 일반 로컬 경로로 지정
도구 체인과 서명 설정 버전·경로·설정 보존 동일한 값인지 확인
결과 비교 실패 단계와 로그 저장 빌드·서명·검증 단계를 각각 대조

두 시험에서 경로 외의 조건이 바뀌면 결과를 경로 차이의 증거로 해석하기 어렵습니다. 캐시 상태나 환경 변수 등 영향을 줄 수 있는 설정도 기록하고, 두 작업에 차이가 있는지 비교하세요.

04

서명 성공은 산출물 검증까지 이어져야 합니다

빌드 명령이 성공해도 배포 파일의 서명이 유효하다고 단정할 수 없습니다. CI 로그에서 빌드, 서명, 서명 검증의 결과를 따로 보존하고, 각 결과를 같은 커밋과 산출물에 연결하세요.

배포할 앱이나 서명 대상에 대해 다음과 같이 검증할 수 있습니다.

codesign --verify --deep --strict --verbose=2 "/path/to/App.app"

실제 경로로 바꿔 실행하고 전체 출력을 남깁니다. Apple 문서는 서명 검증에 codesign을 이용하는 방법을 설명하며, --deep은 검증에 쓸 수 있지만 복잡한 제품을 서명할 때는 피하라고 안내합니다. 위 명령은 검증 예시이지 서명 명령이 아닙니다. (developer.apple.com)

수정 전후의 로그만 비교하지 말고, 실제 산출물의 검증 결과도 대조하세요. 한 번의 성공은 해당 실행에서 실패가 재현되지 않았다는 증거일 뿐입니다. 반복 작업에서 같은 결과가 나오는지 확인하고, 실패 단계가 바뀌거나 다른 서명 오류가 나타나는지도 살펴야 합니다.

05

격리 시험 결과로 적용 범위를 결정합니다

검수 결과는 다음 기준으로 나눕니다.

  • 운영체제와 동기화 경로, 실패 단계가 공식 설명과 맞고 새 도구 체인에서 동기화 경로 시험이 통과하면 제한된 작업부터 적용합니다.
  • 비동기화 경로에서도 같은 실패가 나거나 오류가 인증서·권한 관련 단계에 있다면, 이 수정만으로 해결된다고 보지 말고 원인 조사를 계속합니다.
  • 경로 대조 결과가 다르지만 도구 체인이나 캐시 설정도 달랐다면, 비교 조건을 다시 맞춥니다.
  • 로그와 검증 결과가 커밋에 연결되지 않았다면 성공 판정을 보류하고 증거를 다시 수집합니다.

적용 전에는 아래 항목을 CI 작업별로 확인합니다.

  • [ ] 실패한 작업 단계와 원래 오류 출력을 저장했습니다.
  • [ ] 실행 노드의 macOS 버전과 도구 체인 경로를 기록했습니다.
  • [ ] 활성 Xcode 선택과 swift 실행 파일 경로, 버전 출력을 함께 보존했습니다.
  • [ ] 저장소, 파생 데이터, 아카이브와 서명 입력의 실제 경로를 확인했습니다.
  • [ ] 같은 커밋과 동일한 빌드·서명 조건으로 두 경로를 비교했습니다.
  • [ ] 빌드와 서명, 산출물 검증 결과를 각각 커밋에 연결했습니다.
  • [ ] 반복 확인 전에는 단일 성공을 안정성 보증으로 취급하지 않았습니다.

도구 체인과 경로를 고정해도 원인이 다른 서명 실패는 남을 수 있습니다. 배포 서명 체계를 별도로 검토해야 한다면 Apple의 macOS 코드 서명 안내에서 서명 절차와 중첩 코드 관련 주의점을 확인할 수 있습니다. (developer.apple.com)

마지막 업데이트: 2026년 11월 1일. Swift 6.4.2 공식 발표와 Apple의 Xcode 릴리스 정보를 기준으로 확인했습니다. 새 도구 체인이나 노드 설정을 적용할 때는 CI에서 위 확인 명령을 다시 실행하세요. (forums.swift.org)

06

자주 묻는 검수 판단

Swift 6.4.2의 수정 대상은 어떤 경우인가요?

공식 발표가 명시한 조건은 macOS 14 이상과 클라우드 동기화 디렉터리 안에서 수행하는 빌드, 그리고 그 환경에서의 코드 서명 실패입니다. 실패 로그와 실제 서명 입력 경로가 이 조건에 맞는지 먼저 확인하세요. 단순히 저장소가 동기화 폴더에 있다는 사실만으로 수정 대상이라고 확정할 수 없습니다.

Xcode 27.2에 포함된 도구 체인을 사용 중인지 어떻게 확인하나요?

Swift 공식 발표는 Xcode 27.2에 Swift 6.4.2가 포함된다고 안내합니다. CI 작업 안에서 xcode-select --print-path, xcrun --find swift, swift --version 결과를 함께 수집하면 선택된 개발자 디렉터리와 실행 파일, 버전을 대조할 수 있습니다. Xcode 설치 목록만 확인하는 것으로 실제 작업의 실행 도구 체인을 증명할 수는 없습니다.

업그레이드 후에도 서명 오류가 계속되면 무엇을 대조하나요?

오류가 컴파일, 서명, 검증 가운데 어느 단계에서 발생했는지 확인하세요. 이어서 같은 커밋으로 동기화 경로와 비동기화 경로를 비교하고, 도구 체인과 서명 설정이 일치하는지 점검합니다. codesign 검증 출력, 빌드 로그, 산출물 경로를 함께 보존하면 수정 대상과 무관한 인증서 또는 권한 문제를 구분하는 데 도움이 됩니다.

07

CI 실행 환경을 분리할 필요가 있는 경우

현재 실행 방식이 일반 클라우드 서버라면 macOS 전용 도구 체인 선택의 제약, 서명 키와 인증서 관리, 작업 경로의 재현성 문제가 운영 부담으로 이어질 수 있습니다. 반대로 로컬 맥은 이미 사용할 수 있고 빌드량도 안정적으로 감당한다면, 별도 원격 환경이 늘 효율적인 선택은 아닙니다.

macOS에서 계속 빌드하고 서명해야 하며 테스트용 실행 환경을 분리하고 싶다면, 먼저 NodeMini의 원격 맥 환경 안내와 맥 미니 환경을 살펴본 뒤 실제 CI 도구 체인과 경로 요구 사항에 맞는지 검토할 수 있습니다. 임시 검증이나 단계적 마이그레이션에는 원격 맥 대여가 구매보다 유연할 수 있지만, 지속적인 고정 부하나 물리 인터페이스 접근이 필수인 작업은 자체 장비가 더 적합할 수 있습니다. (forums.swift.org)