Создание привязки ios для xamarin forms

У меня есть библиотека 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) разными способами, но оба выдают одну и ту же ошибку.

Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию. Любая помощь приветствуется. Спасибо :)

Вы должны следовать инструкциям этого шага docs.microsoft.com/en-us/xamarin/ios/platform/…

Nirmal Subedi 31.10.2018 14:49

У меня уже есть толстая библиотека (.a), мне просто нужно имя метода в AppDefinition: /

Singhal2 31.10.2018 14:51

Мы не можем просто дать вам имя метода, у нас нет ваших библиотек. Ссылка, которую я вам отправил, начинается с добавления вашей собственной библиотеки в проект, и сразу после этого она использует Sharpie для извлечения того, что вы ищете, с использованием этих файлов .H.

Nirmal Subedi 31.10.2018 15:09

Вы сказали: «Я НЕ МОГУ использовать Objective Sharpie, поскольку у меня нет проекта XCode для библиотеки, только .a и .h» - я думаю, что это неправильно, Sharpie нужно знать только о ваших файлах .H. У вас есть файл .a для ссылки на него как на собственную статическую библиотеку.

Nirmal Subedi 31.10.2018 15:11
0
4
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот решение:

Знак + перед методом в .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);
    }
}

Пожалуйста, поправьте меня, если я ошибаюсь. Надеюсь, это поможет, спасибо :)

Другие вопросы по теме