Skip to content

재서명과 충돌 방지 ​

재서명은 범용 복구 수단이 아닙니다

Ad-hoc 재서명은 개발자 서명을 교체하고 샌드박스, 앱 그룹, 키체인 권한을 제거합니다. WeChat이나 App Store 앱 같은 샌드박스 앱은 macOS 27에서 열리지 않거나 로그인 상태를 잃을 수 있습니다. 새 버전은 원본 앱 전체를 먼저 보관하므로 나중에 서명과 기존 권한을 복원할 수 있습니다. 이미 잃은 로그인 상태까지 복구된다고 보장하지는 않습니다.

1.9.0부터 샌드박스 앱 재서명은 기본적으로 거부하며 클래식 모드를 켜고 위험을 확인한 경우에만 허용합니다. 컨테이너 데이터는 서명 변경 없이 마운트 마이그레이션으로 옮깁니다. 배경은 컨테이너 데이터, 샌드박스와 서명 신원을 참고하세요.

재서명이 해결하는 문제 ​

macOS는 코드 서명으로 앱 번들의 무결성을 검사합니다. 실제 앱을 외장 드라이브로 옮기고 로컬에 실행 껍데기만 두면 일부 상황에서 시스템이 앱을 수정된 것으로 판단해 손상되었거나 확인되지 않은 개발자의 앱이라는 안내와 함께 실행을 거부할 수 있습니다. 이때 외장 드라이브의 실제 앱을 Ad-hoc 재서명하면 검사를 통과할 수 있습니다.

이것이 재서명의 유일한 용도입니다. 데이터 디렉토리 마이그레이션과는 관계없습니다. 이전 버전이 이를 컨테이너 데이터 마이그레이션과 묶은 것이 macOS 27 문제의 원인이었습니다.

사용하지 말아야 할 경우 ​

상황설명
샌드박스 앱기본적으로 거부. 클래식 모드에서 위험 확인 후 가능하지만 마운트 마이그레이션 우선
App Store 앱SIP 보호로 서명 불가
키체인 로그인 상태에 의존하는 앱재서명 후 로그인 상태 손실
위젯이나 공유 확장이 있는 앱앱 그룹 권한이 사라져 확장이 공유 데이터를 읽지 못함
정상적으로 열리는 앱문제가 없다면 서명하지 않기

외장 드라이브로 옮긴 뒤 실제로 손상 메시지가 뜨는 경우에만 고려하세요. 그전에도 재설치나 공식 사이트에서 다시 다운로드하는 방법을 먼저 시도하세요.

진입점과 설정 ​

항목위치기본값동작
이 앱 재서명앱 목록 우클릭 메뉴수동전체 백업 후 작업 사본에 서명. 기본적으로 샌드박스 앱 거부, 클래식 모드는 위험 확인 필요
마이그레이션 후 재서명데이터 디렉토리 상단 도구 막대, 클래식 모드에만 표시꺼짐심볼릭 링크 마이그레이션 후 연결된 앱 재서명
로그인 시 자동 재서명설정새 설치 시 꺼짐이전 기록만 처리. 전체 스냅샷이 있는 새 기록은 건너뛰어 서명 트랜잭션 우회 방지
원본 서명 복원앱 우클릭 메뉴, 데이터 페이지 도구 막대, 복구 패널수동전체 백업에서 원래 앱 복원. 이전 기록은 같은 버전의 공식 원본 선택 가능. 개발자 개인 키 불필요

샌드박스 판정은 로컬 실행 껍데기가 아닌 실제 앱의 권한을 읽습니다. com.apple.security.app-sandbox가 true면 거부합니다. 클래식 데이터 마이그레이션 모드에서는 매번 추가 확인을 거쳐 허용합니다.

서명 과정 ​

mermaid
flowchart TD
    A[실제 앱 경로와 클래식 모드 권한 확인] --> B[원본 앱 전체 저장 및 내용 검사]
    B --> C[같은 볼륨에 작업 사본 생성]
    C --> D[사본 재서명 및 검증]
    D --> E[원본과 재서명 내용 해시 저장]
    E --> F[현재 앱이 변경되지 않았는지 확인]
    F --> G[작업 사본과 현재 앱 원자적 교환]
    D -->|실패| H[현재 앱과 백업 보존]
    F -->|내용 변경| H
    G -->|저장 장치가 안전한 교환을 지원하지 않음| H

로컬 실행 껍데기는 먼저 실제 앱 경로로 해석합니다. 서명과 복원은 실제 .app에 적용하며 껍데기를 덮어쓰지 않습니다. 작업 사본의 서명이나 검증이 실패하면 현재 앱은 바뀌지 않으며 기존 잠금 상태도 보존합니다.

서명 백업과 복원 ​

