Suggerimenti per la risoluzione dei problemi di Xamarin.Mac

Panoramica

A volte tutti ci si blocca durante l'uso di un progetto, sull'impossibilità di ottenere un'API per funzionare nel modo desiderato o nel tentativo di risolvere un bug. L'obiettivo di Xamarin è quello di avere successo nella scrittura delle applicazioni per dispositivi mobili e desktop e sono state fornite alcune risorse utili.

Con una di queste risorse, è possibile eseguire alcuni passaggi di preparazione per risolverli rapidamente:

  • Determinare la causa radice del problema nel modo migliore possibile per segnalare gli arresti anomali:

    • "L'applicazione si arresta in modo anomalo" è difficile da diagnosticare. "L'applicazione si arresta in modo anomalo quando si restituisce una matrice vuota a questa chiamata" è molto più facile da risolvere.

    • "Non è possibile ottenere il funzionamento di NSTable" è meno utile di "Nessuno dei metodi nel mio NSTableDelegate sembra essere chiamato in questo caso".

  • Se possibile, fornire un piccolo programma di esempio che mostra il problema. L'analisi delle pagine del codice sorgente che cerca il problema richiede più tempo e impegno.

  • Sapere quali modifiche sono state apportate all'applicazione per causare la visualizzazione di un problema può limitare rapidamente l'origine del problema. Se sono state aggiornate di recente versioni di Xamarin.Mac, la rimozione delle sezioni dell'applicazione per trovare la parte che causa il problema o il test delle build precedenti per trovare le modifiche introdotte dal problema può essere molto utile.

Cosa fare quando l'app si arresta in modo anomalo senza output

Nella maggior parte dei casi, il debugger in Visual Studio per Mac intercetta eccezioni e arresti anomali nell'applicazione e consente di tenere traccia della causa radice. Tuttavia, esistono alcuni casi in cui l'applicazione rimbalzerà sul dock e quindi esce con poco o nessun output. Questi possono includere:

  • Problemi di firma del codice.
  • Alcuni arresti anomali del runtime mono.
  • Alcune eccezioni Objective-c e arresti anomali.
  • Alcuni arresti anomali sono molto presto la durata del processo.
  • Alcuni overflow dello stack.
  • La versione di macOS elencata in Info.plist è più recente rispetto alla versione macOS attualmente installata o non è valida.

