Condividi tramite


Aggiornamento di app Mac esistenti

L'aggiornamento di un'app esistente per l'uso dell'API unificata richiede modifiche al file di progetto stesso, nonché agli spazi dei nomi e alle API usate nel codice dell'applicazione.

La strada a 64 bit

Le nuove API unificate sono necessarie per supportare le architetture dei dispositivi a 64 bit da un'applicazione Xamarin.Mac. A partire dal 1° febbraio 2015 Apple richiede che tutti i nuovi invii di app al Mac App Store supportino architetture a 64 bit.

Xamarin offre strumenti sia per Visual Studio per Mac che per Visual Studio per automatizzare il processo di migrazione dall'API classica all'API unificata oppure è possibile convertire manualmente i file di progetto. Anche se l'uso degli strumenti automatici è altamente consigliato, questo articolo illustra entrambi i metodi.

Prima di iniziare...

Prima di aggiornare il codice esistente all'API unificata, è consigliabile eliminare tutti gli avvisi di compilazione. Molti avvisi nell'API classica diventeranno errori dopo la migrazione a Unified. Correggerli prima di iniziare è più semplice perché i messaggi del compilatore dall'API classica spesso forniscono suggerimenti su cosa aggiornare.

Aggiornamento automatico

Dopo aver risolto gli avvisi, selezionare un progetto Mac esistente in Visual Studio per Mac o Visual Studio e scegliere Esegui migrazione all'API unificata Xamarin.Mac dal menu Progetto. Ad esempio:

Choose Migrate to Xamarin.Mac Unified API from the Project menu

È necessario accettare questo avviso prima dell'esecuzione della migrazione automatizzata (ovviamente è necessario assicurarsi di disporre di backup/controllo del codice sorgente prima di intraprendere questa avventura):

Agree to this warning before the automated migration will run

Quando si usa l'API unificata in un'applicazione Xamarin.Mac, è possibile selezionare due tipi di framework di destinazione supportati:

  • Xamarin.Mac Mobile Framework: si tratta dello stesso framework .NET ottimizzato usato da Xamarin.iOS e Xamarin.Android che supporta un subset del framework desktop completo. Questo è il framework consigliato perché fornisce file binari medi più piccoli a causa di un comportamento di collegamento superiore.
  • Xamarin.Mac .NET 4.5 Framework : questo framework è di nuovo un subset del framework desktop . Tuttavia, riduce molto meno del framework desktop completo rispetto al framework per dispositivi mobili e dovrebbe "funzionare" solo con la maggior parte dei pacchetti NuGet o delle librerie di terze parti. Ciò consente allo sviluppatore di utilizzare assembly desktop standard mentre si usa ancora un framework supportato, ma questa opzione produce bundle di applicazioni di dimensioni maggiori. Questo è il framework consigliato in cui vengono usati assembly .NET di terze parti che non sono compatibili con Xamarin.Mac Mobile Framework. Per un elenco degli assembly supportati, vedere la documentazione relativa agli assembly .

Per informazioni dettagliate sui framework di destinazione e sulle implicazioni della selezione di una destinazione specifica per l'applicazione Xamarin.Mac, vedere la documentazione relativa ai framework di destinazione.

Lo strumento automatizza fondamentalmente tutti i passaggi descritti nella sezione Update Manually presentata di seguito ed è il metodo consigliato per convertire un progetto Xamarin.Mac esistente nell'API unificata.

Passaggi per l'aggiornamento manuale

Anche in questo caso, dopo aver risolto gli avvisi, seguire questa procedura per aggiornare manualmente le app Xamarin.Mac per usare la nuova API unificata:

1. Aggiornare il tipo di progetto e la destinazione di compilazione

Modificare il sapore del progetto nei file csproj da 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23 a A3F8F2AB-B479-4A4A-A458-A89E7DC349F1. Modificare il file csproj in un editor di testo, sostituendo il primo elemento dell'elemento <ProjectTypeGuids> come illustrato:

Edit the csproj file in a text editor, replacing the first item in the ProjectTypeGuids element as shown

Modificare l'elemento Import che contiene Xamarin.Mac.targets in Xamarin.Mac.CSharp.targets come illustrato:

Change the Import element that contains Xamarin.Mac.targets to Xamarin.Mac.CSharp.targets as shown

Aggiungere le righe di codice seguenti dopo l'elemento <AssemblyName> :

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>

Esempio:

Add these lines of code after the <AssemblyName> element

2. Aggiornare i riferimenti al progetto

