Condividi tramite


Pubblicare un'app iOS usando la riga di comando

Per pubblicare l'app dalla riga di comando in un Mac, aprire un terminale e passare alla cartella per il progetto di app .NET Multipiattaforma (.NET MAUI). Eseguire il dotnet publish comando specificando i parametri seguenti:

Parametro Valore
-f oppure --framework Framework di destinazione, ovvero net8.0-ios.
-c oppure --configuration Configurazione di compilazione, ovvero Release.

Avviso

Se si tenta di pubblicare una soluzione MAUI .NET, il dotnet publish comando tenta di pubblicare ogni progetto nella soluzione singolarmente, causando problemi quando sono stati aggiunti altri tipi di progetto alla soluzione. Di conseguenza, il dotnet publish comando deve essere limitato al progetto di app .NET MAUI.

È possibile specificare parametri di compilazione aggiuntivi nella riga di comando, se non vengono forniti in un <PropertyGroup> nel file di progetto. La tabella seguente elenca alcuni dei parametri comuni:

Parametro Valore
-p:ApplicationTitle Nome visibile dall'utente per l'app.
-p:ApplicationId Identificatore univoco per l'app, ad esempio com.companyname.mymauiapp.
-p:ApplicationVersion Versione della build che identifica un'iterazione dell'app.
-p:ApplicationDisplayVersion Numero di versione dell'app.
-p:RuntimeIdentifier Identificatore di runtime (RID) per il progetto. Usare ios-arm64.
-p:ArchiveOnBuild Valore booleano che indica se produrre l'archivio dell'app. Usare true per produrre il file con estensione ipa.
-p:CodesignKey Nome della chiave di firma del codice.
-p:CodesignProvision Profilo di provisioning da usare per la firma del bundle dell'app.
-p:CodesignEntitlements Percorso del file entitlements che specifica i diritti richiesti dall'app.

Per un elenco completo delle proprietà di compilazione, vedere Proprietà del file di progetto.

Importante

Non è necessario specificare i valori per questi parametri nella riga di comando. Possono anche essere forniti nel file di progetto. Quando viene specificato un parametro nella riga di comando e nel file di progetto, il parametro della riga di comando ha la precedenza. Per altre informazioni sulla fornitura di proprietà di compilazione nel file di progetto, vedere Definire le proprietà di compilazione nel file di progetto.

Ad esempio, usare il comando seguente per compilare e firmare un file con estensione ipa in un Mac:

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"

Nota

In .NET 8 il dotnet publish comando usa per impostazione predefinita la Release configurazione. Di conseguenza, la configurazione della compilazione può essere omessa dalla riga di comando. Inoltre, per impostazione predefinita, il dotnet publish comando è .ios-arm64 RuntimeIdentifier Pertanto, RuntimeIdentifier può anche essere omesso dalla riga di comando.

La pubblicazione compila e firma l'app e quindi copia il file ipa nella cartella bin/Release/net8.0-ios/ios-arm64/publish/ . Il canale di distribuzione per l'app viene specificato nel certificato di distribuzione contenuto nel profilo di provisioning. Per informazioni sulla creazione di profili di provisioning per i diversi canali di distribuzione, vedere Pubblicare un'app iOS per la distribuzione di App Store, Pubblicare un'app iOS per la distribuzione ad hoc e Pubblicare un'app iOS per la distribuzione interna.

Per altre informazioni sul dotnet publish comando, vedere dotnet publish.

Definire le proprietà di compilazione nel file di progetto

Un'alternativa alla specifica dei parametri di compilazione nella riga di comando consiste nel specificarli nel file di progetto in un oggetto <PropertyGroup>. La tabella seguente elenca alcune delle proprietà di compilazione comuni:

Proprietà valore
<ApplicationTitle> Nome visibile dall'utente per l'app.
<ApplicationId> Identificatore univoco per l'app, ad esempio com.companyname.mymauiapp.
<ApplicationVersion> Versione della build che identifica un'iterazione dell'app.
<ApplicationDisplayVersion> Numero di versione dell'app.
<RuntimeIdentifier> Identificatore di runtime (RID) per il progetto. Usare ios-arm64.
<ArchiveOnBuild> Valore booleano che indica se produrre l'archivio dell'app. Usare true per produrre il file con estensione ipa.
<CodesignKey> Nome della chiave di firma del codice.
<CodesignProvision> Profilo di provisioning da usare per la firma del bundle dell'app.
<CodesignEntitlements> Percorso del file entitlements che specifica i diritti richiesti dall'app.

Per un elenco completo delle proprietà di compilazione, vedere Proprietà del file di progetto.

Importante

I valori per queste proprietà di compilazione non devono essere specificati nel file di progetto. Possono anche essere forniti nella riga di comando quando si pubblica l'app. In questo modo è possibile omettere valori specifici dal file di progetto.

L'esempio seguente mostra un gruppo di proprietà tipico per la compilazione e la firma dell'app iOS con il profilo di provisioning:

<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
  <CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp</CodesignProvision>
  <ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>

In questo esempio <PropertyGroup> viene aggiunto un controllo della condizione, impedendo l'elaborazione delle impostazioni a meno che il controllo della condizione non venga superato. Il controllo della condizione cerca due elementi:

  1. Il framework di destinazione è impostato su un elemento contenente il testo -ios.
  2. La configurazione della compilazione è impostata su Release.