Il debug di questi programmi può essere frustrante, perché trovare le informazioni necessarie può essere difficile. Ecco alcuni approcci che possono essere utili:

  • Verificare che la versione di macOS elencata in Info.plist corrisponda a quella della versione di macOS attualmente installata nel computer.

  • Controllare l'output dell'applicazione Visual Studio per Mac (View ->Pads ->Application Output) per le analisi dello stack o l'output in rosso da Cocoa che può descrivere l'output.

  • Eseguire l'applicazione dalla riga di comando e esaminare l'output (nell'app Terminale ) usando:

    MyApp.app/Contents/MacOS/MyApp (dove MyApp è il nome dell'applicazione)

  • È possibile aumentare l'output aggiungendo "MONO_LOG_LEVEL" al comando nella riga di comando, ad esempio:

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • È possibile collegare un debugger nativo (lldb) al processo per verificare se fornisce altre informazioni (questa operazione richiede una licenza a pagamento). Ad esempio, eseguire le operazioni seguenti:

    1. Immettere lldb MyApp.app/Contents/MacOS/MyApp nel terminale.
    2. Immettere run nel terminale.
    3. Immettere c nel terminale.
    4. Uscire al termine del debug.
  • Come ultima risorsa, prima di chiamare NSApplication.Init il Main metodo (o in altre posizioni in base alle esigenze), è possibile scrivere testo in un file in un percorso noto per tenere traccia del passaggio di avvio in cui si verificano problemi.

Problemi noti

Le sezioni seguenti illustrano i problemi noti e le relative soluzioni.

Impossibile connettersi al debugger nelle app in modalità sandbox

Il debugger si connette alle app Xamarin.Mac tramite TCP, il che significa che per impostazione predefinita quando si abilita il sandboxing, non è in grado di connettersi all'app, quindi se si tenta di eseguire l'app senza le autorizzazioni appropriate abilitate, viene visualizzato un errore "Impossibile connettersi al debugger".

Editing the entitlements in the App sandbox.

L'autorizzazione Consenti Connessione di rete in uscita (client) è quella necessaria per il debugger, abilitando questa opzione, ciò consentirà il debug normalmente. Poiché non è possibile eseguire il debug senza di esso, la destinazione per msbuild è stata aggiornata CompileEntitlements per aggiungere automaticamente tale autorizzazione ai diritti per qualsiasi app in modalità sandbox solo per le compilazioni di debug. Le build di versione devono usare i diritti specificati nel file entitlement, senza modifiche.

System.NotSupportedException: nessun dato è disponibile per la codifica 437

Quando si includono librerie di terze parti nell'app Xamarin.Mac, è possibile che venga visualizzato un errore nel formato "System.NotSupportedException: nessun dato è disponibile per la codifica 437" quando si tenta di compilare ed eseguire l'app. Ad esempio, le librerie, ad Ionic.Zip.ZipFileesempio , possono generare questa eccezione durante l'operazione.

Questo problema può essere risolto aprendo le opzioni per il progetto Xamarin.Mac, passando a Mac Build>Internationalization e controllando l'internazionalizzazione occidentale:

Editing the build options

Impossibile compilare (mm5103)

Questo errore si verifica in genere quando viene rilasciata una nuova versione di Xcode e la nuova versione è stata installata ma non è ancora stata eseguita. Prima di provare a eseguire la compilazione con una nuova versione di Xcode, è necessario eseguire la versione almeno una volta.

La prima volta che si esegue una nuova versione di Xcode, vengono installati diversi strumenti da riga di comando richiesti da Xamarin.Mac. È anche consigliabile eseguire una compilazione pulita dopo l'aggiornamento di Xcode o della versione di Xamarin.Mac.

Se non è possibile risolvere questo problema, segnalare un bug.

Entitlements.plist mancante

La versione più recente di Visual Studio per Mac ha rimosso la sezione Entitlements dall'editor Info.plist e l'ha inserita nell'editor Entitlements.plist separato (per migliorare il supporto multipiattaforma con Xamarin.iOS).

Con il nuovo Visual Studio per Mac installato, quando si crea un nuovo progetto di app Xamarin.Mac, un file Entitlements.plist verrà aggiunto automaticamente all'albero del progetto:

Selecting entitlements

Se si fa doppio clic sul file Entitlements.plist , verrà visualizzato l'editor entitlement:

Editing the entitlements

Per i progetti Xamarin.Mac esistenti, sarà necessario creare manualmente il file Entitlements.plist facendo clic con il pulsante destro del mouse sul progetto nel riquadro della soluzione e scegliendo Aggiungi>nuovo file.... Selezionare quindi Xamarin.Mac Empty Property List (Elenco proprietà vuote Xamarin.Mac>):

Adding a new property list

Immettere Entitlements per il nome e fare clic sul pulsante Nuovo . Se il progetto in precedenza includeva un file Entitlements, verrà richiesto di aggiungerlo al progetto invece di creare un nuovo file:

Verifying the overwrite of a file

Supporto della community nei forum

La community degli sviluppatori che usano prodotti Xamarin è incredibile e molti visitano i forum di Xamarin.Mac per condividere esperienze e le loro competenze. Inoltre, i tecnici di Xamarin visitano periodicamente il forum per aiutare.

Archiviazione di un bug

I commenti degli utenti sono importanti. Se si verificano problemi con Xamarin.Mac:

I problemi di GitHub sono tutti pubblici. Non è possibile nascondere commenti o allegati.

Includere tutte le informazioni disponibili seguenti:

  • Un esempio semplice che riproduce il problema. Questo è molto importante, ove possibile.
  • L'analisi dello stack completa dell'arresto anomalo.
  • Il codice C# relativo all'arresto anomalo.