Version: 2022.1
언어: 한국어
macOS 애플리케이션 빌드
macOS 애플리케이션용 디지털 배포 서비스

macOS 애플리케이션 공증

공증은 Apple이 애플리케이션에 개발자 ID 코드 서명이 있는지 그리고 악의적인 콘텐츠가 있진 않은지 확인하는 프로세스입니다. 공증에 대한 자세한 내용은 배포 전에 macOS 소프트웨어 공증에 있는 Apple 문서를 참조하십시오.

Apple 기기에서 개발 중인 경우 Xcode 또는 Xcode 커맨드 라인 툴, Unity 클라우드 빌드를 사용하여 애플리케이션을 공증할 수 있습니다. Apple 기기를 가지고 있지 않은 경우 Unity 클라우드 빌드를 사용합니다.

이 페이지에는 공증 방법에 관한 다음의 정보가 포함되어 있습니다.

Xcode를 사용한 공증

Unity는 빌드 프로세스 동안 Unity 프로젝트를 나타내는 Xcode 프로젝트를 만들 수 있습니다. 이 Xcode 프로젝트를 사용하여 애플리케이션을 공증할 수 있습니다. Unity 프로젝트에서 Xcode 프로젝트를 만들려면 macOS 애플리케이션 빌드 단계를 따라야 합니다. Xcode 프로젝트를 공증하는 방법에 대한 정보는 배포 전에 macOS 소프트웨어 공증에 있는 Apple 문서를 참조하십시오.

Xcode 커맨드 라인 툴을 사용한 공증

Xcode 환경에서 애플리케이션을 공증할 수 없는 경우 또는 수동으로 공증을 제어하고자 하는 경우 Xcode 커맨드 라인 툴을 사용할 수 있습니다. 해당 툴을 사용하려면 다음 사항이 필요합니다.

애플리케이션 코드 서명

애플리케이션을 Xcode 커맨드 라인 툴로 공증하려면 먼저 애플리케이션을 코드 서명해야 합니다. 이 섹션은 Xcode의 커맨드 라인 툴을 사용하여 애플리케이션을 코드 서명하는 방법을 설명합니다. 코드 서명이 무엇이며 Apple이 코드 서명을 요구하는 이유에 대한 정보는 코드 서명을 참조하십시오.

ID 서명

Unity는 생성하는 모든 macOS 빌드에 코드 서명을 추가합니다. 이는 단순한 코드 서명이며 개발자로 식별하지는 않습니다. 애플리케이션을 공증하기 위해 Apple은 개발자를 식별하는 암호화 서명이 포함된 코드 서명이 필요합니다. 이를 서명 ID라고 합니다. 보통 개발자 ID 인증서를 사용합니다.

새로운 개발자 ID 인증서를 만들려면 새로운 인증서 생성으로 이동하여 다음을 수행합니다.

  1. 프롬프트를 따라 프라이빗 키를 생성하고 Certificate Signing Request를 업로드합니다.
  2. 개발자 ID 인증서를 다운로드합니다. 이 인증서의 파일 포맷은 .cer입니다.
  3. 인증서를 클릭하여 키체인에 추가합니다. 키체인 내에 Developer ID Application : XXX (YYY)라고 포맷한 이름으로 나타납니다.

애플리케이션 식별자

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

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

애플리케이션 식별자가 있으면 Apple에 등록할 수 있습니다. 등록하려면 다음을 수행하십시오.

  1. Apple Developer으로 이동하여 로그인합니다.
  2. Certificates, IDs & Profiles를 선택합니다.
  3. Identifiers를 선택한 후 번들 ID를 추가합니다.

자격

자격은 코드 서명이 포함하고 있는 권한이나 제한 사항으로 애플리케이션이 특정 작업을 수행하는 것을 허용하거나 방지합니다. 자세한 내용은 자격을 참조하십시오.

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

  1. 빌드된 애플리케이션과 동일한 디렉토리에서 .entitlements 파일 확장자로 애플리케이션과 동일한 이름을 가진 파일을 생성합니다. 예를 들어 애플리케이션 이름이 Sample인 경우 Sample.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"

