Я пытаюсь связать библиотеку Objective C в проекте Xamarin. В первый раз я делаю это и не зная много Objective C, это настоящий головной скребок.
Я сражался с Objective Sharpie и смог получить проект, который компилируется и кажется одобренным. Я раскрываю как можно меньше библиотеки, чтобы иметь что-то, что работает, но при попытке отладки на устройстве (это не i386 в любом случае, это lib для внешнего аксессуара). Я получаю следующую ошибку компоновщика:
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, без везения.
Похоже, что существует множество флагов или вариантов командной строки, которые можно использовать для всех видов вещей, но это действительно не мой дерн. Мне никогда не приходилось иметь дело с компоновщиком раньше, поэтому, естественно, мир С является темным и страшным местом.
Любые указатели будут очень благодарны. Должен ли я привязывать всю библиотеку, которую я использую, или это просто ОК, чтобы связать то, что мне нужно? Есть ли какие-то подводные камни, о которых я должен знать? Неправильное связывание свойств/классов вызовет проблемы, если они не будут использоваться? Есть ли проблемы с вложенными библиотеками?
EDIT: Возможно, вам захочется узнать, что внешняя Objective C lib построена для iOS 7.1 SDK (ничего больше нет), а исходная библиотека, которую она обертывает, скорее всего подходит для iOS 5.
Вы пытались добавить [ProtocolAttribute] к интерфейсу ICAdministration
в проекте привязки?
[BaseType (typeof (NSObject))]
[Protocol]
[Model]
Interface ICAdministration {}