전체 백업은 타사 개발자의 개인 키 없이 개발자 서명을 복원할 수 있습니다. 원본 서명이 이미 앱 파일에 포함되어 있기 때문입니다. 개발자 신원으로 다시 서명하는 것이 아니라 원래 파일을 복원합니다. 주 프로그램, 중첩된 도우미, 프레임워크, 서명 리소스와 기존 권한을 모두 저장합니다. 원래 Ad-hoc 서명이었거나 서명되지 않은 앱도 각각 원래 상태로 복원합니다.

백업은 ~/Library/Application Support/AppPorts/signature-backups/에 있으며 앱 식별자에 대응하는 .plist 기록과 original-…app 원본 사본으로 구성됩니다. 버전 2 형식의 기록에 원본과 재서명된 내용의 해시를 저장합니다. 지원 파일 시스템에서는 쓰기 시 복사를 우선 사용하며 그 외에는 전체 복사가 필요합니다. 백업과 작업 사본을 위한 공간을 확보하세요. 공간이 부족하거나 복사에 실패하면 서명을 중단합니다.

복원 단계:

  1. 앱을 종료합니다.
  2. 클래식 모드로 컨테이너 데이터를 옮겼다면 먼저 ‘앱 데이터’에서 해당 디렉토리를 복원합니다. 샌드박스 신원이 돌아오면 심볼릭 링크로 컨테이너 밖 데이터를 읽을 수 없습니다. AppPorts는 이를 검사하며 생략하지 못하게 합니다.
  3. 앱 우클릭 메뉴, 데이터 페이지 도구 막대 또는 복구 패널에서 ‘원본 서명 복원’을 누릅니다.
  4. AppPorts가 백업과 현재 앱의 업데이트·변경 여부를 검사합니다. 작업 사본에서 원본 서명을 검증한 뒤 안전하게 현재 앱을 교체하고 성공 후 백업을 정리합니다.

앱 업데이트, 내용 변경, 백업 손상이 있으면 복원을 중단하고 현재 앱과 백업을 보존합니다. 이전 버전으로 새 버전을 덮어쓰거나 새 버전의 재서명 결과와 이전 백업을 혼용하지 않습니다. 원자적 교환을 지원하지 않는 저장 장치에서는 앱을 먼저 이 Mac으로 옮긴 뒤 서명해야 합니다. 일반 스캔은 복구 자료를 자동 삭제하지 않습니다.

공식 업데이트나 재설치 후 현재 앱이 엄격한 서명 검사를 통과하고 개발자 신원이 기록과 같으면, 다시 재서명할 때 현재 앱의 전체 백업을 새로 만듭니다. 이전 기록은 signature-backups/retired/에 보관하고 해당 원본 사본도 남겨 새 버전 복원에 섞이지 않게 합니다. 보관 사본은 여전히 공간을 차지합니다. 이전 버전이 필요 없는지 확인한 뒤 기록의 snapshotName으로 해당 사본을 찾아 정리할 수 있습니다.

신원 이름만 있는 이전 백업은 어떻게 하나요? ​

이전 .plist에는 앱 식별자, 서명 신원 이름, 경로와 시간만 있습니다. 원본 프로그램과 권한 데이터가 없어 서명을 복원할 수 없습니다. 이전 버전이 Ad-hoc 기록을 서명 제거로 처리하거나 신원 이름으로 다시 서명하던 동작은 실제 복원이 아니었습니다.

새 버전은 이 기록을 보존하고 ‘원본 앱 선택…’을 제공합니다. 공식 경로에서 같은 앱, 같은 버전의 원본 .app을 구하세요. AppPorts는 Bundle ID, 버전과 서명을 검사하며 이전 기록에 개발자 신원이 있으면 그것도 확인합니다. 통과하면 현재 실제 앱 위치에 원본을 복원합니다. 로컬 실행 진입점은 계속 유효하며 선택한 원본 앱은 변경하지 않습니다.

같은 버전의 원본을 구할 수 없다면 복구 단계에 따라 데이터 복원, 실제 앱의 로컬 이동 후 공식 경로에서 재설치하세요. 이전 기록만으로 이미 잃은 서명을 만들어낼 수는 없습니다.

앱 유형별 관련 위험 ​

재서명과 직접 관련은 없지만 함께 자주 질문하는 내용입니다.

앱 유형위험설명
Sparkle / Electron 자동 업데이트 앱높음업데이터가 외장 앱을 삭제하거나 교체할 수 있으므로 ‘잠금 마이그레이션’ 사용
Chrome / Edge중간업데이트가 로컬에 설치되면 ‘내보내기 대기’로 다시 마이그레이션하도록 안내
App Store 앱높음서명 불가. macOS 15.1+에서는 App Store 자체 외장 설치 권장

자동 업데이트 앱 인식과 앱 유형 및 전략 비교를 참고하세요.

最近更新