코드 서명은 특정 서명 ID를 사용합니다. 이는 일반적으로 개발자 ID 애플리케이션 서명 ID입니다. 하지만 Mac 앱 스토어와 같은 일부 디지털 배포 서비스는 다른 서명 ID가 필요합니다. 특정 디지털 배포 서비스에 필요한 서명 ID에 관한 자세한 내용은 디지털 배포 서비스에 있는 문서를 참조하십시오.

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

  • "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 옵션과 이를 사용하여 문제를 해결하는 방법에 대한 자세한 내용은 코드 서명를 참조하십시오.

공증하기 위해 Apple에 업로드하기

애플리케이션을 코드 서명한 후 공증하기 위해 Apple에 업로드해야 합니다. 업로드하기 위해 Apple에 필요한 사항은 다음과 같습니다.

애플리케이션 압축

Apple에서는 공증하기 위해 애플리케이션을 업로드하기 전에 압축해야 합니다. 압축하려면 다음을 수행하십시오.

  1. 터미널을 열고 애플리케이션이 있는 디렉토리로 이동합니다.

  2. 다음의 위치에 있는 커맨드를 실행합니다.
    • "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가 둘 이상의 조직과 연관될 때 공증할 조직을 결정하는 데 공급자 약칭을 사용합니다. 공급자 약칭을 가져오려면 다음을 수행하십시오.

  1. 터미널을 엽니다.
  2. 다음 위치에 있는 Xcode 커맨드를 실행합니다.
xcrun iTMSTransporter -m provider -u apple_id -p xxxx-xxxx-xxxx-xxxx

업로드 프로세스 시작

Apple에서 애플리케이션을 공증할 경우 공증 서버에 업로드해야 합니다. 업로드하려면 다음을 수행하십시오.

  1. 터미널을 열고 압축 애플리케이션이 있는 디렉토리로 이동합니다.
  2. 다음의 위치에 있는 커맨드를 실행합니다.
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를 사용하여 요청 상태를 확인할 수 있습니다. 이는 서비스의 트래픽에 따라 공증 프로세스에 몇 시간씩 걸릴 수도 있기 때문에 유용합니다. 요청 상태를 확인하려면 다음을 수행하십시오.

  1. 터미널을 열고 압축 애플리케이션이 있는 디렉토리로 이동합니다.
  2. 다음의 위치에 있는 커맨드를 실행합니다.
xcrun altool --notarization-info request_id --username apple_id --password xxxx-xxxx-xxxx-xxxx --asc-provider provider_short_name

공증 프로세스가 완료되면 Apple은 Apple ID와 연결된 이메일 주소로 확인 메일을 보냅니다. 그러면 공증이 성공했는지 확인할 수 있습니다. 확인하려면 다음을 수행하십시오.

  1. 터미널을 열고 애플리케이션이 있는 디렉토리로 이동합니다.
  2. 다음의 위치에 있는 커맨드를 실행합니다.
    • application_name.app는 애플리케이션 이름입니다.
spctl -a -v application_name.app

공증을 성공한 경우 Apple이 애플리케이션을 수락하였으며 개발자 ID를 포함하고 있다는 점을 표시하는 메시지가 반환됩니다.

애플리케이션 스테이플링

애플리케이션을 공증하고 나면 이를 실행하는 모든 기기는 코드 서명이 있고 악의적인 콘텐츠가 포함되지 않았는지를 확인할 수 있습니다. 하지만 해당 기기는 인터넷이 연결되어 있는 경우에만 이를 수행할 수 있습니다. 인터넷 연결없이 기기에서 애플리케이션을 확인할 수 있게 하려면 반드시 애플리케이션을 스테이플해야 합니다. 스테이플링에 대한 자세한 내용은 배포에 티켓 스테이플을 참조하십시오. 애플리케이션을 스테이플하려면 다음을 수행하십시오.

  1. 터미널을 열고 애플리케이션이 있는 디렉토리로 이동합니다.
  2. xcrun stapler staple "ApplicationName.app" 커맨드를 실행합니다. 여기서 "ApplicationName.app"는 애플리케이션 이름입니다.

