공증은 Apple이 애플리케이션에 개발자 ID 코드 서명이 있는지 그리고 악의적인 콘텐츠가 있진 않은지 확인하는 프로세스입니다. 공증에 대한 자세한 내용은 배포 전에 macOS 소프트웨어 공증에 있는 Apple 문서를 참조하십시오.
Apple 기기에서 개발 중인 경우 Xcode 또는 Xcode 커맨드 라인 툴, Unity 클라우드 빌드를 사용하여 애플리케이션을 공증할 수 있습니다. Apple 기기를 가지고 있지 않은 경우 Unity 클라우드 빌드를 사용합니다.
이 페이지에는 공증 방법에 관한 다음의 정보가 포함되어 있습니다.
Unity는 빌드 프로세스 동안 Unity 프로젝트를 나타내는 Xcode 프로젝트를 만들 수 있습니다. 이 Xcode 프로젝트를 사용하여 애플리케이션을 공증할 수 있습니다. Unity 프로젝트에서 Xcode 프로젝트를 만들려면 macOS 애플리케이션 빌드 단계를 따라야 합니다. Xcode 프로젝트를 공증하는 방법에 대한 정보는 배포 전에 macOS 소프트웨어 공증에 있는 Apple 문서를 참조하십시오.
Xcode 환경에서 애플리케이션을 공증할 수 없는 경우 또는 수동으로 공증을 제어하고자 하는 경우 Xcode 커맨드 라인 툴을 사용할 수 있습니다. 해당 툴을 사용하려면 다음 사항이 필요합니다.
애플리케이션을 Xcode 커맨드 라인 툴로 공증하려면 먼저 애플리케이션을 코드 서명해야 합니다. 이 섹션은 Xcode의 커맨드 라인 툴을 사용하여 애플리케이션을 코드 서명하는 방법을 설명합니다. 코드 서명이 무엇이며 Apple이 코드 서명을 요구하는 이유에 대한 정보는 코드 서명을 참조하십시오.
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가 필요합니다. 특정 디지털 배포 서비스에 필요한 서명 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에 필요한 사항은 다음과 같습니다.
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를 포함하고 있다는 점을 표시하는 메시지가 반환됩니다.
애플리케이션을 공증하고 나면 이를 실행하는 모든 기기는 코드 서명이 있고 악의적인 콘텐츠가 포함되지 않았는지를 확인할 수 있습니다. 하지만 해당 기기는 인터넷이 연결되어 있는 경우에만 이를 수행할 수 있습니다. 인터넷 연결없이 기기에서 애플리케이션을 확인할 수 있게 하려면 반드시 애플리케이션을 스테이플해야 합니다. 스테이플링에 대한 자세한 내용은 배포에 티켓 스테이플을 참조하십시오. 애플리케이션을 스테이플하려면 다음을 수행하십시오.
xcrun stapler staple "ApplicationName.app"
커맨드를 실행합니다. 여기서 "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
를 설정합니다.