명령줄을 사용하여 iOS 앱 게시

Mac의 명령줄에서 앱을 게시하려면 터미널을 열고 .NET 다중 플랫폼 앱 UI(.NET MAUI) 앱 프로젝트의 폴더로 이동합니다. dotnet publish 다음 매개 변수를 제공하여 명령을 실행합니다.

매개 변수
-f 또는 --framework 대상 프레임워크입니다 net8.0-ios.
-c 또는 --configuration 빌드 구성입니다 Release.

Warning

.NET MAUI 솔루션을 게시하려고 하면 명령이 솔루션의 dotnet publish 각 프로젝트를 개별적으로 게시하려고 시도하므로 솔루션에 다른 프로젝트 형식을 추가한 경우 문제가 발생할 수 있습니다. 따라서 명령의 dotnet publish 범위를 .NET MAUI 앱 프로젝트로 지정해야 합니다.

프로젝트 파일에서 제공되지 않는 경우 명령줄에 추가 빌드 매개 변수를 <PropertyGroup> 지정할 수 있습니다. 다음 표에서는 몇 가지 일반적인 매개 변수를 나열합니다.

매개 변수
-p:ApplicationTitle 앱의 사용자 표시 이름입니다.
-p:ApplicationId 앱의 고유 식별자(예: com.companyname.mymauiapp.)
-p:ApplicationVersion 앱의 반복을 식별하는 빌드의 버전입니다.
-p:ApplicationDisplayVersion 앱의 버전 번호입니다.
-p:RuntimeIdentifier 프로젝트의 RID(런타임 식별자)입니다. ios-arm64을 사용합니다.
-p:ArchiveOnBuild 앱 보관 파일을 생성할지 여부를 나타내는 부울 값입니다. .ipa생성하는 데 사용합니다true.
-p:CodesignKey 코드 서명 키의 이름입니다.
-p:CodesignProvision 앱 번들에 서명할 때 사용할 프로비전 프로필입니다.
-p:CodesignEntitlements 앱에 필요한 자격을 지정하는 권한 파일의 경로입니다.

빌드 속성의 전체 목록은 프로젝트 파일 속성을 참조 하세요.

Important

이러한 매개 변수의 값은 명령줄에 제공할 필요가 없습니다. 프로젝트 파일에서도 제공할 수 있습니다. 명령줄과 프로젝트 파일에 매개 변수가 제공되면 명령줄 매개 변수가 우선합니다. 프로젝트 파일에서 빌드 속성을 제공하는 방법에 대한 자세한 내용은 프로젝트 파일에서 빌드 속성 정의를 참조하세요.

예를 들어 다음 명령을 사용하여 Mac에서 .ipa빌드하고 서명합니다.

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp"

참고 항목

.NET 8 dotnet publish 에서 명령은 기본적으로 구성으로 Release 설정됩니다. 따라서 명령줄에서 빌드 구성을 생략할 수 있습니다. 또한 명령의 dotnet publish 기본값은 .입니다 ios-arm64RuntimeIdentifier. 따라서 RuntimeIdentifier 명령줄에서 생략할 수도 있습니다.

게시는 앱을 빌드하고 서명한 다음 bin/Release/net8.0-ios/ios-arm64/publish/ 폴더에 .ipa 를 복사합니다. 앱의 배포 채널은 프로비전 프로필에 포함된 배포 인증서에 지정됩니다. 다양한 배포 채널에 대한 프로비저닝 프로필을 만드는 방법에 대한 자세한 내용은 App Store 배포용 iOS 앱 게시, 임시 배포용 iOS 앱 게시 및 사내 배포용 iOS 앱 게시를 참조하세요.

명령에 대한 자세한 내용은 dotnet publishdotnet publish 참조하세요.

런타임 식별자

매개 변수가 RuntimeIdentifier 명령줄 또는 프로젝트 파일에 지정되지 않은 경우 빌드 프로세스는 기본적으로 시뮬레이터 런타임 식별자로 설정됩니다. 또한 명령줄에 런타임 식별자를 전달하면 프로젝트 파일에 여러 대상 프레임워크가 있는 경우 빌드가 복원되지 않습니다. 자세한 내용은 프로젝트 파일에 여러 프레임워크가 있는 경우 -f 및 -r을 dotnet 빌드에 모두 복원하지 못하도록 지정하는 것을 참조하세요.