Unity 클라우드 빌드를 사용한 공증

Unity 클라우드 빌드는 빌드 프로세스 동안 macOS 애플리케이션을 공증하고 스테이플할 수 있습니다. 이를 위해서는 Unity에 다음 사항이 필요합니다.

어느 플랫폼에서 개발 중인지에 따라 몇 가지 요구 사항에 대한 프로세스가 다릅니다. Apple 기기에서 개발하는 경우 Xcode 커맨드 라인 툴을 사용하여 정보를 가져오고 관련 파일을 생성할 수 있습니다. 하지만 Windows 또는 Linux에서 개발하는 경우 Apple 전용 Xcode 커맨드 라인 툴에 액세스할 수 없습니다.

사용 중인 플랫폼에 상관 없이 Apple ID, 비밀번호, 자격 파일을 가져오는 프로세스는 다음과 같이 플랫폼 애그노스틱입니다.

  1. Apple ID가 없는 경우 Apple ID 관리로 이동하여 ID를 만듭니다.
  2. 애플리케이션 비밀번호를 생성합니다. 비밀번호 생성 방법에 대한 정보는 애플리케이션 비밀번호 생성을 참조하십시오.
  3. Apple 개발자 멤버십이 없는 경우 Apple 개발자에서 가입합니다.
  4. 애플리케이션에 대한 자격 파일을 만듭니다. 파일을 만드는 방법에 관한 정보는 자격을 참조하십시오.

이 단계를 완료한 후 다음을 수행합니다.

Apple 기기용 Unity 클라우드 빌드 공증

Apple 기기에서 개발하는 경우 Xcode 커맨드 라인 툴을 사용하여 Unity 클라우드 빌드를 사용한 공증에 나열된 요구 사항을 충족할 수 있습니다. 그런 다음 Unity 클라우드 빌드를 설정하여 빌드 프로세스의 일환으로 애플리케이션을 공증하고 스테이플할 수 있습니다. 요구 사항을 충족하려면 다음을 단계를 수행하십시오

  1. Unity 클라우드 빌드를 사용한 공증의 플랫폼 애그노스틱 단계를 따릅니다.
  2. 개발자 ID 인증서를 생성하여 키체인에 추가합니다. 이 방법에 대한 자세한 내용은 서명 ID를 참조하십시오.
  3. 키체인에서 개발자 ID 인증서를 Personal Information Exchange (.p12) 포맷의 파일로 익스포트합니다. 익스포트하는 방법에 대한 자세한 내용은 Mac용 키체인 접근을 사용하여 키체인 항목 가져오기 또는 내보내기를 참조하십시오.
  4. 공급자 약칭을 가져옵니다. 약칭을 가져오는 방법에 대한 정보는 공급자 약칭 가져오기를 참조하십시오.

요구 사항을 충족하고 나면 Unity 클라우드 빌드 공증 양식을 채워 제출합니다.

Windows 및 Linux 기기용 Unity 클라우드 빌드 공증

Windows 또는 Linux에서 개발하지만 macOS용 애플리케이션을 빌드하고 공증하여 스테이플하려는 경우 Xcode 커맨드 라인 툴을 사용할 수 없습니다. Unity 클라우드 빌드를 사용한 공증에 나열된 요구 사항을 충족하여 빌드 프로세스의 일환으로 애플리케이션을 공증하고 스테이플하려면 다음과 같이 Unity 클라우드 빌드를 설정할수 있습니다.

  1. Unity 클라우드 빌드를 사용한 공증의 플랫폼 애그노스틱 단계를 따릅니다.
  2. 개발자 ID 인증서를 생성하여 다운로드합니다. 이 방법에 대한 자세한 내용은 서명 ID를 참조하십시오. 참고: 서명 ID의 마지막 단계는 macOS 사용자에게만 해당됩니다.
  3. 개발자 ID 인증서를 PKCS #12 Personal Information Exchange (.p12) 파일 포맷으로 전환합니다. 전환하는 방법에 대한 자세한 내용은 Windows 및 Linux에서 개발자 ID 인증서를 .p12 파일로 전환을 참조하십시오.
  4. Apple 개발자 계정을 통해 공급자 약칭을 가져옵니다. 공급자 약칭을 가져오려면 Membership Details로 이동하여 Team ID를 찾습니다. Team ID를 공급자 약칭으로 사용할 수 있습니다.

