Version: 2023.2
언어: 한국어
macOS 애플리케이션 코드 서명 및 공증
Xcode 및 커맨드 라인 툴로 공증

애플리케이션 코드 서명

코드 서명은 애플리케이션의 코드 서명을 생성하는 프로세스입니다. 이 서명은 애플리케이션의 무결성과 조작에 대한 보안을 보장합니다. Apple 기기는 애플리케이션의 코드 서명을 사용하여 개발자가 코드 서명을 생성한 이후에 발생한 변경 사항을 감지합니다. 애플리케이션에 코드 서명이 없는 경우 해당 기기는 사용자가 애플리케이션을 열기 전에 경고를 표시합니다.

참고: Xcode 커맨드 라인 또는 Unity 빌드 자동화를 사용하여 애플리케이션을 공증하려면 애플리케이션에 코드 서명을 해야 합니다.

서명 ID 생성

Unity는 생성된 모든 macOS 빌드에 서명 ID라는 코드 서명을 추가합니다. 애플리케이션을 공증하려면 Apple은 코드 서명에 개발자를 식별하는 개발자 ID 인증서와 같은 암호화 서명을 포함하도록 요구합니다.

새 개발자 ID 인증서를 생성하려면 다음 단계를 따르십시오.

  1. 새 인증서 생성으로 이동합니다.
  2. 프롬프트를 따라 프라이빗 키를 생성하고 Certificate Signing Request를 업로드합니다.
  3. 개발자 ID 인증서를 다운로드합니다. 이 인증서의 파일 형식은 .cer입니다.
  4. 인증서를 클릭하여 키체인에 추가합니다. 키체인 내에 Developer ID Application : XXX (YYY)라는 형식의 이름으로 표시됩니다.

애플리케이션 식별자 찾기

애플리케이션을 공증하려면 Apple은 애플리케이션 식별자를 사용하여 애플리케이션을 식별해야 합니다. 애플리케이션 식별자를 가져오는 방법에는 Unity에서 가져오는 방법과 애플리케이션의 정보 프로퍼티 목록 파일에서 가져오는 방법이 있습니다.

  • Unity에서 가져오는 방법:
    1. Edit > Project Settings > Player로 이동합니다.
    2. Other Settings* 섹션을 확장합니다.
    3. Mac App Store Options로 이동합니다.
    4. Bundle Identifier 프로퍼티가 애플리케이션 식별자입니다.
  • 정보 프로퍼티 리스트 파일에서 가져오는 방법:
    1. Finder에서 빌드된 애플리케이션으로 이동합니다.
    2. 애플리케이션을 오른쪽 클릭한 후 Show Package Contents를 선택합니다.
    3. Contents로 이동합니다.
    4. Info.plist를 엽니다.
    5. 애플리케이션 식별자를 나타내는 키는 CFBundleIdentifier입니다.

애플리케이션 식별자가 있는 경우 Apple에 등록할 수 있습니다. 그렇게 하려면 다음 단계를 따르십시오.

  1. Apple 개발자 계정에 로그인합니다.
  2. Certificates, IDs & Profiles를 선택합니다.
  3. Identifiers를 선택합니다.
  4. 번들 ID를 입력합니다.

자격 생성

자격은 코드 서명에 있는 권한이나 제한 사항으로, 애플리케이션이 수행하는 작업을 제어합니다.

애플리케이션에 대한 자격을 설정하려면 다음을 수행하십시오.

  1. 빌드된 애플리케이션과 동일한 디렉토리에서 .entitlements 파일 확장자로 애플리케이션과 동일한 이름을 가진 파일을 생성합니다. 예를 들어 애플리케이션 이름이 MyProject인 경우 MyProject.entitlements라는 이름의 파일을 생성합니다.
  2. 텍스트 에디터를 사용하여 파일을 열고 다음의 콘텐츠를 복사합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
       <key>com.apple.security.cs.disable-library-validation</key>
       <true/>
       <key>com.apple.security.cs.disable-executable-page-protection</key>
       <true/>
    </dict>
</plist>

이러한 자격은 Hardened Runtime을 갖기 위해 macOS 애플리케이션에서 필요한 최소한의 자격입니다. 애플리케이션에 더 많은 자격이 필요한 경우 이 리스트에 추가합니다.

애플리케이션 코드 서명

애플리케이션에 코드 서명을 하려면 커맨드 라인을 사용해야 합니다. 컴퓨터에서 터미널을 열고 애플리케이션이 있는 디렉토리로 이동합니다.

코드 서명을 처리하는 데 필요한 읽기 권한이 있는지 확인하려면 다음 커맨드를 실행합니다. 여기서 "application_name.app"은 애플리케이션의 이름입니다.

chmod -R a+xr "application_name.app"

애플리케이션을 코드 서명하려면 다음의 위치에 있는 커맨드를 실행합니다.

  • "application_name.app"은 빌드된 애플리케이션입니다.
  • "application_name.entitlements"자격 파일의 이름입니다.
  • "Developer ID Application : XXX (YYY)"서명 ID입니다.
codesign 
    --deep 
    --force 
    --verify 
    --verbose 
    --timestamp 
    --options runtime 
    --entitlements "application_name.entitlements" 
    --sign "Developer ID Application : XXX (YYY)" "application_name.app"

이 커맨드는 애플리케이션 번들 폴더를 통해 작동하며 모든 파일에 서명하고 안전한 타임스탬프를 추가하며 해당 서명에 설정한 자격을 포함합니다.

--deep 옵션을 사용하면 코드 서명에 문제가 발생할 수 있습니다. 원인은 다음과 같습니다.

  • 서명한 모든 코드에 동일한 코드 서명 옵션과 자격을 적용합니다.

  • 발견한 코드 파일만 서명합니다. 시스템이 데이터를 찾으리라 예상되는 위치에 코드 파일이 있는 경우 --deep을 사용하면 이러한 코드 파일을 서명하지 않습니다.

--deep 옵션과 이를 사용하여 문제를 해결하는 방법에 대한 자세한 내용은 코드 서명을 참조하십시오.

추가 리소스

macOS 애플리케이션 코드 서명 및 공증
Xcode 및 커맨드 라인 툴로 공증