Risoluzione dei problemi relativi alle app tvOS create con Xamarin

Questo articolo illustra i problemi che possono verificarsi durante l'uso del supporto tvOS di Xamarin.

Problemi noti

La versione corrente del supporto tvOS di Xamarin presenta i problemi noti seguenti:

  • Mono Framework : Mono 4.3 Cryptography.ProtectedData non riesce a decrittografare i dati da Mono 4.2. Di conseguenza, i pacchetti NuGet non riusciranno a eseguire il ripristino con l'errore Data unprotection failed quando è configurata un'origine NuGet protetta.
    • Soluzione alternativa: in Visual Studio per Mac sarà necessario aggiungere nuovamente le origini dei pacchetti NuGet che usano l'autenticazione della password prima di tentare di ripristinare i pacchetti.
  • Visual Studio per Mac componente aggiuntivo w/ F# - Errore durante la creazione di un modello Android F# in Windows. Questo dovrebbe funzionare correttamente su Mac.
  • Xamarin.Mac : quando si esegue il progetto modello unificato Xamarin.Mac con il framework di destinazione impostato su Unsupported, è possibile che venga visualizzato il popup Could not connect to the debugger .
    • Potenziale soluzione alternativa : effettuare il downgrade della versione del framework Mono disponibile nel canale Stable.
  • Xamarin Visual Studio & Xamarin.iOS : quando si distribuiscono applicazioni WatchKit in Visual Studio, è possibile che venga visualizzato l'errore The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist .

Segnalare eventuali bug disponibili in GitHub.

Risoluzione dei problemi

Le sezioni seguenti elencano alcuni problemi noti che possono verificarsi quando si usa tvOS 9 con Xamarin.tvOS e la soluzione a tali problemi:

Eseguibile non valido: l'eseguibile non contiene bitcode

Quando si tenta di inviare un'app Xamarin.tvOS all'App Store di Apple TV, è possibile che venga visualizzato un messaggio di errore nel formato "Eseguibile non valido - L'eseguibile non contiene bitcode".

Per risolvere questo problema, eseguire le operazioni seguenti:

  1. In Visual Studio per Mac fare clic con il pulsante destro del mouse sul file di progetto Xamarin.tvOS nel Esplora soluzioni e scegliere Opzioni.

  2. Selezionare tvOS Build (Compilazione tvOS) e assicurarsi di essere nella configurazione Release (Versione):

    Select tvOS Build options

  3. Aggiungere --bitcode=asmonly al campo Argomenti aggiuntivi mtouch e fare clic sul pulsante OK .

  4. Ricompilare l'app nella configurazione versione.

Verifica che l'app tvOS contenga bitcode

Per verificare che la compilazione dell'app Xamarin.tvOS contenga Bitcode, aprire l'app Terminale e immettere quanto segue:

otool -l /path/to/your/tv.app/tv

Nell'output cercare quanto segue:

Section
  sectname __bundle
   segname __LLVM
      addr 0x0000000100001000
      size 0x000000000000124f
    offset 4096
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0

addr e size sarà diverso, ma gli altri campi devono essere identici.

È necessario assicurarsi che tutte le librerie statiche () di terze parti in.a uso siano state create con librerie tvOS (non librerie iOS) e che includano anche informazioni sul bitcode.

Per le app o le librerie che includono codice bit valido, il size valore sarà maggiore di uno. Esistono alcune situazioni in cui una libreria può avere il marcatore bitcode, ma non contiene codice bit valido. Ad esempio:

Codice di bit non valido

 $ otool -arch arm64 libLibrary.a | grep __bitcode -A 3
   sect name __bitcode
   segname __LLVM
      add 0x0000000000000670
      size 0x0000000000000001

Codice bit valido

$ otool -l -arch arm64 libDownloadableAgent-tvos.a |grep __bitcode -A 3
   sectname __bitcode
   segname __LLVM
      addr 0x000000000001d2d0
      size 0x0000000000045440

Si noti la differenza tra size le due librerie nell'esempio elencato in precedenza. La libreria deve essere generata da una compilazione di archivio Xcode con bitcode abilitato (impostazione ENABLE_BITCODEXcode ) come soluzione a questo problema di dimensioni.

Anche le app che contengono la sezione arm64 devono avere "arm64" nell'elenco di UIRequiredDeviceCapabilities in Info.plist

Quando si invia un'app all'App Store apple TV per la pubblicazione, è possibile che venga visualizzato un errore nel formato:

"Le app che contengono solo la sezione arm64 devono avere anche "arm64" nell'elenco di UIRequiredDeviceCapabilities in Info.plist