요구 사항을 충족하고 나면 Unity 클라우드 빌드 공증 양식을 채워 제출합니다.

Windows 및 Linux에서 개발자 ID 인증서를 .p12 파일로 전환

.p12 파일은 개발자 ID 인증서와 프라이빗 키를 번들로 묶습니다. 개발자 ID 인증서에서 만드는 방법은 다음과 같습니다.

  1. 커맨드 라인 인터페이스를 열어 개발자 ID 인증서 파일이 포함된 디렉토리로 이동합니다. 개발자 ID 인증서를 다운로드하지 않은 경우 서명 ID를 참조하십시오.

  2. 개발자 ID 인증서는 .cer 파일 포맷을 사용합니다. 이 파일을 .pem 파일 포맷으로 전환합니다. 전환하려면 다음의 위치에 있는 커맨드를 실행합니다.
    • developer_identity.cer은 전환할 개발자 ID 인증서입니다.
    • developer_identity.pem은 출력할 파일 이름이자 파일 타입입니다.

    openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM

  3. 새로운 프라이빗 키를 생성합니다. 프라이빗 키를 생성하려면 다음 위치에 있는 커맨드를 실행합니다.
    • mykey.key는 출력할 프라이빗 키 파일 이름이자 파일 타입입니다.

    openssl genrsa -out mykey.key 2048

  4. .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 클라우드 빌드를 사용한 공증에서 설명한 요구 사항을 충족하고 나면 다음의 단계를 따라 Unity 클라우드 빌드 공증을 설정합니다.

  1. Unity 클라우드 빌드를 사용하기 위해 프로젝트를 설정합니다. 설정하는 방법에 대한 내용은 Unity 클라우드 빌드를 참조하십시오.
  2. 클라우드 빌드에 새로운 Mac Desktop 빌드 타겟을 생성합니다.
  3. Config 페이지로 돌아갑니다. 이제 이 페이지에는 Notarization 섹션이 포함되어 있습니다. 이 섹션을 열어 EDIT NOTARIZATION을 클릭합니다.
    설정 페이지에서 사용할 수 있는 섹션
  4. Notarization 플래그를 활성화합니다. 이전에 Unity 클라우드 빌드에 공증 자격 증명을 제공한 경우 동일한 조직에 대해서는 Credentials에서 자격 증명을 선택할 수 있습니다. 그 외에는 Add new provisioning credentials를 선택합니다.
    자격 증명 드롭다운
  5. 다음 사항을 제공합니다.
  6. 자격 증명을 저장합니다.
  7. Build History 페이지로 돌아가서 Mac 타겟에 대해 빌드를 시작합니다.
  8. 빌드를 성공하면 Unity 클라우드 빌드는 해당 결과를 공증하고 스테이플합니다.
    • 클라우드 빌드는 --deep --force --verify --verbose --timestamp --options runtime 플래그를 사용하여 codesign 커맨드를 실행합니다. 현재는 커스텀 플래그를 지정할 수 없습니다.
    • 공증에서 추가 로그 출력을 보려면 빌드 타겟인 환경 변수에서 환경 변수인 FASTLANE_NOTARIZE_VERBOSE=true를 설정합니다.
  9. Unity 클라우드 빌드가 프로젝트를 빌드, 공증, 스테이플하고 나면 빌드가 포함된 압축 파일을 다운로드할 수 있습니다.
macOS 애플리케이션 빌드
macOS 애플리케이션용 디지털 배포 서비스