코드 서명은 애플리케이션에 대한 코드 서명을 만드는 프로세스입니다. 이 서명은 애플리케이션의 무결성을 보장하고 모든 조작을 방지합니다. Apple 기기는 애플리케이션의 코드 서명을 사용하여 코드 서명이 생성된 후 변경된 사항을 감지합니다. 애플리케이션에 코드 서명이 없는 경우 기기는 사용자가 애플리케이션을 열기 전에 경고를 표시합니다.
참고: 애플리케이션을 공증하려면 Xcode 커맨드 라인 또는 Unity Build Automation으로 코드 서명을 해야 합니다.
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>
이러한 자격은 macOS 애플리케이션이 Hardened Runtime을 사용하는 데 필요한 최소한의 자격입니다. 애플리케이션에 더 많은 자격이 필요한 경우 이 목록에 추가하십시오.
애플리케이션을 코드 서명하려면 커맨드 라인을 사용해야 합니다. 컴퓨터에서 터미널을 열고 애플리케이션이 있는 디렉토리로 이동합니다.
코드 서명을 처리하는 데 필요한 읽기 권한이 있는지 확인하려면 다음 커맨드를 실행합니다("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 옵션과 이를 사용하여 문제를 해결하는 방법에 대한 자세한 내용은 코드 서명을 참조하십시오.