Espandere il nodo Riferimenti del progetto dell'applicazione Mac. Inizialmente mostrerà un riferimento *broken- XamMac simile a questo screenshot (perché è stato appena modificato il tipo di progetto):

It will initially show a broken- XamMac reference similar to this screenshot

Fare clic sull'icona a forma di ingranaggio accanto alla voce XamMac e selezionare Elimina per rimuovere il riferimento interrotto.

Fare quindi clic con il pulsante destro del mouse sulla cartella Riferimenti nella Esplora soluzioni e scegliere Modifica riferimenti. Scorrere fino alla fine dell'elenco dei riferimenti e posizionare un controllo oltre a Xamarin.Mac.

Scroll to the bottom of the list of references and place a check besides Xamarin.Mac

Premere OK per salvare le modifiche ai riferimenti al progetto.

3. Rimuovere MonoMac dagli spazi dei nomi

Rimuovere il prefisso MonoMac dagli spazi dei nomi nelle using istruzioni o ovunque un nome di classe sia stato completo (ad esempio MonoMac.AppKit , diventa solo AppKit).

4. Rieseguire il mapping dei tipi

Sono stati introdotti tipi nativi che sostituiscono alcuni tipi usati in precedenza, ad esempio istanze di System.Drawing.RectangleF con CoreGraphics.CGRect (ad esempio). L'elenco completo dei tipi è disponibile nella pagina tipi nativi.

5. Correzione delle sostituzioni dei metodi

Alcuni AppKit metodi hanno modificato la firma per usare i nuovi tipi nativi , ad esempio nint. Se le sottoclassi personalizzate eseguono l'override di questi metodi, le firme non corrispondono più e genereranno errori. Correggere questi override del metodo modificando la sottoclasse in modo che corrisponda alla nuova firma usando i tipi nativi.

Considerazioni

Quando si converte un progetto Xamarin.Mac esistente dall'API classica alla nuova API unificata, è necessario tenere conto delle considerazioni seguenti se tale app si basa su uno o più componenti o pacchetti NuGet.

Componenti

Qualsiasi componente incluso nell'applicazione dovrà anche essere aggiornato all'API unificata oppure si verifica un conflitto quando si tenta di compilare. Per qualsiasi componente incluso, sostituire la versione corrente con una nuova versione dall'archivio componenti Xamarin che supporta l'API unificata ed eseguire una compilazione pulita. Qualsiasi componente che non è ancora stato convertito dall'autore visualizzerà un avviso a 32 bit solo nell'archivio componenti.

Supporto NuGet

Anche se sono state apportate modifiche a NuGet per lavorare con il supporto dell'API unificata, non è stata rilasciata una nuova versione di NuGet, quindi si sta valutando come ottenere NuGet per riconoscere le nuove API.

Fino a quel momento, proprio come i componenti, sarà necessario cambiare qualsiasi pacchetto NuGet incluso nel progetto in una versione che supporta le API unificate ed eseguire una compilazione pulita in un secondo momento.

Importante

Se si verifica un errore nel formato "Error 3 Cannot include both 'monomac.dll' and 'Xamarin.Mac.dll' in the same Xamarin.Mac project - 'Xamarin.Mac.dll' is referenced in modo esplicito, mentre 'monomac.dll' viene fatto riferimento da 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" dopo aver convertito l'applicazione nelle API unificate, in genere è dovuto alla presenza di un componente o di un pacchetto NuGet nel progetto che non è stato aggiornato all'API unificata. È necessario rimuovere il componente/NuGet esistente, eseguire l'aggiornamento a una versione che supporta le API unificate ed eseguire una compilazione pulita.

Abilitazione di build a 64 bit di app Xamarin.Mac

Per un'applicazione per dispositivi mobili Xamarin.Mac convertita nell'API unificata, lo sviluppatore deve comunque abilitare la compilazione dell'applicazione per computer a 64 bit dalle opzioni dell'app. Per istruzioni dettagliate sull'abilitazione delle build a 64 bit delle app Xamarin.Mac del documento Considerazioni sulla piattaforma a 32/64 bit, vedere il documento Abilitazione di build a 64 bit.

Completamento

Indipendentemente dal fatto che si scelga di usare il metodo automatico o manuale per convertire l'applicazione Xamarin.Mac dalla versione classica alle API unificate, esistono diverse istanze che richiedono ulteriore intervento manuale. Vedere il Suggerimenti per l'aggiornamento del codice al documento dell'API unificata per i problemi noti e le correzioni.