MacOS용 .NET 애플리케이션을 게시하려면 Apple의 보안 요구 사항으로 인해 다른 플랫폼에 비해 몇 가지 추가 단계가 필요합니다.
필수 조건
macOS용 .NET 애플리케이션을 게시하기 전에 다음이 있는지 확인합니다.
- Apple 개발자 계정: 코드 서명 및 표기화에 필요합니다.
-
Xcode 명령줄 도구: 및 기타 유틸리티를 제공합니다
codesignaltool. - .NET SDK: 최신 .NET SDK가 설치되어 있는지 확인합니다.
.NET SDK를 사용하여 앱 생성
.NET 애플리케이션 게시 개요에 설명된 방법 중 하나를 사용하여 애플리케이션을 생성합니다. 프레임워크 종속 애플리케이션 또는 자체 포함 애플리케이션을 만들 수 있습니다.
앱 서명 및 표기
Apple의 개발자 설명서를 사용하여 앱 네이티브 이진 파일에 서명하고 표기합니다. .NET은 네이티브 apphost 실행 파일을 앱의 진입점으로 만듭니다. 이 apphost는 서명되어야 하며 앱에서 특수 기능을 사용하는 경우 적절한 자격이 할당되어야 합니다.
네이티브 AOT로 게시되지 않은 앱에 대한 권한
네이티브 AOT로 게시되지 않은 앱에는 com.apple.security.cs.allow-jit 권한이 필요합니다.
네이티브 AOT로 게시된 앱의 권한
네이티브 AOT로 게시된 앱의 경우 자격이 필요하지 않습니다.
디버깅 및 진단에 대한 선택적 권한
다음 자격은 추가 디버깅 및 진단 기능을 사용하도록 설정합니다.
-
com.apple.security.get-task-allow: 덤프 수집을 위해createdump와dotnet dump가 필요합니다. -
com.apple.security.cs.debugger: 프로세스에 디버거를 연결하는 데 필요합니다.
경고
앱에 서명하고 표기하지 못하면 제한된 작업을 실행하는 동안 애플리케이션이 충돌할 수 있습니다.
범용 이진 파일
macOS는 둘 이상의 CPU 아키텍처에 대한 컴퓨터 코드를 포함하는 단일 Mach-O 파일인 범용 이진 파일을 지원합니다. macOS는 현재 프로세서와 일치하는 조각을 선택하므로 Apple 실리콘(arm64) 및 Intel(x64) 컴퓨터 모두에서 기본적으로 하나의 파일이 실행됩니다.
.NET 유니버설 이진 파일을 직접 생성하지 않습니다. 대신 아키텍처당 앱을 한 번 게시하고 두 개의 네이티브 실행 파일을 Apple lipo 도구와 병합합니다. 두 .NET 게시 모드는 이러한 방식으로 병합할 수 있는 자체 포함 네이티브 실행 파일을 생성합니다.
-
단일 파일 앱 (
PublishSingleFile) -
네이티브 AOT 배포 (
PublishAot)
단일 파일 범용 이진 파일 게시
아키텍처별로 앱을 별도의 디렉터리에 게시합니다.
dotnet publish -c Release -r osx-arm64 --self-contained true \
-p:PublishSingleFile=true -o out/osx-arm64
dotnet publish -c Release -r osx-x64 --self-contained true \
-p:PublishSingleFile=true -o out/osx-x64
그런 다음 두 실행 파일을 병합하고 결과를 다시 서명합니다.
mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp
자체 포함된 단일 파일 게시는 런타임, 관리되는 어셈블리 및 네이티브 라이브러리를 실행 파일 자체에 포함하므로 병합된 파일은 전체 앱입니다. 범용 이진 파일은 대략 두 입력의 합계입니다.
병합된 실행 파일 옆에 있는 아키텍처별 출력 디렉터리(예: appsettings.json 번들에서 제외된 파일) 중 하나에서 나머지 파일을 복사합니다.
네이티브 AOT 범용 이진 파일 게시
단계는 단일 파일의 경우와 동일하지만 단일 파일 속성을 다음으로 PublishAot바꿉다.
dotnet publish -c Release -r osx-arm64 -p:PublishAot=true -o out/osx-arm64
dotnet publish -c Release -r osx-x64 -p:PublishAot=true -o out/osx-x64
mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp
네이티브 AOT는 단일 파일 게시보다 훨씬 작은 출력을 생성하므로 유니버설 이진 파일도 작게 유지됩니다.
네이 MyApp.dSYM 티브 AOT는 아키텍처당 디버그 기호 번들을 내보낸다. 두 조각에 대한 기호를 유지하려면 아키텍처별 디렉터리를 유지하거나 번들 내의 DWARF 이진 파일을 병합 lipo합니다.
.NET