이러한 문제에 대한 한 가지 해결 방법은 프로젝트 파일에 다음 <PropertyGroup> 을 추가하는 것입니다.

<PropertyGroup Condition="'$(IsPublishing)'  == 'true' And '$(TargetFramework)' == 'net7.0-ios'">
    <RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
</PropertyGroup>

그런 다음, 다음 명령을 사용하여 앱을 게시합니다.

dotnet publish -f net7.0-ios -p:IsPublishing=true ...

이러한 문제에 대한 대체 해결 방법은 프로젝트 파일에 다음 <PropertyGroup> 을 추가하는 것입니다.

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net7.0-ios'">
    <RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
</PropertyGroup>

그런 다음, 다음 명령을 사용하여 앱을 게시합니다.

dotnet publish -f net7.0-ios -c Release ...

프로젝트 파일에서 빌드 속성 정의

명령줄에서 빌드 매개 변수를 지정하는 대신 프로젝트 파일에서 <PropertyGroup>해당 매개 변수를 지정하는 것입니다. 다음 표에서는 몇 가지 일반적인 빌드 속성을 나열합니다.

속성
<ApplicationTitle> 앱의 사용자 표시 이름입니다.
<ApplicationId> 앱의 고유 식별자(예: com.companyname.mymauiapp.)
<ApplicationVersion> 앱의 반복을 식별하는 빌드의 버전입니다.
<ApplicationDisplayVersion> 앱의 버전 번호입니다.
<RuntimeIdentifier> 프로젝트의 RID(런타임 식별자)입니다. ios-arm64을 사용합니다.
<ArchiveOnBuild> 앱 보관 파일을 생성할지 여부를 나타내는 부울 값입니다. .ipa생성하는 데 사용합니다true.
<CodesignKey> 코드 서명 키의 이름입니다.
<CodesignProvision> 앱 번들에 서명할 때 사용할 프로비전 프로필입니다.
<CodesignEntitlements> 앱에 필요한 자격을 지정하는 권한 파일의 경로입니다.

빌드 속성의 전체 목록은 프로젝트 파일 속성을 참조 하세요.

Important

이러한 빌드 속성의 값은 프로젝트 파일에 제공할 필요가 없습니다. 앱을 게시할 때 명령줄에서 제공할 수도 있습니다. 이렇게 하면 프로젝트 파일에서 특정 값을 생략할 수 있습니다.

다음 예제에서는 프로비저닝 프로필을 사용하여 iOS 앱을 빌드하고 서명하기 위한 일반적인 속성 그룹을 보여 줍니다.

<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
  <RuntimeIdentifier>ios-arm64</RuntimeIdentifier> <!-- Required in .NET 7 but not in .NET 8 -->
  <CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp</CodesignProvision>
  <ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>

이 예제 <PropertyGroup> 에서는 조건 검사 추가하여 조건 검사 통과하지 않는 한 설정이 처리되지 않도록 합니다. 조건 검사 두 항목을 찾습니다.

  1. 대상 프레임워크는 텍스트 -ios가 포함된 항목으로 설정됩니다.
  2. 빌드 구성이 .로 설정됩니다 Release.

이러한 조건 중 하나가 실패하면 설정이 처리되지 않습니다. 더 중요한 것은 설정 및 <CodesignProvision> 설정이 <CodesignKey> 설정되지 않아 앱이 서명되지 않는다는 것입니다.

Windows에서 iOS 앱 게시

.NET MAUI를 사용하여 네이티브 iOS 앱을 빌드하려면 Mac에서만 실행되는 Apple의 빌드 도구에 액세스해야 합니다. 이 때문에 Visual Studio 2022는 네트워크에 액세스할 수 있는 Mac에 연결하여 .NET MAUI iOS 앱을 빌드해야 합니다. 자세한 내용은 iOS 개발을 위해 Mac에 페어링을 참조하세요.

참고 항목

Mac에 페어링이 처음으로 Visual Studio 2022에서 Mac 빌드 호스트에 로그인하면 SSH 키가 설정됩니다. 이러한 키를 사용하면 이후의 로그인에서 사용자 이름이나 암호가 필요하지 않습니다.

