Проблема с привязкой библиотеки Objective-C к C# с помощью Objective Sharpie
Я пытаюсь пройтись по этому руководству:
https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/walkthrough/
пытаемся создать привязки для этого проекта github:
https://github.com/lminhtm/LMGaugeView
Использование Sharpie 3.4.
Я сталкиваюсь со следующими проблемами:
Я не могу сгенерировать Fat двоичный файл с архитектурой
i386 armv7 x86_64 arm64
потому что я строю против iOS11. Я могу генерировать только толстый двоичный файл с архитектуройx86_64
а такжеarm64
при попытке других выдает сообщение об ошибкеinvalid iOS deployment version, iOS 10 is the max deployment target for 32-bit targets
, Это ожидается?Когда я затем использую Sharpie, я могу генерировать файлы API и Struct, однако каждый из этих файлов имеет огромный размер: в структуре Struts размер 24K+, а в API 54K+. Я также следовал учебному пособию по YouTube, и он получил около 200 строк, так что тот факт, что у меня такие большие цифры, заставляет меня думать, что что-то происходит. Его учебник не был для моего проекта Objective-C, но я даже попробовал тот же, что и он, и в итоге получил тот же результат.
Файл Struct имеет более 7K ошибок, и я вижу бесчисленные строки, которые выглядят примерно так:
// extern long double tanhl (long double) __attribute__((const)) __attribute__((nothrow)); [DllImport ("__Internal")] [Verify (PlatformInvoke)] static extern [unsupported Builtin: long double] tanhl ([unsupported Builtin: long double]);
Где пропущены имена идентификаторов и есть это [неподдерживаемая сборка: часть, которую я не понимаю.
Существует также бесчисленное множество ссылок на другие версии iOS, а также watchOS и TV, поэтому создается впечатление, что он пытается создать API и Structs для каждой существующей ОС и версии, что имеет смысл, почему файлы будут такими большими. Вот небольшой фрагмент из файла Struct:
// extern CGPathRef _Nullable CGPathCreateCopyByTransformingPath (CGPathRef _Nullable path, const CGAffineTransform * _Nullable transform) __attribute__((availability(ios, introduced=5.0))) __attribute__((cf_audited_transfer));
[iOS (5,0)]
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
[return: NullAllowed]
static extern unsafe CGPathRef* CGPathCreateCopyByTransformingPath ([NullAllowed] CGPathRef* path, [NullAllowed] CGAffineTransform* transform);
// extern CGMutablePathRef _Nullable CGPathCreateMutableCopy (CGPathRef _Nullable path) __attribute__((availability(ios, introduced=2.0))) __attribute__((cf_audited_transfer));
[iOS (2,0)]
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
[return: NullAllowed]
static extern unsafe CGMutablePathRef* CGPathCreateMutableCopy ([NullAllowed] CGPathRef* path);
// extern CGMutablePathRef _Nullable CGPathCreateMutableCopyByTransformingPath (CGPathRef _Nullable path, const CGAffineTransform * _Nullable transform) __attribute__((availability(ios, introduced=5.0))) __attribute__((cf_audited_transfer));
[iOS (5,0)]
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
[return: NullAllowed]
static extern unsafe CGMutablePathRef* CGPathCreateMutableCopyByTransformingPath ([NullAllowed] CGPathRef* path, [NullAllowed] CGAffineTransform* transform);
Я знаю, что эти файлы должны быть намного меньше, тем более что код Objective-C - это один заголовочный файл. Что я могу здесь делать не так?
Я могу предоставить более подробную информацию, если это необходимо!
1 ответ
Я быстро проверил модуль LMGaugeView, который вы упомянули.
Оказывается, для этого у вас должны быть установлены последние версии XCode и Sharpie (текущая версия 3.4).
Вы можете обновить шулер, запустив sharpie update
, Затем вы можете создать привязку.
Я пытался, и, кажется, работает нормально, посмотрите сами: http://youtube.com/watch?v=g7qQJnMxubU&feature=youtu.be
Бесстыдный плагин - инструмент, который я использовал в видео, является оберткой для шулера, которую я использую для привязок Xamarin.iOS - objc-automatic.