In questo caso, modificare il Info.plist file e assicurarsi che disponga delle chiavi seguenti:

<key>UIRequiredDeviceCapabilities</key>
<array>
  <string>arm64</string>
</array>

Ricompilare l'app per il rilascio e inviare nuovamente a iTunes Connessione.

Esecuzione dell'attività "MTouch" -- FAILED

Se si usa una libreria di terze parti (ad esempio MonoGame) e la compilazione della versione non è riuscita con una lunga serie di messaggi di errore che terminano in Task "MTouch" execution -- FAILED, provare ad aggiungere -gcc_flags="-framework OpenAL" agli argomenti tocco aggiuntivi:

Task MTouch execution

È anche necessario includere --bitcode=asmonly negli argomenti Tocco aggiuntivi, impostare le opzioni del linker su Collega tutto ed eseguire una compilazione pulita.

Errore ITMS-90471. Icona Grande mancante

Se viene visualizzato un messaggio nel formato "ERRORE ITMS-90471. L'icona Grande è mancante" durante il tentativo di inviare un'app Xamarin.tvOS all'App Store apple TV per il rilascio, controllare quanto segue:

  1. Assicurarsi di aver incluso gli asset icona di grandi dimensioni nel Assets.car file creato usando la documentazione Icone dell'app.
  2. Assicurarsi di includere il Assets.car file nella documentazione Uso di icone e immagini nel bundle dell'applicazione finale.

Bundle non valido: un'app che supporta i controller di gioco deve supportare anche il telecomando Apple TV

or

Bundle non valido: le app Apple TV con il framework GameController devono includere la chiave GCSupportedGameControllers nell'Info.plist dell'app

I controller di gioco possono essere usati per migliorare il gioco e fornire un senso di immersione in un gioco. Possono anche essere usati per controllare l'interfaccia standard di Apple TV, in modo che l'utente non deve passare dal telecomando al controller.

Se si invia un'app Xamarin.tvOS con il supporto di Game Controller all'App Store apple TV e viene visualizzato un messaggio di errore sotto forma di:

È stato rilevato uno o più problemi con il recapito recente per "nome app". Il recapito ha avuto esito positivo, ma potrebbe essere opportuno risolvere i problemi seguenti nel recapito successivo:

Bundle non valido: un'app che supporta i controller di gioco deve supportare anche il telecomando apple TV.

or

Bundle non valido: le app Apple TV con il framework GameController devono includere la chiave GCSupportedGameControllers nell'Info.plist dell'app.

La soluzione consiste nell'aggiungere il supporto per Siri Remote (GCMicroGamepad) al file dell'app Info.plist . Il profilo Micro Game Controller è stato aggiunto da Apple per fare riferimento a Siri Remote. Ad esempio, includere le chiavi seguenti:

<key>GCSupportedGameControllers</key>  
  <array>  
    <dict>  
      <key>ProfileName</key>  
      <string>ExtendedGamepad</string>  
    </dict>  
    <dict>  
      <key>ProfileName</key>  
      <string>MicroGamepad</string>  
    </dict>  
  </array>  
<key>GCSupportsControllerUserInteraction</key>  
<true/>

Importante

I controller di gioco Bluetooth sono un acquisto facoltativo che gli utenti finali potrebbero effettuare, l'app non può forzare l'utente ad acquistarne uno. Se l'app supporta game controller, deve anche supportare Siri Remote in modo che il gioco sia utilizzabile da tutti gli utenti di Apple TV.

Per altre informazioni, vedere la sezione Uso dei controller di gioco della documentazione relativa ai controller Remoti e Bluetooth di Siri.

Framework di destinazione non compatibile: . NetPortable, Version=v4.5, Profile=Profile78

Quando si tenta di includere una libreria di classi portabile (PCL) in un progetto Xamarin.tvOS, è possibile che venga visualizzato un messaggio nel formato seguente:

Framework di destinazione non compatibile: . NetPortable, Version=v4.5, Profile=Profile78

Per risolvere questo problema, aggiungere un file XML denominato Xamarin.TVOS.xml con il contenuto seguente:

<Framework Identifier="Xamarin.TVOS" MinimumVersion="1.0" Profile="*" DisplayName="Xamarin.TVOS"/>

Nel percorso seguente:

/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile259/SupportedFrameworks/

Si noti che il numero di profilo nel percorso deve corrispondere al numero di profilo della libreria di classi portabile.

Con questo file sul posto, dovrebbe essere possibile aggiungere correttamente il file PCL al progetto Xamarin.tvOS.