Советы по устранению неполадок Xamarin.Mac

Обзор

Иногда мы все застряли во время работы над проектом, либо о невозможности получить API для работы так, как мы хотим или пытаемся обойти ошибку. Наша цель в Xamarin заключается в том, чтобы вы были успешными в написании мобильных и классических приложений, и мы предоставили некоторые ресурсы, которые помогут вам.

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

  • Определите первопричину проблемы как можно лучше, чтобы сообщить о сбоях:

    • "Сбой приложения" сложно диагностировать. "Мое приложение завершается сбоем, когда я возвращаю пустой массив для этого вызова", гораздо проще работать над исправлением.

    • "Я не могу получить NSTable для работы" менее полезно, чем "Ни один из методов на моем NSTableDelegate, кажется, вызывается в этом случае".

  • Если это возможно, укажите небольшую примерную программу, показывающую проблему. Копая страницы исходного кода, ищет проблему, занимает больше времени и усилий.

  • Зная, какие изменения, внесенные в приложение, могут быстро сузить источник проблемы. Обратите внимание, что если вы недавно обновили версии Xamarin.Mac, обрезая разделы приложения, чтобы найти часть, из-за чего возникла проблема, или проверить предыдущие сборки, чтобы найти, какие изменения ввели проблему, может оказаться очень полезной.

Что делать, когда приложение завершает работу без выходных данных

В большинстве случаев отладчик в Visual Studio для Mac перехватывает исключения и сбои в приложении и помогает отслеживать первопричину. Однако в некоторых случаях приложение будет отскочить на док-станции, а затем выйти с небольшим или без выходных данных. К ним относятся:

  • Проблемы с подписыванием кода.
  • Некоторые сбои среды выполнения mono.
  • Некоторые исключения Objective-c и сбои.
  • Некоторые аварийно завершались очень рано временем существования процесса.
  • Некоторые переполнения стека.
  • Версия macOS, указанная в info.plist, является более новой, чем текущая версия macOS или недопустимая.

Отладка этих программ может быть разочарована, так как поиск необходимых сведений может оказаться трудным. Ниже приведены некоторые подходы, которые могут помочь:

  • Убедитесь, что версия macOS, указанная в info.plist , совпадает с версией macOS, установленной на компьютере.

  • Проверьте выходные данные приложения Visual Studio для Mac (вид ->Pads ->Application Output) для трассировок стека или выходных данных красным цветом из Cocoa, которые могут описать выходные данные.

  • Запустите приложение из командной строки и просмотрите выходные данные (в приложении терминала ) с помощью:

    MyApp.app/Contents/MacOS/MyApp (где MyApp имя приложения)

  • Вы можете увеличить выходные данные, добавив "MONO_LOG_LEVEL" в команду в командной строке, например:

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

  • Вы можете подключить собственный отладчик (lldb) к процессу, чтобы узнать, предоставляет ли она дополнительные сведения (для этого требуется платная лицензия). Например, сделайте следующее:

    1. Введите lldb MyApp.app/Contents/MacOS/MyApp в терминале.
    2. Введите run в терминале.
    3. Введите c в терминале.
    4. Завершите отладку после завершения отладки.
  • В качестве последнего способа перед вызовом NSApplication.Init метода Main (или в других местах по мере необходимости) вы можете записать текст в файл в известном расположении, чтобы отслеживать, на каком этапе запуска возникают проблемы.

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

В следующих разделах рассматриваются известные проблемы и их решения.

Не удается подключиться к отладчику в изолированных приложениях

Отладчик подключается к приложениям Xamarin.Mac через TCP, что означает, что по умолчанию при включении песочницы не удается подключиться к приложению, поэтому если вы пытаетесь запустить приложение без соответствующих разрешений, вы получите сообщение об ошибке "Не удается подключиться к отладчику".

Editing the entitlements in the App sandbox.

Разрешение "Разрешить исходящие сети" Подключение (клиент) является одним из необходимых для отладчика, что позволяет отладчику нормально выполнять отладку. Так как вы не можете выполнить отладку без него, мы обновили целевой CompileEntitlements объект, msbuild чтобы автоматически добавить это разрешение на права для любого приложения, изолированного только для отладочных сборок. Сборки выпуска должны использовать права, указанные в файле прав, не измененные.

System.NotSupportedException: данные не доступны для кодирования 437

При включении сторонних библиотек в приложение Xamarin.Mac может возникнуть ошибка в форме System.NotSupportedException: данные не доступны для кодирования 437 при попытке скомпилировать и запустить приложение. Например, библиотеки, например Ionic.Zip.ZipFile, могут вызывать это исключение во время операции.

Это можно решить, открыв варианты проекта Xamarin.Mac, перейдя в Mac Build>Internationalization и проверка Вест-интернационализации:

Editing the build options

Не удалось скомпилировать (mm5103)

Эта ошибка обычно возникает при выпуске новой версии Xcode, и вы установили новую версию, но еще не выполнили ее. Прежде чем скомпилировать новую версию Xcode, необходимо сначала запустить эту версию по крайней мере один раз.

При первом запуске новой версии Xcode он устанавливает несколько средств командной строки, необходимых Xamarin.Mac. Кроме того, после обновления Xcode или версии Xamarin.Mac следует выполнить чистую сборку.

Если вы не можете устранить эту проблему, отправьте ошибку.

Отсутствующие права.plist

Последняя версия Visual Studio для Mac удалила раздел "Права" из редактора Info.plist и разместил его в отдельном редакторе Propertiess.plist (для более эффективной кроссплатформенной поддержки с Xamarin.iOS).

При установке нового Visual Studio для Mac при создании проекта приложения Xamarin.Mac в дерево проекта автоматически добавляется файл Entitlements.plist:

Selecting entitlements

Если дважды щелкнуть файл Entitlements.plist , откроется редактор прав:

Editing the entitlements

Для существующих проектов Xamarin.Mac необходимо вручную создать файл Rights.plist, щелкнув правой кнопкой мыши проект на панели решения и выбрав "Добавить>новый файл".. Затем выберите Xamarin.Mac>Empty Property List:

Adding a new property list

Введите Entitlements имя и нажмите кнопку "Создать ". Если проект ранее включал файл "Права", вам будет предложено добавить его в проект вместо создания нового файла:

Verifying the overwrite of a file

Поддержка сообщества на форумах

Сообщество разработчиков, использующих продукты Xamarin, удивительно, и многие посещают наши форумы Xamarin.Mac, чтобы поделиться опытом и их опытом. Кроме того, инженеры Xamarin периодически посещают форум, чтобы помочь.

Отправка ошибки

Ваши отзывы очень важны для нас. Если у вас возникли проблемы с Xamarin.Mac:

Все проблемы GitHub находятся в открытом доступе. Здесь нет возможности скрыть комментарии или вложения.

Предоставьте следующие сведения с максимально возможными подробностями.

  • Простой пример, воспроизводящий проблему, если это возможно. Такая помощь будет бесценной.
  • Полная трассировка стека после сбоя.
  • Код C#, относящийся к проявлению сбоя.