Condividi tramite


Aggiornamento di applicazioni unificate Xamarin.Mac a 64 bit

A partire da gennaio 2018, Apple richiede che i nuovi invii di Mac App Store siano destinati a 64 bit. Le app già disponibili in Mac App Store devono essere aggiornate a 64 bit entro giugno 2018.

Il modello di progetto File>Nuovo Xamarin.Mac crea applicazioni a 64 bit per impostazione predefinita, quindi tutte le app create di recente sono già compatibili a 64 bit e non richiedono modifiche.

Destinazione a 64 bit

  1. Aprire la finestra Opzioni progetto per l'app Xamarin.Mac:

    The contextual menu for the project

  2. Selezionare Mac Build (Compilazione Mac) e impostare Supported architectures (Architetture supportate) su x86_64:

    Setting the supported architectures to x86_64

  3. Se l'app ha dipendenze esterne, ad esempio riferimenti nativi o progetti di associazione, aggiornarli in modo che corrispondano alla destinazione a 64 bit.

Errori

La prima volta che si compila o si esegue l'applicazione con supporto a 64 bit, è possibile che si verifichino errori di collegamento da clang o problemi di runtime. Questi errori possono verificarsi se le dipendenze di terze parti, ad esempio riferimenti nativi nei progetti Xamarin.Mac o binding, o framework a livello di sistema caricati manualmente, non sono stati aggiornati a 64 bit.

Suggerimento

La conversione del progetto a 64 bit è una modifica importante e può indirettamente individuare vari errori di programmazione. In particolare, può modificare le dimensioni e l'allineamento delle strutture di dati, che potrebbero influire sulle firme p/invoke e sul codice nativo collegato nel progetto. Valutare la possibilità di esaminare eventuali avvisi di compilazione specificati e testare accuratamente l'applicazione in seguito per rilevare potenziali problemi.

Errore di esempio risultante da una dipendenza di terze parti collegata dinamicamente che non ha come destinazione 64 bit:

ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary, 
file was built for i386 which is not the architecture being linked (x86_64): 
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary 

Questo errore può essere seguito in fase di esecuzione dlopen restituendo IntPtr.Zero invece di un handle previsto.

Errore di esempio risultante da una dipendenza di terze parti collegata staticamente che non ha come destinazione 64 bit:

Undefined symbols for architecture x86_64:
  "_LibraryFunction", referenced from:
     -u command line option
ld: symbol(s) not found for architecture x86_64 

Per compilare ed eseguire correttamente, aggiornare queste dipendenze a 64 bit e ricompilare l'app.