2017-10-04 23 views
0

macのVisual Studioにネイティブobj-cライブラリをラップする際に問題があります。 BuildはNativeLibraryWrapperDef.csでクラスのコードビハインドを生成しますが、名前空間に問題があります。Xamarin 'GetNSObject'が名前空間 'Internal.Runtime'に存在しません

エラーCS0234:名前空間 'GetNSObject'が 'Internal.Runtime'という名前空間に存在しません(CS0234)(Gmc.Mobile.Sdk.iOS)

Xamarinスタジオを使用しているWorkmateは上手く構築できます。誰もこの問題に遭遇しましたか?

using System; 
using UIKit; 
using Foundation; 
using ObjCRuntime; 
using Gmc.Mobile.Sdk; 
using SafariServices; 

namespace Internal.iOS 
{ 
/* 
The first step to creating a binding is to add your native library ("libNativeLibrary.a") 
to the project by right-clicking (or Control-clicking) the folder containing this source 
file and clicking "Add files..." and then simply select the native library (or libraries) 
that you want to bind. 

When you do that, you'll notice that MonoDevelop generates a code-behind file for each 
native library which will contain a [LinkWith] attribute. MonoDevelop auto-detects the 
architectures that the native library supports and fills in that information for you, 
however, it cannot auto-detect any Frameworks or other system libraries that the 
native library may depend on, so you'll need to fill in that information yourself. 

Once you've done that, you're ready to move on to binding the API... 


Here is where you'd define your API definition for the native Objective-C library. 

For example, to bind the following Objective-C class: 

    @interface Widget : NSObject { 
    } 

The C# binding would look like this: 

    [BaseType (typeof (NSObject))] 
    interface Widget { 
    } 

To bind Objective-C properties, such as: 

    @property (nonatomic, readwrite, assign) CGPoint center; 

You would add a property definition in the C# interface like so: 

    [Export ("center")] 
    CGPoint Center { get; set; } 

To bind an Objective-C method, such as: 

    -(void) doSomething:(NSObject *)object atIndex:(NSInteger)index; 

You would add a method definition to the C# interface like so: 

    [Export ("doSomething:atIndex:")] 
    void DoSomething (NSObject object, int index); 

Objective-C "constructors" such as: 

    -(id)initWithElmo:(ElmoMuppet *)elmo; 

Can be bound as: 

    [Export ("initWithElmo:")] 
    IntPtr Constructor (ElmoMuppet elmo); 

For more information, see http://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/ 

*/ 

// @interface MRDCState : NSObject <MRDBObject> 

[BaseType(typeof(NSObject))] 
interface MRDCState : MRDBObject 
{ 
    [Export ("remoteId", ArgumentSemantic.Copy)] 
    string RemoteId { get; set; } 

    [Export("documentID", ArgumentSemantic.Copy)] 
    string DocumentID { get; set; } 

    [Export("displayName", ArgumentSemantic.Copy)] 
    string DisplayName { get; set; } 

    [Export ("isUpdateAvailable", ArgumentSemantic.Copy)] 
    bool IsUpdateAvailable { get; set;} 

    [Export("lastUpdateDate", ArgumentSemantic.Copy)] 
    NSDate LastUpdateDate { get; set; } 

    [Export("content", ArgumentSemantic.Copy)] 
    string Content { get; set; } 

    //@property (nonatomic) int stateTypeFlag; 
    [Export ("stateTypeFlag", ArgumentSemantic.Copy)] 
    StateType TypeFlag { get; set; } 
} 

// @interface MRDCAppMessage : NSObject 

[Protocol] 
[BaseType(typeof(NSObject))] 
interface MRAppMessage 
{ 
    // @property NSUInteger messageID; 
    [Export("messageID")] 
    ulong MessageID { get; set; } 

    // @property NSString *documentID; 
    [Export("documentID")] 
    string DocumentID { get; set; } 

    // @property NSString *messageType; 
    [Export("messageType")] 
    string MessageType { get; set; } 

    // @property NSString *payload; 
    [Export("payload")] 
    string Payload { get; set; } 

    // - (instancetype)initWithID:(NSUInteger)messageID documentID:(NSString *)documentID type:(NSString *)messageType payload:(NSString *)payload; 
    [Export("initWithID:documentID:messageType:payload:")] 
    IntPtr Constructor(ulong messageID, string documentID, string messageType, string payload); 
} 
+0

それは 'ObjCRuntime'名前空間にある:あなたがあなたの' NativeLibraryWrapperDef.cs'のサンプルを追加することができ、 'ObjCRuntime.Runtime.GetNSObject()' ... – SushiHangover

+0

私は質問へのファイルの一部を追加しました。 Internal.iOS名前空間からInternalを削除しようとしました。今すぐライブラリのラッパーは正常にコンパイルします。内部名前空間がどこから来たのか分かりません。 (新しいラッパー.dllはアプリケーションでそれを使用しようとするといくつかの問題がありますが、それは他の何かによって引き起こされる可能性があります) –

答えて

0

Internal.iOS名前空間からinternalを削除し、ProtocolおよびModel属性でいくつかの修正を加えて問題を修正しました。

関連する問題