Привязка Deezer iOS SDK (Objective-C) к приложению Xamarin (C#)
Я занимаюсь разработкой кроссплатформенного мобильного приложения с использованием Xamarin (с Xamarin Studio версии 6.0.2). Сначала я сосредоточусь на iOS. Я хочу внедрить Deezer SDK в моем приложении. Поскольку SDK поставляется с Objective-C, мне нужно привязать его к C#, и именно здесь у меня возникают проблемы.
Я использую инструмент Xamarin Objective Sharpie 3.3.0p, основанный на этом пошаговом руководстве, чтобы создать файлы ApiDefinition.cs и Structs.cs https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/walkthrough/.
Вот детали того, что я сделал:
1) Я скачал iOS SDK на сайте разработчиков Deezer
2) Я создал проект Binding Library для iOS на Xamarin
3) Я использовал файл библиотеки FAT "libDeezer.a" в качестве нативной ссылки.
4) Я запустил следующую командную строку:
sharpie bind -output ./DeezerAPI -namespace DeezerAPI -sdk iphoneos9.3 ./deezer-ios-sdk-v0/DeezerSDK/include/*.h
Обратите внимание, что я пробовал не только нацеливаться на *.h. На самом деле, в пошаговом руководстве сказано, что я должен выбрать заголовочный файл верхнего уровня. Поэтому я внимательно прочитал эти заголовочные файлы и не смог найти уникальный заголовочный файл верхнего уровня. На самом деле, мне пришло в голову, что существует 6 заголовочных файлов верхнего уровня, так как они не вызываются никакими другими заголовочными файлами.
- Deezer + Compatibility.h
- DZRGenericCancelable.h
- DZRPlayableArray.h
- DZRPlayer.h
- DZRRequestManager.h
- NSBundle + DZRBundle.h
Я пытался настроить таргетинг на каждый из этих файлов отдельно и вместе. Команда работала хорошо каждый раз и доставляла файлы ApiDefinition.cs и StructsAndEnums.cs.
5) Я скопировал и вставил содержимое этих файлов в соответствующие файлы проекта Binding и объединил оригинальное "использование" с созданными.
6) Я попытался построить проект, и вышла куча ошибок.
Вот ошибки, которые у меня есть:
- Тип или пространство имен '$name' не найдено. Вам не хватает какой-либо ссылки на сборку? с $name as (BaseType, Abstract, Wrap, NullAllowed, StaticAttribute, HttpMethod, ResponseFormat, BufferManager)
- Член уже определен. Переименуйте этот элемент или используйте различные типы параметров. (Я думаю, что sharpie только что назвал два метода одинаково, и мне просто нужно изменить имя одного из них)
- Введите byte, byte, short, ushort, int, uint, long, ulong ожидаемый. (ApiDefinition использует nuint и nint, я исправил их, меняя их на ulong и long)
Вот проект Binding с файлами ApiDefinition.cs и Structs.cs, которые я нацелил на *.h:
https://github.com/aroy314/DeezerSDKBinding
Я был бы благодарен, если бы кто-нибудь мог дать мне подсказку о том, что не так и как сделать с работой проекта.