Xamarin iOS привязка, символ не найден в библиотеке

Мне нужен был элемент управления эскизом / рисованием для моего проекта Xamarin.iOS, и хотя я не мог найти один совместимый с C#, я нашел хороший компонент, написанный на Objective C. https://github.com/acerbetti/ACEDrawingView

Я делал привязки Xamarin раньше, поэтому я надеялся, что этот процесс будет довольно простым, но, к сожалению, я столкнулся с несколькими препятствиями на этом пути.

Я начал создавать свою статическую библиотеку и использовал скрипт сборки ant для создания двоичного файла FAT для устройств и симулятора:

фрагмент моего сценария муравья

AceDrawingViewSDK.a: libAceDrawingView-i386.a libAceDrawingView-armv7.a   libAceDrawingView-armv7s.a libAceDrawingView-arm64.a xcrun -sdk iphoneos lipo -create -output $@ $^

Далее я побежал

sharpie bind --sdk=iphoneos10.1 *.h

в файлах заголовков, чтобы получить мои файлы ApiDefinitions, Structs и Enum.

Я проверил и удалил атрибуты проверки. (Они все выглядели хорошо.) Но именно здесь начались некоторые другие мои проблемы.

The type ACEDrawingLabelViewTransform' already contains a definition forTransform' (CS0102) (AceDrawingViewBinding). 

Ради просто попытки двигаться дальше и заставить что-то работать, я просто закомментировал эту ссылку.

Затем я получил несколько проблем, подобных этому:

The type or namespace name `IACEDrawingTool' could not be found. Are you missing an assembly reference? (CS0246) (AceDrawingViewBinding)

Я подумал, что это связано с этим:

// @interface ACEDrawingPenTool : UIBezierPath 
[BaseType(typeof(UIBezierPath))]
interface ACEDrawingPenTool : IACEDrawingTool

и это:

// @protocol ACEDrawingTool 
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface ACEDrawingTool

Я попытался исправить это, сделав имя интерфейса непротиворечивым (я попробовал и IACEDrawingTool, и ACEDrawingTool.) Это позволило обойти эту ошибку и позволить мне скомпилировать

Одно из моих перечислений вышло как

[Native]
 public enum ACEDrawingMode : nuint
{
Scale,
OriginalSize
}

Я не мог найти, как обработать [Native] в этом случае (поэтому еще раз, для тестирования, я удалил его.) Я попытался использовать удаление nuint из enum и использование uint. Любой подход, казалось, исправил ошибку.

Таким образом, с исправлением этих ошибок я смог сгенерировать.dll из моего связующего проекта и добавить его в свой основной проект.

Теперь я получаю еще 2 проблемы.

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

Could not create an native instance of the type 'ACEDrawingView': the native class hasn't been loaded.
It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.

Если я пытаюсь собрать и развернуть на своем телефоне, я получаю различные ошибки на этапе сборки, которые вообще не позволяют запустить его на устройстве:

MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingArrowTool. The symbol 'OBJC_CLASS$ACEDrawingArrowTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingDraggableTextTool. The symbol '_OBJC_CLASS$ACEDrawingDraggableTextTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingEllipseTool. The symbol '_OBJC_CLASS$_ACEDrawingEllipseTool' could not be found in any of the libraries or frameworks linked with your application.

...и так далее.

Я попытался вернуться, перечитать и повторить шаги и безуспешно пытался повторно использовать некоторые сценарии и настройки из моих предыдущих успешных привязок.

У кого-нибудь есть предложения относительно того, что может решить эти проблемы?

1 ответ

Имя типа или пространства имен `IACEDrawingTool'не найдено.

Добавить новый интерфейс, как это interface IACEDrawingTool{ }

public enum ACEDrawingMode: nuint

Изменить nuint в ulong

Другие вопросы по тегам