Устранение неполадок при привязке
Некоторые советы по устранению неполадок с привязками к API macOS (прежнее название — OS X) в Xamarin.Mac.
Отсутствующие привязки
Хотя Xamarin.Mac охватывает большую часть API Apple, иногда может потребоваться вызвать некоторые API Apple, которые еще не имеют привязки. В других случаях необходимо вызвать стороннее приложение C/Objective-C, которое оно выходит за пределы область привязок Xamarin.Mac.
Если вы работаете с API Apple, первым шагом является предоставление Xamarin знать, что вы попадаете в раздел API, который у нас еще нет. Отправьте ошибку, отметив отсутствующий API. Мы используем отчеты от клиентов, чтобы определить приоритеты api, над которыми мы работаем дальше. Кроме того, если у вас есть лицензия Business или Enterprise, и это отсутствие привязки блокирует ход выполнения, также следуйте инструкциям в разделе "Поддержка " для отправки билета. Мы не можем обещать привязку, но в некоторых случаях мы можем получить вам работу вокруг.
Когда вы уведомите Xamarin (если применимо) о недостающей привязке, следующий шаг — рассмотреть возможность привязки к ней самостоятельно. У нас есть полное руководство здесь и некоторая неофициальная документация здесь для упаковки Objective-C привязок вручную. Если вы вызываете API C, можно использовать механизм P/Invoke C#, документация приведена здесь.
Если вы решите самостоятельно работать над привязкой, помните, что ошибки в привязке могут создавать все виды интересных сбоев в собственной среде выполнения. В частности, убедитесь, что ваша подпись в C# соответствует собственной сигнатуре в количестве аргументов и размеру каждого аргумента. Сбой этого может привести к повреждению памяти и (или) стека, и вы можете немедленно завершить работу или в какой-либо произвольной точке в будущем или поврежденных данных.
Исключения аргументов при передаче null в привязку
Хотя Xamarin работает для обеспечения высокого качества и хорошо проверенных привязок для API Apple, иногда ошибки и ошибки скольжения. По крайней мере наиболее распространенной проблемой, с которыми может столкнуться API ArgumentNullException
, вызывается при передаче значения NULL, когда базовый API принимает nil
. Собственные файлы заголовков, определяющие API, часто не предоставляют достаточно сведений о том, какие API принимают nil, и что приведет к сбою при передаче.
Если вы работаете в null
случае, когда передача вызывает исключение ArgumentNullException
, но вы думаете, что это должно работать, выполните следующие действия:
- Проверьте документацию Apple и (или) примеры, чтобы узнать, можно ли найти подтверждение того, что оно принимает
nil
. Если вы комфортно Objective-Cс, можете написать небольшую тестовую программу, чтобы проверить ее. - Файл ошибки.
- Можете ли вы обойти ошибку? Если вы можете избежать вызова API с
null
помощью простого null проверка вокруг вызовов может быть легкой работой. - Однако для некоторых API требуется передать значение NULL, чтобы отключить или отключить некоторые функции. В этих случаях можно обойти проблему, создав браузер сборок (см. статью "Поиск члена C# для заданного селектора"), копирование привязки и удаление null проверка. Если это сделать, убедитесь, что при выполнении этой ошибки не будут получаться обновления и исправления, которые мы делаем в Xamarin.Mac, и это должно рассматриваться как кратковременная работа.
Информирование об ошибках
Ваши отзывы очень важны для нас. Если у вас возникли проблемы с Xamarin.Mac:
- Проверьте форумы Xamarin.Mac.
- Проверьте репозиторий проблем.
- Если вы не можете найти проблему, с которой столкнулись, поместите ее описание в репозиторий проблем GitHub.
Все проблемы GitHub находятся в открытом доступе. Здесь нет возможности скрыть комментарии или вложения.
Предоставьте следующие сведения с максимально возможными подробностями.
- Простой пример, воспроизводящий проблему, если это возможно. Такая помощь будет бесценной.
- Полная трассировка стека после сбоя.
- Код C#, относящийся к проявлению сбоя.