Устранение неполадок приложений tvOS, созданных с помощью Xamarin

В этой статье рассматриваются проблемы, которые могут возникнуть при работе с поддержкой tvOS Xamarin.

Известные проблемы

Текущий выпуск поддержки tvOS Xamarin имеет следующие известные проблемы:

  • Mono Framework — Mono 4.3 Cryptography.ProtectedData не может расшифровать данные из Mono 4.2. В результате пакеты NuGet не смогут восстановиться с ошибкой Data unprotection failed при настройке защищенного источника NuGet.
    • Решение. В Visual Studio для Mac необходимо добавить все источники пакетов NuGet, использующие проверку подлинности паролей, прежде чем повторно пытаться восстановить пакеты.
  • Visual Studio для Mac надстройка W/F# — ошибка при создании шаблона F# Android в Windows. Это по-прежнему должно работать правильно в Mac.
  • Xamarin.Mac — при запуске унифицированного проекта шаблона Xamarin.Mac с целевым набором Unsupportedплатформы может появиться всплывающее окно Could not connect to the debugger .
    • Потенциальное решение — понижение версии платформы Mono, доступной в нашем канале Stable.
  • Xamarin Visual Studio и Xamarin.iOS — при развертывании приложений WatchKit в Visual Studio может появиться ошибка The file ‘bin\iPhoneSimulator\Debug\WatchKitApp1WatchKitApp.app\WatchKitApp1WatchKitApp’ does not exist .

Сообщите о любых ошибках, обнаруженных на сайте GitHub.

Устранение неполадок

В следующих разделах перечислены некоторые известные проблемы, которые могут возникнуть при использовании tvOS 9 с Xamarin.tvOS и решением этих проблем:

Недопустимый исполняемый файл— исполняемый файл не содержит бит-код

При попытке отправить приложение Xamarin.tvOS в Apple TV App Store может появиться сообщение об ошибке в форме "Недопустимый исполняемый файл — исполняемый файл не содержит бит-код".

Чтобы устранить эту проблему, сделайте следующее:

  1. В Visual Studio для Mac щелкните правой кнопкой мыши файл проекта Xamarin.tvOS в Обозреватель решений и выберите пункт "Параметры".

  2. Выберите сборкуtvOS и убедитесь, что вы находитесь в конфигурации выпуска :

    Выбор параметров сборки tvOS

  3. Добавьте --bitcode=asmonly в поле "Дополнительные аргументы mtouch" и нажмите кнопку "ОК ".

  4. Перестройте приложение в конфигурации выпуска .

Проверка того, содержит ли ваше приложение tvOS Биткод

Чтобы убедиться, что сборка приложения Xamarin.tvOS содержит Bitcode, откройте приложение терминала и введите следующее:

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

В выходных данных найдите следующее:

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 и size будет отличаться, но другие поля должны быть идентичными.

Необходимо убедиться, что все сторонние статические.a () библиотеки, которые вы используете, были созданы для библиотек tvOS (а не библиотек iOS) и что они также содержат сведения о бит-коде.

Для приложений или библиотек, включающих допустимый битовый код, size будет больше одного. Существуют некоторые ситуации, когда библиотека может иметь маркер битового кода, но не содержит допустимый бит-код. Например:

Недопустимый биткод

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

Допустимый бит-код

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

Обратите внимание на разницу между size двумя библиотеками в приведенном выше примере. Библиотека должна быть создана из сборки архива Xcode с включенным биткодом (параметр ENABLE_BITCODEXcode) в качестве решения этой проблемы размера.

Приложения, содержащие только срез arm64, также должны иметь "arm64" в списке UIRequiredDeviceCapabilities в Info.plist

При отправке приложения в Apple TV App Store для публикации может появиться сообщение об ошибке в форме:

"Приложения, содержащие только срез arm64, также должны иметь arm64 в списке UIRequiredDeviceCapabilities в Info.plist".

В этом случае измените Info.plist файл и убедитесь, что он имеет следующие ключи:

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

Перекомпилируйте приложение для выпуска и повторной отправки в iTunes Подключение.

Выполнение задачи "MTouch" — СБОЙ

Если вы используете 3-ю стороннюю библиотеку (например, MonoGame), а компиляция выпуска завершилась сбоем с длинным рядом сообщений об ошибках, завершающихся Task "MTouch" execution -- FAILED, попробуйте добавить -gcc_flags="-framework OpenAL" к дополнительным сенсорным аргументам:

Выполнение задачи MTouch

Вы также должны включить --bitcode=asmonly в дополнительные сенсорные аргументы, задать параметры компоновщика значение Link All и выполнить чистую компиляцию.

Ошибка ITMS-90471. Отсутствует значок "Большой"

Если вы получите сообщение в форме "ОШИБКА ITMS-90471". Значок "Большой отсутствует", пытаясь отправить приложение Xamarin.tvOS в Apple TV App Store для выпуска, проверка следующее:

  1. Убедитесь, что вы включили ресурсы больших значков в Assets.car файл, созданный с помощью документации по значкам приложений.
  2. Убедитесь, что вы включили Assets.car файл из документации по работе с значками и изображениями в окончательном пакете приложений.

Недопустимый пакет — приложение, поддерживающее игровые контроллеры, также должно поддерживать удаленный компьютер Apple TV

or

Недопустимый пакет— приложения Apple TV с платформой GameController должны включать ключ GCSupportedGameControllers в info.plist приложения

Игровые контроллеры можно использовать для улучшения игрового процесса и обеспечения чувства погружения в игру. Они также могут использоваться для управления стандартным интерфейсом Apple TV, поэтому пользователю не нужно переключаться между удаленным и контроллером.

Если вы отправляете приложение Xamarin.tvOS с поддержкой game Controller в Магазин приложений Apple TV, и вы получаете сообщение об ошибке в виде:

Мы обнаружили одну или несколько проблем с вашей последней доставкой для имени приложения. Ваша доставка была успешной, но вы можете исправить следующие проблемы в следующей доставке:

Недопустимый пакет — приложение, поддерживающее игровые контроллеры, также должно поддерживать удаленный компьютер Apple TV.

or

Недопустимый пакет — приложения Apple TV с платформой GameController должны включать ключ GCSupportedGameControllers в info.plist приложения.

Решение заключается в добавлении поддержки удаленного доступа Siri (GCMicroGamepad) к файлу приложения Info.plist . Профиль micro Game Controller был добавлен Apple для назначения Siri Remote. Например, включите следующие ключи:

<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/>

Внимание

Контроллеры игры Bluetooth являются необязательным приобретением, которое могут сделать конечные пользователи, ваше приложение не может принудительно приобрести его. Если приложение поддерживает игровые контроллеры, оно также должно поддерживать Siri Remote, чтобы игра была использоваться всеми пользователями Apple TV.

Дополнительные сведения см. в разделе "Работа с игровыми контроллерами" в документации по удаленным и bluetooth-контроллерам Siri.

Несовместимая целевая платформа: NetPortable, Version=v4.5, Profile=Profile78

При попытке включить переносимую библиотеку классов (PCL) в проект Xamarin.tvOS можно получить сообщение в форме:

Несовместимая целевая платформа: NetPortable, Version=v4.5, Profile=Profile78

Чтобы устранить эту проблему, добавьте XML-файл, вызываемый Xamarin.TVOS.xml следующим содержимым:

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

Для следующего пути:

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

Обратите внимание, что номер профиля в пути должен соответствовать номеру профиля PCL.

С помощью этого файла вы сможете успешно добавить PCL-файл в проект Xamarin.tvOS.