У меня есть библиотека iOS (.a и .h), которую я хотел бы использовать с моим проектом Xamarin Forms. Я безуспешно пытался использовать Учебник Xamarin. Я создал проект привязок и застрял в правильном создании AppDefinition.cs (я думаю). Я НЕ МОГУ использовать Objective Sharpie, так как у меня нет проекта XCode для библиотеки, только .a и .h. В любом случае, всякий раз, когда я использую свою привязку, я получаю исключение: «Нераспознанный селектор отправлен в экземпляр».
Ниже приведен мой файл .h:
#import <Foundation/Foundation.h>
@interface EPM002Lib : NSObject
+(int)ReadParamsWithToken:(const NSString *)token withSerail:(NSMutableString *)serail withSSID:(NSMutableString *)ssid withPassword:(NSMutableString *)password withSensor:(NSMutableString *)sensor withKeepAlive:(int *)keepAlive;
+(int)SetParamsWithToken:(const NSString *)token withSSID:(const NSString *)ssid withPassword:(const NSString *)password withSensor:(const NSString *)sensor withKeepAlive:(int)keepAlive;
+(int)RebootWithToken:(const NSString *)token;
@end
Ниже мой AppDefinition.cs
using Foundation;
namespace SensorBinding
{
[BaseType(typeof(NSObject))]
interface EPM002Lib
{
[Export("ReadParams:WithToken:withSerail:withSSID:withPassword:withSensor:withKeepAlive")]
int ReadParams(NSString token, NSMutableString serial, NSMutableString ssid, NSMutableString password, NSMutableString sensor, int keepAlive);
[Export("RebootWithToken:")]
int RebootWithToken(NSString token);
}
}
Теперь я не уверен, каким должен быть правильный синтаксис для методов ApiDefinition. Я перевел оба (ReadParams и Reboot) разными способами, но оба выдают одну и ту же ошибку.
Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию. Любая помощь приветствуется. Спасибо :)
У меня уже есть толстая библиотека (.a), мне просто нужно имя метода в AppDefinition: /
Мы не можем просто дать вам имя метода, у нас нет ваших библиотек. Ссылка, которую я вам отправил, начинается с добавления вашей собственной библиотеки в проект, и сразу после этого она использует Sharpie для извлечения того, что вы ищете, с использованием этих файлов .H.
Вы сказали: «Я НЕ МОГУ использовать Objective Sharpie, поскольку у меня нет проекта XCode для библиотеки, только .a и .h» - я думаю, что это неправильно, Sharpie нужно знать только о ваших файлах .H. У вас есть файл .a для ссылки на него как на собственную статическую библиотеку.
Вот решение:
Знак + перед методом в .h указывает, что это статический метод, который должен быть аннотирован заголовком [Static] в AppDefinition.
Кроме того, каждый: в заголовке указывает параметр, а следующая строка указывает имя параметра. Что-то вроде
[Static, Export("DoStuff:secondParam:thirdParam:")]
Вышеупомянутый заголовок представляет метод DoStuff с 3 параметрами, причем последние два параметра называются secondParam и thirdParam.
using Foundation;
namespace SensorBinding
{
[BaseType(typeof(NSObject))]
interface EPM002Lib
{
[Static, Export("ReadParamsWithToken:withSerail:withSSID:withPassword:withSensor:withKeepAlive:")]
int ReadParams(NSString token, NSMutableString serial, NSMutableString ssid, NSMutableString password, NSMutableString sensor, int keepAlive);
[Static, Export("SetParamsWithToken:withSSID:withPassword:withSensor:withKeepAlive:")]
int SetParams(NSString token, NSMutableString ssid, NSMutableString password, NSMutableString sensor, int keepAlive);
[Static, Export("RebootWithToken:")]
int Reboot(NSString token);
}
}
Пожалуйста, поправьте меня, если я ошибаюсь. Надеюсь, это поможет, спасибо :)
Вы должны следовать инструкциям этого шага docs.microsoft.com/en-us/xamarin/ios/platform/…