Se una di queste condizioni ha esito negativo, le impostazioni non vengono elaborate. Ancora più importante, le <CodesignKey> impostazioni e <CodesignProvision> non sono impostate, impedendo la firma dell'app.

Pubblicare un'app iOS da Windows

La compilazione di app iOS native con .NET MAUI richiede l'accesso agli strumenti di compilazione di Apple, che vengono eseguiti solo in un Mac. Per questo motivo, Visual Studio 2022 deve connettersi a un Mac accessibile dalla rete per compilare app IOS MAUI .NET. Per altre informazioni, vedere Associare a Mac per lo sviluppo iOS.

Nota

La prima volta che Associa a Mac accede a un host di compilazione Mac da Visual Studio 2022, configura le chiavi SSH. Con queste chiavi, gli accessi futuri non richiederanno nome utente o password.

Per pubblicare l'app dalla riga di comando in Windows, aprire un terminale e passare alla cartella per il progetto di app MAUI .NET. Eseguire il dotnet publish comando, specificando gli stessi parametri della riga di comando o le proprietà di compilazione nel file di progetto, che si specificano durante la pubblicazione da un Mac. Inoltre, è necessario specificare i parametri della riga di comando seguenti:

Parametro Valore
-p:ServerAddress Indirizzo IP dell'host di compilazione Mac.
-p:ServerUser Nome utente da usare per l'accesso all'host di compilazione Mac. Usare il nome utente di sistema anziché nome e cognome.
-p:ServerPassword Password per il nome utente usato per accedere all'host di compilazione Mac.
-p:TcpPort Porta TCP da usare per comunicare con l'host di compilazione Mac, ovvero 58181.
-p:_DotNetRootRemoteDirectory Cartella nell'host di compilazione Mac che contiene .NET SDK. Usare /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/.

Importante

I valori per questi parametri possono essere forniti anche nel file di progetto come proprietà di compilazione. Tuttavia, i valori per <ServerAddress>, <ServerUser><ServerPassword>, e <_DotNetRootRemoteDirectory> verranno in genere forniti nella riga di comando per motivi di sicurezza.

Ad esempio, usare il comando seguente per compilare e firmare un file con estensione ipa da Windows:

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/

Nota

In .NET 8 il dotnet publish comando usa per impostazione predefinita la Release configurazione. Di conseguenza, la configurazione della compilazione può essere omessa dalla riga di comando. Inoltre, per impostazione predefinita, il dotnet publish comando è .ios-arm64 RuntimeIdentifier Pertanto, RuntimeIdentifier può anche essere omesso dalla riga di comando.

Nota

Se il ServerPassword parametro viene omesso da una chiamata di compilazione della riga di comando, Pair to Mac tenta di accedere all'host di compilazione Mac usando le chiavi SSH salvate.

La pubblicazione crea e firma l'app e quindi copia il file con estensione ipa nella cartella bin\Release\net8.0-ios\ios-arm64\publish nel computer Windows. Il canale di distribuzione per l'app viene specificato nel certificato di distribuzione contenuto nel profilo di provisioning. Per informazioni sulla creazione di profili di provisioning della distribuzione per i diversi canali di distribuzione, vedere Pubblicare un'app iOS per la distribuzione di App Store, Pubblicare un'app iOS per la distribuzione ad hoc e Pubblicare un'app iOS per la distribuzione interna

Durante il processo di pubblicazione potrebbe essere necessario consentire codesign l'esecuzione sul Mac associato:

Consenti alla creazione condivisa di firmare l'app nel Mac associato.

Risolvere i problemi relativi a una compilazione remota

Se non viene specificato un RuntimeIdentifier oggetto durante la compilazione remota dalla riga di comando in Windows, verrà usata l'architettura del computer Windows. Ciò si verifica perché deve RuntimeIdentifier essere impostato all'inizio del processo di compilazione, prima che la compilazione possa connettersi al Mac per derivarne l'architettura.

Se un RuntimeIdentifier oggetto non viene specificato durante la compilazione remota con Visual Studio in Windows, l'IDE rileverà l'architettura del Mac remoto e la imposta di conseguenza. È possibile eseguire l'override dell'impostazione predefinita impostando la proprietà di $(ForceSimulatorX64ArchitectureInIDE) compilazione:

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

Distribuire l'app

Il file con estensione ipa può essere distribuito con uno degli approcci seguenti:

  • Le app ad hoc possono essere distribuite tramite Apple Configurator. Per altre informazioni, vedere la Guida per l'utente di Apple Configurator in support.apple.com. |
  • Le app di App Store possono essere caricate nell'App Store tramite un'app come Transporter. Ciò richiederà di aver creato un record per l'app in App Store Connect e di creare una password specifica dell'app. Per altre informazioni, vedere Creare un record di app in developer.apple.com e Accedere alle app con l'ID Apple usando password specifiche dell'app in support.apple.com.
  • Le app interne possono essere distribuite tramite un sito Web sicuro o tramite mobile Gestione dispositivi (MDM). Entrambi questi approcci richiedono che l'app sia preparata per la distribuzione, che include la preparazione di un manifesto. Per altre informazioni, vedere Distribuire app interne proprietarie ai dispositivi Apple in support.apple.com.