이 페이지에서는 macOS 애플리케이션의 코드 서명 및 공증 프로세스에 대해 자세히 설명합니다.
코드 서명은 애플리케이션에 대한 코드 서명을 만드는 프로세스입니다.이 서명은 애플리케이션의 무결성을 보장하고 모든 조작을 방지합니다.Apple 기기는 애플리케이션의 코드 서명을 사용하여 코드 서명이 생성된 후 변경된 사항을 감지합니다.애플리케이션에 코드 서명이 없는 경우 기기는 최종 사용자가 애플리케이션을 열기 전에 경고를 표시합니다.Unity는 macOS용으로 빌드하는 모든 애플리케이션에 자동으로 코드 서명을 합니다.
공증은 Apple이 애플리케이션에 개발자 ID 코드 서명이 있고 악성 콘텐츠가 포함되어 있지 않은지 확인하는 과정입니다.공증에 대한 자세한 내용은 macOS 코드 서명 자세히 알아보기 및 배포 전 macOS 소프트웨어 공증하기에 대한 Apple 문서를 참조하십시오.
Apple 기기에서 개발 중인 경우 Xcode, Xcode 커맨드 라인 툴 또는 Unity 클라우드 빌드를 사용하여 애플리케이션을 공증할 수 있습니다.Apple 기기를 가지고 있지 않은 경우 Unity 클라우드 빌드를 사용합니다.
이 페이지에는 다음 공증 방법에 관한 정보가 포함되어 있습니다.
참고:Mac 앱 스토어를 통해 애플리케이션을 배포할 때 공증은 필요하지 않습니다.Mac 앱 스토어의 업로드 프로세스에는 공증과 유사한 콘텐츠 확인이 포함되어 있습니다.자세한 내용은 Mac 앱 스토어에 배포를 참조하십시오.
Unity는 빌드 프로세스 중에 Unity 프로젝트를 나타내는 Xcode 프로젝트를 생성할 수 있습니다.이 Xcode 프로젝트를 사용하여 애플리케이션을 공증할 수 있습니다.macOS 애플리케이션 빌드 단계에 따라 Unity 프로젝트에서 Xcode 프로젝트를 생성합니다.Xcode 프로젝트 공증에 대한 자세한 내용은 Apple의 [배포 전 macOS 소프트웨어 공증] 문서(https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution)를 참조하십시오.
Xcode 환경에서 애플리케이션을 공증할 수 없거나 수동으로 공증을 제어하려는 경우 Xcode의 커맨드 라인 툴을 사용할 수 있습니다.이를 위해서는 다음이 필요합니다.
Xcode 커맨드 라인 툴로 애플리케이션을 공증하려면 먼저 애플리케이션에 코드 서명을 해야 합니다.이 섹션에서는 Xcode의 커맨드 라인 툴을 사용하여 애플리케이션에 코드 서명하는 방법을 설명합니다.
Unity는 제작하는 모든 macOS 빌드에 코드 서명을 추가합니다.이 간단한 코드 서명은 개발자로 식별하지 않습니다.Apple은 애플리케이션을 공증하기 위해 코드 서명에 개발자를 식별하는 암호화 서명을 포함하도록 요구합니다.이것을 서명 ID라고 합니다.일반적으로 개발자 ID 인증서를 사용합니다.
새로운 개발자 ID 인증서를 만들려면 새로운 인증서 생성으로 이동하여 다음을 수행합니다.
.cer
입니다.애플리케이션을 공증하려면 Apple은 해당 애플리케이션을 식별해야 합니다. 애플리케이션 식별자를 가져오려면 Unity에서 가져오는 방법과 빌드된 애플리케이션의 정보 프로퍼티 리스트 파일에서 가져오는 방법이 있습니다.
애플리케이션 식별자가 있으면 Apple에 등록할 수 있습니다. 등록하려면 다음을 수행하십시오.
자격은 코드 서명이 포함하고 있는 권한이나 제한 사항으로 애플리케이션이 특정 작업을 수행하는 것을 허용하거나 방지합니다.
애플리케이션에 대한 자격을 설정하려면 다음을 수행하십시오.
.entitlements
파일 확장자로 애플리케이션과 동일한 이름을 가진 파일을 생성합니다. 예를 들어 애플리케이션 이름이 Sample인 경우 Sample.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"
코드 서명은 특정 서명 ID를 사용합니다.일반적으로 이것은 개발자 ID 애플리케이션 서명 ID입니다.단, Mac 앱 스토어와 같은 일부 디지털 배포 서비스에는 다른 서명 ID가 필요합니다.
애플리케이션을 코드 서명하려면 다음의 위치에 있는 커맨드를 실행합니다.
"application_name.app"
은 빌드된 애플리케이션입니다."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
옵션과 이를 사용하여 문제를 해결하는 방법에 대한 자세한 내용은 코드 서명을 참조하십시오.
애플리케이션에 코드 서명한 후에는 공증을 위해 Apple에 업로드해야 합니다.업로드 요구사항을 충족하려면 다음 항목이 필요합니다.
Apple에서는 공증하기 위해 애플리케이션을 업로드하기 전에 압축해야 합니다. 압축하려면 다음을 수행하십시오.
터미널을 열고 애플리케이션이 있는 디렉토리로 이동합니다.
"application_name.app"
은 빌드된 애플리케이션입니다."application_name.zip"
은 생성할 압축 파일 이름입니다.ditto -c -k --sequesterRsrc --keepParent "application_name.app" "application_name.zip"
이는 애플리케이션을 압축하고 압축한 파일을 애플리케이션과 동일한 디렉토리로 출력합니다.
애플리케이션을 공증하려면 Apple에는 특정 포맷으로 된 고유한 비밀번호가 필요합니다. 애플리케이션 비밀번호를 생성하려면 Apple ID가 있어야 합니다. Apple ID가 없는 경우 Apple Id 관리로 이동하여 ID를 만듭니다.
애플리케이션 비밀번호를 생성하는 방법에 대한 자세한 내용은 앱별 비밀번호 생성 방법을 참조하십시오.생성한 비밀번호는Xxxx-xxxx-xxxx-xxxx
포맷을 사용합니다.
공급자 약칭은 개인이나 회사를 식별하는 단일 단어 레이블입니다. Apple은 Apple ID가 둘 이상의 조직과 연관될 때 공증할 조직을 결정하는 데 공급자 약칭을 사용합니다. 공급자 약칭을 가져오려면 다음을 수행하십시오.
apple_id
는 Apple ID입니다.xxxx-xxxx-xxxx-xxxx
는 애플리케이션 비밀번호입니다.xcrun iTMSTransporter -m provider -u apple_id -p xxxx-xxxx-xxxx-xxxx
Apple에서 애플리케이션을 공증할 경우 공증 서버에 업로드해야 합니다. 업로드하려면 다음을 수행하십시오.
apple_id
는 Apple ID입니다.xxxx-xxxx-xxxx-xxxx
는 애플리케이션 비밀번호입니다.provider_short_name
은 공급자 약칭입니다.application_bundle_id
는 애플리케이션의 애플리케이션 식별자입니다.application_name.zip
은 압축 애플리케이션입니다.xcrun altool --notarize-app --username apple_id --password xxxx-xxxx-xxxx-xxxx --asc-provider provider_short_name --primary-bundle-id application_bundle_id --file application_name.zip
업로드를 성공한 경우 Apple은 요청 ID가 포함된 터미널에 리스폰스를 표시합니다. 이 요청 ID를 사용하여 요청 상태를 확인할 수 있습니다. 이는 서비스의 트래픽에 따라 공증 프로세스에 몇 시간씩 걸릴 수도 있기 때문에 유용합니다. 요청 상태를 확인하려면 다음을 수행하십시오.
request_id
는 Apple이 이전 커맨드에서 반환한 요청 ID입니다.apple_id
는 Apple ID입니다.xxxx-xxxx-xxxx-xxxx
는 애플리케이션 비밀번호입니다.provider_short_name
은 공급자 약칭입니다.xcrun altool --notarization-info request_id --username apple_id --password xxxx-xxxx-xxxx-xxxx --asc-provider provider_short_name
공증 프로세스가 완료되면 Apple은 Apple ID와 연결된 이메일 주소로 확인 메일을 보냅니다. 그러면 공증이 성공했는지 확인할 수 있습니다. 확인하려면 다음을 수행하십시오.
application_name.app
는 애플리케이션 이름입니다.spctl -a -v application_name.app
공증을 성공한 경우 Apple이 애플리케이션을 수락하였으며 개발자 ID를 포함하고 있다는 점을 표시하는 메시지가 반환됩니다.
애플리케이션을 공증한 후에는 애플리케이션을 실행하는 모든 기기에 코드 서명이 있고 악성 콘텐츠가 포함되어 있지 않은지 확인할 수 있습니다.그러나 기기는 온라인에서만 이 인증을 수행할 수 있습니다.인터넷에 연결되지 않은 기기에서 애플리케이션을 확인하려면 애플리케이션을 스테이플해야 합니다.자세한 내용은 배포에 티켓 스테이플을 참조하십시오.
애플리케이션을 스테이플하려면,
"ApplicationName.app\"은 애플리케이션 이름입니다.
xcrun stapler staple “ApplicationName.app”`.Unity 클라우드 빌드는 빌드 프로세스 중에 macOS 애플리케이션을 공증하고 스테이플할 수 있습니다.이를 위해서는 Unity에 다음이 필요합니다.
.p12
파일을 생성하는 데 사용한 비밀번호개발 중인 플랫폼에 따라 이러한 요구 사항 중 일부에 대한 프로세스가 다릅니다.Apple 기기에서 개발하는 경우 Xcode 커맨드 라인 툴을 사용하여 정보를 가져오고 관련 파일을 생성할 수 있습니다.Windows 또는 Linux에서 개발하는 경우 Apple 전용 Xcode 커맨드 라인 툴에 액세스할 수 없습니다.
사용 중인 플랫폼에 상관 없이 Apple ID, 비밀번호, 자격 파일을 가져오는 프로세스는 다음과 같이 플랫폼 애그노스틱입니다.
이 단계를 완료한 후 다음을 수행합니다.
Apple 기기에서 개발하는 경우 Xcode 커맨드 라인 툴을 사용하여 Unity 클라우드 빌드를 사용한 공증에 나열된 요구 사항을 충족할 수 있습니다. 그런 다음 Unity 클라우드 빌드를 설정하여 빌드 프로세스의 일환으로 애플리케이션을 공증하고 스테이플할 수 있습니다. 요구 사항을 충족하려면 다음을 단계를 수행하십시오
.p12
) 포맷의 파일로 익스포트합니다.자세한 방법은 Mac에서 키체인 액세스를 사용하여 키체인 항목 임포트 및 익스포트를 참조하십시오.요구 사항을 충족하고 나면 Unity 클라우드 빌드 공증 양식을 채워 제출합니다.
Windows 또는 Linux에서 개발하면서 macOS용 애플리케이션을 빌드, 공증 및 스테이플하려는 경우 Xcode 커맨드 라인 툴을 사용할 수 없습니다.빌드 프로세스의 일부로 애플리케이션을 공증하고 스테이플하기 위해 Unity 클라우드 빌드를 설정하려면 Unity 클라우드 빌드를 사용한 공증에 나열된 요구 사항을 충족해야 합니다.
요구 사항을 충족하고 나면 Unity 클라우드 빌드 공증 양식을 채워 제출합니다.
.p12
파일은 개발자 ID 인증서와 프라이빗 키를 번들로 묶습니다. 개발자 ID 인증서에서 만드는 방법은 다음과 같습니다.
커맨드 라인 인터페이스를 열고 개발자 ID 인증서 파일이 들어 있는 디렉토리로 이동합니다.개발자 ID 인증서를 다운로드하지 않은 경우, 서명 ID를 참조하십시오.
.cer
파일 포맷을 사용합니다. 이 파일을 .pem
파일 포맷으로 전환합니다. 전환하려면 다음의 위치에 있는 커맨드를 실행합니다.
developer_identity.cer
은 전환할 개발자 ID 인증서입니다.developer_identity.pem
은 출력할 파일 이름이자 파일 타입입니다.openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
mykey.key
는 출력할 프라이빗 키 파일 이름입니다.openssl genrsa -out mykey.key 2048
.p12
파일을 생성합니다. 이 파일을 생성하려면 다음의 위치에 있는 커맨드를 실행합니다.
mykey.key
는 3단계에서 생성한 프라이빗 키 파일입니다.developer_identity.pem
은 2단계에서 생성한 .pem
파일입니다.openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12
Unity 클라우드 빌드를 사용한 공증에서 설명한 요구 사항을 충족하고 나면 다음의 단계를 따라 Unity 클라우드 빌드 공증을 설정합니다.
.p12
파일입니다..p12
파일을 생성할 때 제공한 비밀번호입니다.--deep --force --verify --verbose --timestamp --options runtime
플래그를 사용하여 codesign
커맨드를 실행합니다. 현재는 커스텀 플래그를 지정할 수 없습니다.FASTLANE_NOTARIZE_VERBOSE=true
를 사용하여 공증으로 인한 추가적인 로그 출력을 사용할 수 있습니다.