#c# #objective-c #linker #xamarin.ios
#c# #objective-c #компоновщик #xamarin.ios
Вопрос:
Я пытаюсь привязать библиотеку Objective C в проекте Xamarin. Первый раз, когда я это делаю, и, не зная много Objective C, это настоящая головная боль.
Я боролся с Objective Sharpie и сумел получить проект, который компилируется и кажется нормальным. Я предоставляю как можно меньше библиотеки, чтобы иметь что-то, что работает, но при попытке отладки на устройстве (в любом случае, это не i386, это библиотека для внешнего аксессуара) Я получаю следующую ошибку компоновщика:
Error MT5211: Native linking failed, undefined Objective-C class:
_OBJC_CLASS_$_ICAdministration. If '_OBJC_CLASS_$_ICAdministration'
is a protocol from a third-party binding, please check that it
has the [Protocol] attribute in its api definition file, otherwise verify
that all the necessary frameworks have been referenced and native libraries
are properly linked in. (MT5211)
ICAdministration
Класс является частью библиотеки внутри библиотеки. Он используется моим основным классом взаимодействия, который я связываю, но я не привязываю какие-либо свойства или методы, которые используют ICAdministration
. Я видел некоторые ошибки в отношении Xamarin 7.2 и попытался добавить опцию --registrar:legacy
mtouch, но безуспешно.
Похоже, существует множество флагов или параметров командной строки, которые можно использовать для самых разных вещей, но это действительно не моя сфера. Мне никогда раньше даже не приходилось иметь дело с компоновщиком, поэтому, естественно, мир C — темное и страшное место.
Любые указатели будут с благодарностью. Должен ли я привязывать всю библиотеку, которую я использую, или просто можно привязать то, что мне нужно? Есть ли какие-либо подводные камни, о которых я должен знать? Вызовет ли неправильная привязка свойств / классов проблемы, если они не используются? Является ли наличие вложенных библиотек проблемой вообще?
РЕДАКТИРОВАТЬ: возможно, вы захотите узнать, что внешняя библиотека Objective C создана для iOS 7.1 SDK (больше ничего нет), а исходная библиотека, которую она обертывает, скорее всего, для iOS 5.
Комментарии:
1. Можете ли вы показать заголовок Objective-C для объявления ICAdministration? Также обратите внимание, что если для одной библиотеки Objective-C требуется другая, обе библиотеки необходимо добавить в проект привязки.
2. Да, включены все библиотеки. Он также протестирован с Objective C-project в Xcode и работает нормально. Это проприетарная библиотека, поэтому я не уверен, разрешено ли мне публиковать .h?
3. Если у вас есть проблемы с конфиденциальностью, вы можете спросить contact@xamarin.com что касается этого, они будут держать все в секрете.
Ответ №1:
Вы пробовали добавлять [ProtocolAttribute] к ICAdministration
интерфейсу в проекте привязки?
[BaseType (typeof (NSObject))]
[Protocol]
[Model]
Interface ICAdministration {}