2017-05-18 11 views
2

私は最近、バインドしようとしているiOS SDKを自分のアプリケーションに使用することができました。 私は、ApiDefinitions.csクラスを作成した.aファイル、.hファイルを持っており、すべてがビルドされています。しかし、実行時に、私が呼び出すメソッドやプロパティは、このようなエラーが発生します "Neolane_SDKの無効なILコード:RegisterDevice(Foundation.NSData、string、Foundation.NSDictionary):IL_0043:stloc.s 4 "Xamarin.iOS実行時にプロジェクトエラーが発生しました

ネイティブiOSアプリケーションでも使用されているため、ライブラリ自体が期待どおりに動作していることがわかりました。 私は、私のバインディングプロジェクトの設定に欠けているものを見つけようとしています。

#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 
//the tag id dedicated to the opening of an app following a notification 
#define NL_TRACK_CLICK   @"2" 

@interface Neolane_SDK : NSObject { 
} 

// marketingHost is the hostname of the Neolane marketing instance (i.e. host.neolane.org) 
@property (strong, nonatomic) NSString *marketingHost; 
// trackingHost is the hostname of the Neolane tracking instance (i.e. tracking.neolane.org) 
@property (strong, nonatomic) NSString *trackingHost; 
// integrationKey is the integration key as confgured in your Neolane instance 
@property (strong, nonatomic) NSString *integrationKey; 
// The connection timout in second (default 30.0 seconds) 
@property (nonatomic) double requestTimeout; 


// Get the Neolane_SDK instance 
+ (Neolane_SDK *) getInstance; 

// Register a device in the Neolane instance 
// @param token the token as received from the didRegisterForRemoteNotificationsWithDeviceToken callback. 
// @param userKey the user identifier 
// @param additionalParams custom additional parameters 
- (void) registerDevice:(NSData *) token :(NSString *) userKey :(NSDictionary *) additionalParams; 

// Notify Neolane of the opening of a push message 
// @param deliveryId is the Neolane delivery identifier, as received in the push message 
// @param broadlogId is the Neolane broadlog identifier, as received in the push message 
// @param tagId tag identifier in Neolane server (NL_TRACK_CLICK when opening an app following a notification). 
- (void) track:(NSString *) deliveryId :(NSString *) broadlogId :(NSString *) tagId; 

// Send tracking information to Neolane 
// @param launchOptions object received by the application before the opening of the application 
// @param tagId tag identifier in Neolane server (NL_TRACK_CLICK when opening an app following a notification) 
- (void) track:(NSDictionary *) launchOptions :(NSString *) tagId; 


void displayOptions(NSDictionary * launchOptions); 
@end 

そして、ここでは、シャーピーで作成したC#の関連するインタフェースです::笑顔:それにもかかわらず

// @interface Neolane_SDK : NSObject 
    [BaseType(typeof(NSObject))] 
    interface Neolane_SDK 
    { 
     // @property (nonatomic, strong) NSString * marketingHost; 
     [Export("marketingHost", ArgumentSemantic.Strong)] 
     string MarketingHost { get; set; } 

     // @property (nonatomic, strong) NSString * trackingHost; 
     [Export("trackingHost", ArgumentSemantic.Strong)] 
     string TrackingHost { get; set; } 

     // @property (nonatomic, strong) NSString * integrationKey; 
     [Export("integrationKey", ArgumentSemantic.Strong)] 
     string IntegrationKey { get; set; } 

     // @property (nonatomic) double requestTimeout; 
     [Export("requestTimeout")] 
     double RequestTimeout { get; set; } 

     // +(Neolane_SDK *)getInstance; 
     [Static] 
     [Export("getInstance")] 
     Neolane_SDK Instance { get; } 

     // -(void)registerDevice:(NSData *)token :(NSString *)userKey :(NSDictionary *)additionalParams; 
     [Export("registerDevice:::")] 
     void RegisterDevice(NSData token, string userKey, NSDictionary additionalParams); 

     // -(void)track:(NSString *)deliveryId :(NSString *)broadlogId :(NSString *)tagId; 
     [Export("track:::")] 
     void Track(string deliveryId, string broadlogId, string tagId); 

     // -(void)track:(NSDictionary *)launchOptions :(NSString *)tagId; 
     [Export("track::")] 
     void Track(NSDictionary launchOptions, string tagId); 
    } 

、ここにある。ここ

は、私は.aライブラリに関連付けられたソース.hファイルであります私の.aファイルのLinkWithオプション

[assembly: LinkWith("libNeolane_SDK.a", SmartLink = true, ForceLoad = true)] 

すべてのヘルプ/フィードバック/経験があります:)

ありがとうございます!

答えて

4

csc(WindowsまたはMono 5.0+を搭載したMacOS)を使用している場合は、を設定してください。コンパイラオプションでを有効にしてください。デフォルトデバッグことで

は、そのオプションおよび生成されたILを有効にしていない、最適ではないの横に、mtouch結合オプティマイザを混同することができます構築します。

これは次のXIバージョン(10.12)で修正される予定ですが、バインディングプロジェクトで/optimize+を使用することには欠点はありません(それを元に戻す必要はありません)。

+1

私はあなたの答えに十分に感謝することはできません。それだった! – Miiite

関連する問題