Kathiresan Murugan
Kathiresan Murugan

Reputation: 2962

Swift framework on Xamarin.iOS - Foundation.MonoTouchException has been thrown

Xamarin iOS app was crashed while running swift framework.

In my .framework - Swift class

import Foundation

@objc(Member)
open class Member: NSObject {

    @objc
    func getMemberID() -> String {
        return "Hii, This is member code .framework"
    }
}

I have build a framework for simulator iPhone7 and added in Native framework on Visual studio Xamarin.iOS

And I have coded manually for interface class.

using System;

using ObjCRuntime;
using Foundation;
using UIKit;

namespace CustomLibrary {

    [BaseType(typeof(NSObject))]
    interface Member
    {
        [Export("getMemberID")]
        string MemberID { get; }
    }
}

After that I have add reference for Binding library to iOS App project.

enter image description here

In ViewController I have imported a Binding library and allocate a class and print in log.

using System;
using UIKit;
using CustomLibrary;

namespace SwiftFrameworkApp
{
    public partial class ViewController : UIViewController
    {
        public ViewController(IntPtr handle) : base(handle)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.

            Member memberObj = new Member();
            System.Diagnostics.Debug.Print(memberObj.MemberID());
        }

        public override void DidReceiveMemoryWarning()
        {
            base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }
    }
}

When I build a project. Its was shown

Errors 0 and warning 1

enter image description here

After that When I run a project. App was launched in simulator and crashed with below error.

enter image description here

Upvotes: 1

Views: 197

Answers (1)

nevermore
nevermore

Reputation: 15806

I mean in your Member interface, it should be something like this:

[BaseType(typeof(NSObject))]
interface Member
{
    [Export("getMemberID")]
    string GetMemberID ();
}

Upvotes: 1

Related Questions