코드 서명은 애플리케이션의 코드 서명을 생성하는 프로세스입니다. 이 서명은 애플리케이션의 무결성과 조작에 대한 보안을 보장합니다. Apple 기기는 애플리케이션의 코드 서명을 사용하여 개발자가 코드 서명을 생성한 이후에 발생한 변경 사항을 감지합니다. 애플리케이션에 코드 서명이 없는 경우 해당 기기는 사용자가 애플리케이션을 열기 전에 경고를 표시합니다.
참고: Xcode 커맨드 라인 또는 Unity 빌드 자동화를 사용하여 애플리케이션을 공증하려면 애플리케이션에 코드 서명을 해야 합니다.
Unity는 생성된 모든 macOS 빌드에 서명 ID라는 코드 서명을 추가합니다. 애플리케이션을 공증하려면 Apple은 코드 서명에 개발자를 식별하는 개발자 ID 인증서와 같은 암호화 서명을 포함하도록 요구합니다.
새 개발자 ID 인증서를 생성하려면 다음 단계를 따르십시오.
.cer
입니다.애플리케이션을 공증하려면 Apple은 애플리케이션 식별자를 사용하여 애플리케이션을 식별해야 합니다. 애플리케이션 식별자를 가져오는 방법에는 Unity에서 가져오는 방법과 애플리케이션의 정보 프로퍼티 목록 파일에서 가져오는 방법이 있습니다.
애플리케이션 식별자가 있는 경우 Apple에 등록할 수 있습니다. 그렇게 하려면 다음 단계를 따르십시오.
자격은 코드 서명에 있는 권한이나 제한 사항으로, 애플리케이션이 수행하는 작업을 제어합니다.
애플리케이션에 대한 자격을 설정하려면 다음을 수행하십시오.
.entitlements
파일 확장자로 애플리케이션과 동일한 이름을 가진 파일을 생성합니다. 예를 들어 애플리케이션 이름이 MyProject인 경우 MyProject.entitlements
라는 이름의 파일을 생성합니다.<?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
옵션과 이를 사용하여 문제를 해결하는 방법에 대한 자세한 내용은 코드 서명을 참조하십시오.