Windows의 명령줄에서 앱을 게시하려면 터미널을 열고 .NET MAUI 앱 프로젝트의 폴더로 이동합니다. dotnet publish 명령을 실행하여 Mac에서 게시할 때 제공할 것과 동일한 명령줄 매개 변수 또는 프로젝트 파일의 빌드 속성을 제공합니다. 또한 다음 명령줄 매개 변수를 제공해야 합니다.

매개 변수
-p:ServerAddress Mac 빌드 호스트의 IP 주소입니다.
-p:ServerUser Mac 빌드 호스트에 로그인할 때 사용할 사용자 이름입니다. 전체 이름이 아닌 시스템 사용자 이름을 사용합니다.
-p:ServerPassword Mac 빌드 호스트에 로그인하는 데 사용되는 사용자 이름의 암호입니다.
-p:TcpPort Mac 빌드 호스트와 통신하는 데 사용할 TCP 포트(58181)입니다.
-p:_DotNetRootRemoteDirectory .NET SDK를 포함하는 Mac 빌드 호스트의 폴더입니다. /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/을 사용합니다.

Important

이러한 매개 변수의 값은 프로젝트 파일에서 빌드 속성으로 제공할 수도 있습니다. 그러나 , 및 <ServerUser><ServerPassword><_DotNetRootRemoteDirectory> 값은 <ServerAddress>일반적으로 보안상의 이유로 명령줄에 제공됩니다.

예를 들어 다음 명령을 사용하여 Windows에서 .ipa빌드하고 서명합니다.

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp" -p:ServerAddress={macOS build host IP address} -p:ServerUser={macOS username} -p:ServerPassword={macOS password} -p:TcpPort=58181 -p:_DotNetRootRemoteDirectory=/Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/

참고 항목

.NET 8 dotnet publish 에서 명령은 기본적으로 구성으로 Release 설정됩니다. 따라서 명령줄에서 빌드 구성을 생략할 수 있습니다. 또한 명령의 dotnet publish 기본값은 .입니다 ios-arm64RuntimeIdentifier. 따라서 RuntimeIdentifier 명령줄에서 생략할 수도 있습니다.

참고 항목

ServerPassword 명령줄 빌드 호출에서 매개 변수를 생략하면 Mac에 페어링이 저장된 SSH 키를 사용하여 Mac 빌드 호스트에 로그인하려고 시도합니다.

게시는 앱을 빌드하고 서명한 다음 Windows 컴퓨터의 bin\Release\net8.0-ios\ios-arm64\publish 폴더에 .ipa 를 복사합니다. 앱의 배포 채널은 프로비전 프로필에 포함된 배포 인증서에 지정됩니다. 다양한 배포 채널에 대한 배포 프로비저닝 프로필을 만드는 방법에 대한 자세한 내용은 App Store 배포용 iOS 앱 게시, 임시 배포용 iOS 앱 게시 및 사내 배포용 iOS 앱 게시를 참조하세요.

게시 프로세스 중에 페어링된 Mac에서 실행할 수 있도록 허용 codesign 해야 할 수도 있습니다.

Allow codesign to sign your app on your paired Mac.

원격 빌드 문제 해결

RuntimeIdentifier Windows의 명령줄에서 원격으로 빌드할 때 a를 지정하지 않으면 Windows 컴퓨터의 아키텍처가 사용됩니다. 이는 빌드가 Mac에 연결하여 아키텍처를 파생하기 전에 빌드 프로세스 초기에 설정해야 하기 때문에 RuntimeIdentifier 발생합니다.

Windows에서 Visual Studio를 RuntimeIdentifier 사용하여 원격으로 빌드할 때 a가 지정되지 않은 경우 IDE는 원격 Mac의 아키텍처를 검색하고 그에 따라 설정합니다. 빌드 속성을 설정하여 기본값을 재정의할 $(ForceSimulatorX64ArchitectureInIDE) 수 있습니다.

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net8.0-ios'">
    <ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup>

앱 배포

.ipa 파일은 다음 방법 중 하나를 사용하여 배포할 수 있습니다.