Mac App Store 외부 배포를 위한 Mac Catalyst 앱 게시
Mac App Store를 통해 Mac Catalyst 앱을 배포하는 대안은 Mac App Store 외부에 배포하는 것입니다. 이 방법을 사용하면 Mac Catalyst 앱을 다운로드하기 위해 선택한 위치에서 호스트할 수 있습니다. Apple 개발자 프로그램 및 Apple 개발자 엔터프라이즈 프로그램의 구성원은 이 배포 방식을 사용할 수 있습니다.
Mac Catalyst 앱을 배포하려면 프로비저닝 프로필을 사용하여 앱을 프로비전해야 합니다. 프로비저닝 프로필은 앱의 ID 및 의도한 배포 메커니즘뿐만 아니라 코드 서명 정보를 포함하는 파일입니다.
.NET 다중 플랫폼 앱 UI(.NET MAUI) Mac Catalyst 앱을 Mac App Store 외부에 배포하려면 해당 앱과 관련된 배포 프로비저닝 프로필을 빌드해야 합니다. 이 프로필을 사용하면 앱이 Mac에 설치될 수 있도록 릴리스에 디지털 서명할 수 있습니다. 배포 프로비저닝 프로필에는 앱 ID 및 개발자 ID 애플리케이션 인증서가 포함됩니다. 개발자 ID 애플리케이션 인증서를 만들어 자신 또는 조직을 식별해야 합니다(아직 없는 경우). 또한 개발자 ID 설치 관리자 인증서를 만들어 앱의 설치 관리자 패키지에 서명해야 합니다.
Mac App Store 외부 배포를 위해 .NET MAUI Mac Catalyst 앱을 프로비전하는 프로세스는 다음과 같습니다.
- 두 개의 인증서 서명 요청을 만듭니다. 자세한 내용은 인증서 서명 요청 만들기를 참조 하세요.
- 개발자 ID 애플리케이션 인증서를 만듭니다. 자세한 내용은 개발자 ID 애플리케이션 인증서 만들기를 참조 하세요.
- 개발자 ID 설치 관리자 인증서를 만듭니다. 자세한 내용은 개발자 ID 설치 관리자 인증서 만들기를 참조 하세요.
- 앱 ID를 만듭니다. 자세한 내용은 앱 ID 만들기를 참조하세요.
- 프로비저닝 프로필을 만듭니다. 자세한 내용은 프로비저닝 프로필 만들기를 참조하세요.
- 프로비저닝 프로필을 다운로드합니다. 자세한 내용은 Xcode에서 프로비저닝 프로필 다운로드를 참조하세요.
Important
이 문서에서는 Apple 개발자 프로그램의 일부인 Apple 개발자 계정을 사용하여 Mac App Store 외부 배포에 대한 프로비저닝을 보여줍니다. 필요한 단계가 대부분 동일하기 때문에 Apple 개발자 엔터프라이즈 프로그램의 일부인 Apple 개발자 계정에도 사용할 수 있습니다.
그런 다음 프로비전이 완료되면 게시를 위해 앱을 준비하고 게시하고 다음 프로세스로 공지해야 합니다.
- 필요에 따라 앱에 자격을 추가합니다. 자세한 내용은 자격 추가를 참조 하세요.
- 앱의 Info.plist 파일을 업데이트합니다. 자세한 내용은 Info.plist 업데이트를 참조하세요.
- 앱에 대한 코드 서명 확인을 사용하지 않도록 설정합니다. 자세한 내용은 코드 서명 확인 사용 안 함을 참조 하세요.
- 명령줄을 사용하여 앱을 게시합니다. 자세한 내용은 명령줄을 사용하여 게시를 참조 하세요.
- 앱을 표기합니다. 자세한 내용은 앱 표기화를 참조하세요.
인증서 서명 요청 만들기
배포 인증서를 만들기 전에 먼저 Mac의 키 집합 액세스에서 CSR(인증서 서명 요청)을 만들어야 합니다.
Mac에서 키 집합 액세스를 시작합니다.
키 집합 액세스에서 키 집합 액세스 인증서 도우미 > 인증 기관에서 인증서 요청... 메뉴 항목을 선택합니다.>
인증서 도우미 대화 상자의 사용자 전자 메일 주소 필드에 전자 메일 주소를 입력합니다.
인증서 도우미 대화 상자의 일반 이름 필드에 키의 이름을 입력합니다.
인증서 도우미 대화 상자에서 CA 전자 메일 주소 필드를 비워 둡니다.
인증서 도우미 대화 상자에서 디스크에 저장 라디오 단추를 선택하고 계속을 선택합니다.
인증서 서명 요청을 알려진 위치에 저장합니다.
인증서 도우미 대화 상자에서 완료 단추를 선택합니다.
키 집합 액세스를 닫습니다.
이 프로세스를 반복하여 두 번째 인증서 서명 요청을 만듭니다. 첫 번째 CSR은 개발자 ID 애플리케이션 인증서를 만드는 데 사용됩니다. 두 번째는 개발자 ID 설치 관리자 인증서를 만드는 데 사용됩니다.
Important
동일한 인증서 서명 요청을 사용하여 개발자 ID 애플리케이션 인증서 및 개발자 ID 설치 관리자 인증서를 만들 수 없습니다.
개발자 ID 애플리케이션 인증서 만들기
CSR을 사용하면 ID를 확인하는 개발자 ID 인증서를 생성할 수 있습니다. Apple 개발자 계정의 Apple ID를 사용하여 개발자 ID 인증서를 만들어야 합니다.
Apple 개발자 계정에서 인증서, ID 및 프로필 탭을 선택합니다.
인증서, 식별자 및 프로필 페이지에서 단추를 선택하여 + 새 인증서를 만듭니다.
[새 인증서 만들기] 페이지에서 [계속] 단추를 선택하기 전에 [개발자 ID 애플리케이션] 라디오 단추를 선택합니다.
새 인증서 만들기 페이지에서 G2 하위 CA 라디오 단추를 선택한 다음 파일 선택을 선택합니다.
업로드할 파일 선택 대화 상자에서 이전에 만든 첫 번째 인증서 요청 파일(파일 확장명 포함 파일)을 선택한 다음 업로드를
.certSigningRequest
선택합니다.새 인증서 만들기 페이지에서 [계속] 단추를 선택합니다.
인증서 다운로드 페이지에서 다운로드 단추를 선택합니다.
인증서 파일(확장명 있는 파일
.cer
)이 선택한 위치에 다운로드됩니다.Mac에서 다운로드한 인증서 파일을 두 번 클릭하여 키 집합에 인증서를 설치합니다. 인증서는 키 집합 액세스의 내 인증서 범주에 표시되고 개발자 ID 애플리케이션으로 시작합니다.
참고 항목
키 집합 액세스에서 전체 인증서 이름을 기록해 둡다. 앱에 서명할 때 필요합니다.
개발자 ID 설치 관리자 인증서 만들기
CSR을 사용하면 앱의 설치 관리자 패키지에 서명하는 데 필요한 개발자 ID 설치 관리자 인증서를 생성할 수 있습니다. Apple 개발자 계정의 Apple ID를 사용하여 설치 관리자 인증서를 만들어야 합니다.
Apple 개발자 계정에서 인증서, ID 및 프로필 탭을 선택합니다.
인증서, 식별자 및 프로필 페이지에서 단추를 선택하여 + 새 인증서를 만듭니다.
[새 인증서 만들기] 페이지에서 [계속] 단추를 선택하기 전에 [개발자 ID 설치 관리자] 라디오 단추를 선택합니다.
새 인증서 만들기 페이지에서 G2 하위 CA 라디오 단추를 선택한 다음 파일 선택을 선택합니다.
업로드할 파일 선택 대화 상자에서 이전에 만든 두 번째 인증서 요청 파일(파일 확장명 파일)을 선택한 다음 업로드를
.certSigningRequest
선택합니다.새 인증서 만들기 페이지에서 [계속] 단추를 선택합니다.
인증서 다운로드 페이지에서 다운로드 단추를 선택합니다.
인증서 파일(확장명 있는 파일
.cer
)이 선택한 위치에 다운로드됩니다.Mac에서 다운로드한 인증서 파일을 두 번 클릭하여 키 집합에 인증서를 설치합니다. 인증서는 키 집합 액세스의 내 인증서 범주에 표시되며 개발자 ID 설치 관리자로 시작합니다.
참고 항목
키 집합 액세스에서 전체 인증서 이름을 기록해 둡다. 앱에 서명할 때 필요합니다.
배포 프로필 만들기
배포 프로비저닝 프로필을 사용하면 .NET MAUI Mac Catalyst 앱을 디지털 서명하여 다른 Mac에 설치할 수 있습니다. Mac App Store 외부 배포를 위한 프로비저닝 프로필에는 앱 ID 및 개발자 ID 애플리케이션 인증서가 포함됩니다.
앱 ID 만들기
배포하는 앱을 식별하려면 앱 ID가 필요합니다. 앱 ID는 앱을 고유하게 식별하는 역방향 DNS 문자열과 유사하며 앱의 번들 식별자와 동일해야 합니다. 테스트를 위해 디바이스에 앱을 배포할 때 사용한 것과 동일한 앱 ID를 사용할 수 있습니다.
앱 ID에는 두 가지 유형이 있습니다.
- 와일드카드. 와일드카드 앱 ID를 사용하면 단일 앱 ID를 사용하여 여러 앱을 일치시킬 수 있으며 일반적으로 양식을
com.domainname.*
사용합니다. 와일드카드 앱 ID는 여러 앱을 배포하는 데 사용할 수 있으며 앱별 기능을 사용하도록 설정하지 않는 앱에 사용해야 합니다. - 명시적. 명시적 앱 ID는 단일 앱에 고유하며 일반적으로 형식
com.domainname.myid
을 사용합니다. 명시적 앱 ID를 사용하면 일치하는 번들 식별자를 사용하여 하나의 앱을 배포할 수 있습니다. 명시적 앱 ID는 일반적으로 Apple Pay 또는 Game Center와 같은 앱별 기능을 사용하도록 설정하는 앱에 사용됩니다. 기능에 대한 자세한 내용은 기능을 참조 하세요.
새 앱 ID를 만들려면 다음을 수행합니다.
Apple 개발자 계정에서 인증서, ID 및 프로필로 이동합니다.
인증서, 식별자 및 프로필 페이지에서 식별자 탭을 선택합니다.
식별자 페이지에서 단추를 선택하여 + 새 앱 ID를 만듭니다.
새 식별자 등록 페이지에서 [계속] 단추를 선택하기 전에 앱 ID 라디오 단추를 선택합니다.
새 식별자 등록 페이지에서 계속 단추를 선택하기 전에 앱을 선택합니다.
앱 ID 등록 페이지에서 설명을 입력하고 명시적 또는 와일드카드 번들 ID 라디오 단추를 선택합니다. 그런 다음, 역방향 DS 형식으로 앱의 번들 ID를 입력합니다.
Important
입력한 번들 ID는 앱 프로젝트의 Info.plist 파일에 있는 번들 식별자에 해당해야 합니다.
.NET MAUI 앱의 번들 식별자는 프로젝트 파일에 애플리케이션 ID 속성으로 저장됩니다. Visual Studio의 솔루션 탐색기 .NET MAUI 앱 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 그런 다음 MAUI 공유 > 일반 탭으로 이동합니다. 애플리케이션 ID 필드에는 번들 식별자가 나열됩니다.
애플리케이션 ID 필드의 값이 업데이트되면 Info.plist의 번들 식별자 값이 자동으로 업데이트됩니다.
앱 ID 등록 페이지에서 앱에서 사용하는 기능을 선택합니다. 이 페이지와 앱 프로젝트의 Entitlements.plist 파일 모두에서 모든 기능을 구성해야 합니다. 자세한 내용은 기능 및 자격을 참조하세요.
앱 ID 등록 페이지에서 계속 단추를 선택합니다.
앱 ID 확인 페이지에서 등록 단추를 선택합니다.
프로비저닝 프로필 만들기
앱 ID가 만들어지면 배포 프로비저닝 프로필을 만들어야 합니다. 이 프로필을 사용하면 앱이 Mac에 설치될 수 있도록 릴리스에 디지털 서명할 수 있습니다.
Mac App Store 외부에서 배포를 위한 프로비저닝 프로필을 만들려면 다음을 수행합니다.
Apple 개발자 계정의 인증서, 식별자 및 프로필 페이지에서 프로필 탭을 선택합니다.
프로필 탭에서 단추를 클릭하여 + 새 프로필을 만듭니다.
[새 프로비전 프로필 등록] 페이지에서 [계속] 단추를 클릭하기 전에 [개발자 ID] 라디오 단추를 선택합니다.
프로비전 프로필 생성 페이지에서 Mac Catalyst 라디오 단추를 선택합니다. 그런 다음 앱 ID 드롭다운에서 계속 단추를 클릭하기 전에 이전에 만든 앱 ID를 선택합니다.
프로비전 프로필 생성 페이지에서 계속 단추를 클릭하기 전에 배포 인증서에 해당하는 라디오 단추를 선택합니다.
프로비전 프로필 생성 페이지에서 생성 단추를 클릭하기 전에 프로비전 프로필의 이름을 입력합니다.
참고 항목
앱에 서명할 때 필요하므로 프로비저닝 프로필 이름을 기록해 둡다.
프로비전 프로필 생성 페이지에서 필요에 따라 다운로드 단추를 클릭하여 프로비전 프로필을 다운로드합니다.
참고 항목
지금 프로비저닝 프로필을 다운로드할 필요는 없습니다. 대신 Xcode에서 이 작업을 수행합니다.
Xcode에서 프로비저닝 프로필 다운로드
Apple 개발자 계정에서 프로비저닝 프로필을 만든 후 Xcode는 앱 서명에 사용할 수 있도록 다운로드할 수 있습니다.
Mac에서 Xcode를 시작합니다.
Xcode에서 Xcode > 기본 설정... 메뉴 항목을 선택합니다.
기본 설정 대화 상자에서 계정 탭을 선택합니다.
계정 탭에서 단추를 클릭하여 + Apple 개발자 계정을 Xcode에 추가합니다.
계정 유형 팝업에서 Apple ID를 선택한 다음 계속 단추를 클릭합니다.
로그인 팝업에서 Apple ID를 입력하고 다음 단추를 클릭합니다.
로그인 팝업에서 Apple ID 암호를 입력하고 다음 단추를 클릭합니다.
계정 탭에서 인증서 관리... 단추를 클릭하여 배포 인증서가 다운로드되었는지 확인합니다.
계정 탭에서 수동 프로필 다운로드 단추를 클릭하여 프로비저닝 프로필을 다운로드합니다.
다운로드가 완료되기를 기다린 다음 Xcode를 닫습니다.
자격 추가
Apple의 앱 샌드박스는 앱이 손상될 경우 손상을 포함하도록 Mac 앱의 시스템 리소스 및 사용자 데이터에 대한 액세스를 제한합니다. 필요에 따라 Mac App Store 외부에 배포되는 Mac Catalyst 앱에 사용하도록 설정할 수 있습니다.
.NET MAUI 앱 프로젝트의 Platforms/MacCatalyst 폴더에 Entitlements.plist 파일을 추가하여 이 작업을 수행할 수 있습니다.
<?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.app-sandbox</key>
<true/>
</dict>
</plist>
앱 샌드박스 자격은 형식boolean
의 com.apple.security.app-sandbox
키를 사용하여 정의됩니다. 앱 샌드박스에 대한 자세한 내용은 developer.apple.com App Sandbox를 사용하여 사용자 데이터 보호를 참조하세요. 앱 샌드박스 자격에 대한 자세한 내용은 앱 샌드박스 자격을 참조 하세요.
앱에서 나가는 네트워크 연결을 여는 경우 Entitlements.plist 파일에 형식boolean
의 키도 추가 com.apple.security.network.client
해야 합니다.
<?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.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
나가는 네트워크 연결 권한에 대한 자세한 내용은 developer.apple.com com.apple.security.network.client 를 참조하세요.
Info.plist 업데이트
앱을 게시하기 전에 추가 정보로 Info.plist 파일을 업데이트해야 합니다.
사용자 인터페이스 관용구 지정
Mac Catalyst 앱은 iPad 또는 Mac 사용자 인터페이스 관용구에서 실행할 수 있습니다.
- iPad 사용자 인터페이스 관용구는 iPad와 유사한 모양을 유지하면서 Mac 디스플레이 환경과 일치하도록 앱의 사용자 인터페이스 크기를 조정하도록 macOS에 지시합니다.
- Mac 사용자 인터페이스 관용구는 Mac 표시 환경과 일치하도록 앱의 사용자 인터페이스 크기를 조정하지 않습니다. 일부 컨트롤은 크기와 모양을 변경하며, 컨트롤과 상호 작용하는 것은 컨트롤과
AppKit
상호 작용하는 것과 동일하게 느껴집니다.
기본적으로 .NET MAUI Mac Catalyst 앱은 iPad 사용자 인터페이스 관용구를 사용합니다. 원하는 동작인 경우 앱의 Info.plist 파일이 키 값 UIDeviceFamily
으로 2만 지정하는지 확인합니다.
<key>UIDeviceFamily</key>
<array>
<integer>2</integer>
</array>
Mac 사용자 인터페이스 관용구를 채택하려면 앱의 Info.plist 파일을 업데이트하여 키 값 UIDeviceFamily
으로 6을 지정합니다.
<key>UIDeviceFamily</key>
<array>
<integer>6</integer>
</array>
Mac Catalyst 사용자 인터페이스 관용구에 대한 자세한 내용은 Mac Catalyst 앱에 대한 UI 관용구 지정을 참조하세요.
앱의 기본 언어 및 지역 설정
CFBundleDevelopmentRegion
앱의 Info.plist string
에 있는 키를 지역화 네이티브 개발 지역을 나타내는 키로 설정합니다.
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
키 값은 선택적 지역 지정자가 있는 언어 지정자여야 합니다. 자세한 내용은 developer.apple.com CFBundleDevelopmentRegion 을 참조하세요.
저작권 키 설정
NSHumanReadableCopyright
앱의 Info.plist에 있는 키를 사용자가 읽을 수 있는 string
앱의 저작권 알림을 나타내는 키로 설정합니다.
<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>
자세한 내용은 developer.apple.com NSHumanReadableCopyright 를 참조하세요.
앱의 암호화 사용 선언
앱에서 암호화를 사용하고 미국 또는 캐나다 외부로 배포하려는 경우 미국 내보내기 규정 준수 요구 사항이 적용됩니다. Info.plist 파일에서 앱의 암호화 사용에 대한 정보를 제공할 수 있습니다.
이 작업은 앱이 암호화를 ITSAppUsesNonExemptEncryption
사용하는지 여부를 나타내는 값으로 boolean
앱의 Info.plist에 키를 추가하여 수행됩니다.
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
자세한 내용은 developer.apple.com 대한 암호화 내보내기 규정 준수를 참조하세요.
코드 서명 확인 사용 안 함
현재 프로비저닝 요구 사항을 충족하는 경우 Mac App Store 외부에서 배포할 .NET MAUI Mac Catalyst 앱을 게시하려고 하면 코드 3을 종료하는 동안 codesign
오류가 발생합니다.
/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/tools/msbuild/iOS/Xamarin.Shared.targets(1930,3): error MSB6006: "codesign" exited with code 3. [/Users/davidbritch/Projects/MyMauiApp/MyMauiApp/MyMauiApp.csproj::TargetFramework=net8.0-maccatalyst]
앱에 성공적으로 서명하는 동안 codesign
대상은 _CodesignVerify
코드 서명을 확인하지 못합니다.
test-requirement: code failed to satisfy specified code requirement(s)
이 오류로 인해 .pkg 파일이 생성되지 않습니다.
따라서 코드 서명 확인을 사용하지 않도록 설정하려면 현재 프로젝트 파일의 끝에 다음 빌드 대상을 추가해야 합니다.
<Project Sdk="Microsoft.NET.Sdk">
...
<Target Name="_SkipCodesignVerify" BeforeTargets="_CodesignVerify" AfterTargets="_CodesignAppBundle">
<PropertyGroup>
<_RequireCodeSigning>false</_RequireCodeSigning>
</PropertyGroup>
</Target>
</Project>
명령줄을 사용하여 게시
Mac의 명령줄에서 Mac Catalyst 앱을 게시하려면 터미널을 열고 .NET MAUI 앱 프로젝트의 폴더로 이동합니다. dotnet publish
다음 매개 변수를 제공하여 명령을 실행합니다.
매개 변수 | 값 |
---|---|
-f 또는 --framework |
대상 프레임워크입니다 net8.0-maccatalyst . |
-c 또는 --configuration |
빌드 구성입니다 Release . |
-p:MtouchLink |
프로젝트에 None SdkOnly Full 대한 링크 모드입니다. |
-p:CreatePackage |
true 빌드가 끝날 때 앱에 대한 패키지(.pkg)가 만들어지도록 설정합니다. |
-p:EnableCodeSigning |
true 코드 서명을 사용하도록 설정합니다. |
-p:EnablePackageSigning |
true 생성된 패키지가 서명되도록 설정합니다. |
-p:CodesignKey |
코드 서명 키의 이름입니다. 키 집합 액세스에 표시된 대로 배포 인증서의 이름으로 설정합니다. |
-p:CodesignProvision |
앱 번들에 서명할 때 사용할 프로비전 프로필입니다. |
-p:CodesignEntitlements |
앱에 필요한 자격을 지정하는 권한 파일의 경로입니다. Platforms\MacCatalyst\Entitlements.plist 로 설정합니다. |
-p:PackageSigningKey |
패키지에 서명할 때 사용할 패키지 서명 키입니다. 키 집합 액세스에 표시된 대로 설치 관리자 인증서의 이름으로 설정합니다. |
-p:RuntimeIdentifier |
프로젝트의 RID(런타임 식별자)입니다. .NET MAUI Mac Catalyst 앱의 릴리스 빌드는 기본적으로 유니버설 앱을 지원하기 위해 런타임 식별자로 사용 maccatalyst-x64 및 maccatalyst-arm64 사용됩니다. 단일 아키텍처만 지원하려면 지정 maccatalyst-x64 하거나 maccatalyst-arm64 . |
-p:UseHardenedRuntime |
true Mac App Store 외부에 배포되는 Mac Catalyst 앱에 필요한 강화된 런타임을 사용하도록 설정합니다. |
Warning
.NET MAUI 솔루션을 게시하려고 하면 명령이 솔루션의 dotnet publish
각 프로젝트를 개별적으로 게시하려고 시도하므로 솔루션에 다른 프로젝트 형식을 추가한 경우 문제가 발생할 수 있습니다. 따라서 명령의 dotnet publish
범위를 .NET MAUI 앱 프로젝트로 지정해야 합니다.
프로젝트 파일에서 제공되지 않는 경우 명령줄에 추가 빌드 매개 변수를 <PropertyGroup>
지정할 수 있습니다. 다음 표에서는 몇 가지 일반적인 매개 변수를 나열합니다.
매개 변수 | 값 |
---|---|
-p:ApplicationTitle |
앱의 사용자 표시 이름입니다. |
-p:ApplicationId |
앱의 고유 식별자(예: com.companyname.mymauiapp .) |
-p:ApplicationVersion |
앱의 반복을 식별하는 빌드의 버전입니다. |
-p:ApplicationDisplayVersion |
앱의 버전 번호입니다. |
-p:RuntimeIdentifier |
프로젝트의 RID(런타임 식별자)입니다. .NET MAUI Mac Catalyst 앱의 릴리스 빌드는 기본적으로 유니버설 앱을 지원하기 위해 런타임 식별자로 사용 maccatalyst-x64 및 maccatalyst-arm64 사용됩니다. 단일 아키텍처만 지원하려면 지정 maccatalyst-x64 하거나 maccatalyst-arm64 . |
빌드 속성의 전체 목록은 프로젝트 파일 속성을 참조 하세요.
Important
이러한 모든 매개 변수의 값은 명령줄에 제공할 필요가 없습니다. 프로젝트 파일에서도 제공할 수 있습니다. 명령줄과 프로젝트 파일에 매개 변수가 제공되면 명령줄 매개 변수가 우선합니다. 프로젝트 파일에서 빌드 속성을 제공하는 방법에 대한 자세한 내용은 프로젝트 파일에서 빌드 속성 정의를 참조하세요.
예를 들어 다음 명령을 사용하여 Mac App Store 외부 배포를 위해 Mac에서 .pkg 빌드하고 서명합니다.
dotnet publish -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp (Non-App Store)" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.plist" -p:PackageSigningKey="Developer ID Installer: John Smith (AY2GDE9QM7)" -p:UseHardenedRuntime=true
참고 항목
.NET 8 dotnet publish
에서 명령은 기본적으로 구성으로 Release
설정됩니다. 따라서 명령줄에서 빌드 구성을 생략할 수 있습니다.
게시는 앱을 빌드, 서명 및 패키지한 다음, .pkg bin/Release/net8.0-maccatalyst/publish/ 폴더에 복사합니다. 단일 아키텍처만 사용하여 앱을 게시하면 bin/Release/net8.0-maccatalyst/{architecture}/publish/ 폴더에 게시됩니다.
서명 프로세스 중에 로그인 암호를 입력하고 다음을 허용 codesign
하고 productbuild
실행해야 할 수 있습니다.
명령에 대한 자세한 내용은 dotnet publish를 dotnet publish
참조하세요.
프로젝트 파일에서 빌드 속성 정의
명령줄에서 빌드 매개 변수를 지정하는 대신 프로젝트 파일에서 <PropertyGroup>
해당 매개 변수를 지정하는 것입니다. 다음 표에서는 몇 가지 일반적인 빌드 속성을 나열합니다.
속성 | 값 |
---|---|
<ApplicationTitle> |
앱의 사용자 표시 이름입니다. |
<ApplicationId> |
앱의 고유 식별자(예: com.companyname.mymauiapp .) |
<ApplicationVersion> |
앱의 반복을 식별하는 빌드의 버전입니다. |
<ApplicationDisplayVersion> |
앱의 버전 번호입니다. |
<CodesignKey> |
코드 서명 키의 이름입니다. 키 집합 액세스에 표시된 대로 배포 인증서의 이름으로 설정합니다. |
<CodesignEntitlements> |
앱에 필요한 자격을 지정하는 권한 파일의 경로입니다. Platforms\MacCatalyst\Entitlements.plist 로 설정합니다. |
<CodesignProvision> |
앱 번들에 서명할 때 사용할 프로비전 프로필입니다. |
<CreatePackage> |
true 빌드가 끝날 때 앱에 대한 패키지(.pkg)가 만들어지도록 설정합니다. |
<EnableCodeSigning> |
true 코드 서명을 사용하도록 설정합니다. |
<EnablePackageSigning> |
true 생성된 패키지가 서명되도록 설정합니다. |
<MtouchLink> |
프로젝트에 None SdkOnly Full 대한 링크 모드입니다. |
<PackageSigningKey> |
패키지에 서명할 때 사용할 패키지 서명 키입니다. 키 집합 액세스에 표시된 대로 설치 관리자 인증서의 이름으로 설정합니다. |
<RuntimeIdentifier> |
프로젝트의 RID(런타임 식별자)입니다. .NET MAUI Mac Catalyst 앱의 릴리스 빌드는 기본적으로 유니버설 앱을 지원하기 위해 런타임 식별자로 사용 maccatalyst-x64 및 maccatalyst-arm64 사용됩니다. 단일 아키텍처만 지원하려면 지정 maccatalyst-x64 하거나 maccatalyst-arm64 . |
<UseHardenedRuntime> |
true Mac App Store 외부에 배포되는 Mac Catalyst 앱에 필요한 강화된 런타임을 사용하도록 설정합니다. |
빌드 속성의 전체 목록은 프로젝트 파일 속성을 참조 하세요.
Important
이러한 빌드 속성의 값은 프로젝트 파일에 제공할 필요가 없습니다. 앱을 게시할 때 명령줄에서 제공할 수도 있습니다. 이렇게 하면 프로젝트 파일에서 특정 값을 생략할 수 있습니다.
다음 예제에서는 Mac App Store 외부에서 배포를 위해 Mac Catalyst 앱을 빌드하고 서명하는 일반적인 속성 그룹을 보여 줍니다.
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
<MtouchLink>SdkOnly</MtouchLink>
<EnableCodeSigning>True</EnableCodeSigning>
<EnablePackageSigning>true</EnablePackageSigning>
<CreatePackage>true</CreatePackage>
<CodesignKey>Developer ID Application: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp (Non-App Store)</CodesignProvision>
<CodesignEntitlements>Platforms\MacCatalyst\Entitlements.plist</CodesignEntitlements>
<PackageSigningKey>Developer ID Installer: John Smith (AY2GDE9QM7)</PackageSigningKey>
<UseHardenedRuntime>true</UseHardenedRuntime>
</PropertyGroup>
다음은 조건 검사를 통과하지 않는 한 설정이 처리되지 않도록 조건 검사를 추가하는 예제 <PropertyGroup>
입니다. 조건 검사는 다음 두 항목을 찾습니다.
- 빌드 구성이 .로 설정됩니다
Release
. - 대상 프레임워크는 텍스트
net8.0-maccatalyst
가 포함된 항목으로 설정됩니다. - 플랫폼이 .로 설정됩니다
AnyCPU
.
이러한 조건이 실패하면 설정이 처리되지 않습니다. 더 중요한 것은 <CodesignKey>
, <CodesignProvision>
및 <PackageSigningKey>
설정이 설정되지 않아 앱이 서명되지 않는다는 것입니다.
위의 속성 그룹을 추가한 후 터미널을 열고 .NET MAUI 앱 프로젝트의 폴더로 이동하여 Mac의 명령줄에서 앱을 게시할 수 있습니다. 그런 후 다음 명령을 실행합니다.
dotnet build -f net8.0-maccatalyst -c Release
참고 항목
.NET 8 dotnet publish
에서 명령은 기본적으로 구성으로 Release
설정됩니다. 따라서 명령줄에서 빌드 구성을 생략할 수 있습니다.
게시는 앱을 빌드, 서명 및 패키지한 다음, .pkg bin/Release/net8.0-maccatalyst/publish/ 폴더에 복사합니다.
앱 표기
macOS에는 신뢰할 수 있는 소프트웨어만 Mac에서 실행되는 데 도움이 되는 Gatekeeper라는 기술이 포함되어 있습니다. 사용자가 설치 관리자 패키지 또는 앱을 다운로드하여 열면 Gatekeeper는 소프트웨어가 식별된 개발자의 소프트웨어인지 확인합니다. 개발자 ID 인증서를 확인하고 Apple에서 알려진 악성 콘텐츠가 없도록 소프트웨어가 공증되고 변경되지 않았는지 확인하여 이 작업을 수행합니다. 따라서 앱을 프로비전하고 게시한 후에는 공지하도록 Apple에 제출해야 합니다. Apple의 공증 서비스는 개발자 ID 서명 앱을 자동으로 검사하고 보안 검사를 수행합니다. 공증에 성공하면 소프트웨어에 공증된 것을 게이트키퍼에게 알리는 티켓이 할당됩니다.
명령줄 도구를 사용하여 Apple 공증 서비스에 notarytool
앱을 제출할 수 있습니다.
xcrun notarytool submit {my_package_filename} --wait --apple-id {my_apple_id} --password {my_app_specific_password} --team-id {my_team_id}
도구를 사용하여 notarytool
.NET MAUI Mac Catalyst .pkg 파일에 서명하는 예제는 다음과 같습니다.
xcrun notarytool submit MyMauiApp-1.0.pkg --wait --apple-id johm.smith@provider.com --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7
공증인 서비스가 제출 처리를 완료한 후에만 종료하라는 wait
플래그가 표시 notarytool
되므로 해당 상태에 대해 서비스를 폴링할 필요가 없습니다. 및 password
team-id
인수는 apple-id
App Store Connect 자격 증명을 제공하는 데 사용됩니다. App Store Connect에는 2단계 인증이 필요하므로 앱별 암호를 notarytool
만들어야 합니다. 앱별 암호를 만드는 방법에 대한 자세한 내용은 developer.apple.com 앱별 암호를 사용하여 Apple ID로 앱에 로그인을 참조하세요.
Apple에 앱을 제출한 후에는 일반적으로 1시간 미만이 소요됩니다.
참고 항목
5분 이내에 대부분의 앱에 대해 알림이 완료됩니다. 공증 서비스에서 긴 응답 시간을 방지하는 방법에 대한 자세한 내용은 긴 공증 응답 시간 및 developer.apple.com 크기 제한 방지를 참조하세요.
공증이 성공하면 공증 서비스는 서명된 설치 관리자 패키지 및 그 안에 있는 앱 번들에 대한 티켓을 생성합니다.
미증화에 대한 자세한 내용은 배포 전에 macOS 소프트웨어의 Notarizing을 참조하세요. Apple 공증 서비스에 앱을 제출하는 다른 방법은 developer.apple.com 공증 서비스에 앱 업로드를 참조하세요. 일반적인 notarization 문제를 해결하는 방법에 대한 자세한 내용은 일반적인 참고 자료 문제 해결을 참조하세요.
앱에 대한 티켓 스테이플
공증은 서명된 설치 관리자 패키지와 그 안에 있는 앱 번들에 대한 티켓을 생성하며, 이는 Gatekeeper에게 앱이 공증됨을 알려줍니다. 표기화가 완료되면 사용자가 macOS 10.14 이상에서 앱을 실행하려고 하면 Gatekeeper가 온라인으로 티켓을 찾습니다.
표기 성공 후 도구를 사용하여 stapler
앱에 티켓을 연결해야 합니다. 이렇게 하면 네트워크 연결을 사용할 수 없는 경우에도 Gatekeeper가 티켓을 찾을 수 있습니다. 다음 명령을 실행하여 티켓을 .pkg 연결합니다.
xcrun stapler staple {filename}.pkg
도구는 stapler
티켓을 검색하고 설치 관리자 패키지에 연결합니다. 스테이플링이 성공하면 스테이플 및 유효성 검사 작업이 작동했다는 메시지가 표시됩니다.
notarization 유효성 검사
표기화의 유효성을 검사하려면 다음 명령을 사용하여 유효성을 검사할 수 있습니다.
xcrun stapler validate mypackage.pkg
앱 배포
서명되고 공증된 .pkg 웹 서버와 같이 선택한 위치에서 Mac App Store 외부에 안전하게 배포할 수 있습니다.
Mac에서 앱을 안전하게 여는 방법에 대한 자세한 내용은 support.apple.com Mac에서 안전하게 앱 열기를 참조하세요.
참고 항목
.NET MAUI