Encuadernación iOS embedded Framework para Xamarin END UP da excepción?
binding frameworks (1)
Por favor, ayuda mi último paso. Gracias.
Estoy probando un framework nativo de iOS vinculante para la biblioteca Xamarin.
Creé el marco iOS y agregué MyView.h, MyView.m
- MyView.m
(instancetype) initWithFrame: (CGRect) frame {id p = [super initWithFrame: frame]; self.backgroundColor = [UIColor greenColor];
return p; }- MyView.h
@interface MyView: UIView @end
marco muy simple.
agregue ese MyView.h al encabezado público y haga el marco universal para cualquier arquitectura. Este marco ahora tiene
firstfile.h, MyView.h
dos archivos como encabezados públicos
Creé la aplicación de prueba de iOS (aplicación de VC única) y probé este framework.
MyView * v = [[MyView alloc] initWithFrame: CGRectMake (0, 0, 100, 100)]; [self.view addSubview: v];
Funcionó como yo esperaba. Dibujó una caja verde.
Creé el proyecto de biblioteca Xamarin e importé este archivo de estructura en la carpeta de referencia nativa haciendo clic con el botón derecho y agregué el archivo
Agregue estas líneas a ApiDefinition.cs en la Biblioteca Xamarin
[BaseType (typeof (UIView))] interfaz MyView {[Exportar ("initWithFrame:")] IntPtr Constructor (marco CGRect); }
construir bien
Creé la aplicación Xamarin.iOS e importé esta biblioteca a la solución y la probé.
MyView v = new MyView (nuevo CGRect (0, 0, 100, 100)); this.View.AddSubview (v);
BUILD OK! pero error de tiempo de ejecución.
La excepción ha sido lanzada por el objetivo de una invocación.
Como soy nuevo con CSharp y mono. No fue fácil venir aquí, ¿podrían ayudarme un poco en este punto?
Mi idea es que debería haber algo que apunte MyView.h en el paso Nº5. Pero no sé qué debería haber allí.
mi código fuente completo está aquí: https://github.com/myallb/test_iosstaticlib_to_xamarin
Este código está utilizando Static Library instead framework. Estaba probando una opción diferente.
Un enlace de marco de ejemplo ....
iOS basado en GreenView
Universal Framework (a través de Xcode):
- Agregue una nueva clase Cocoa Touch denominada subclase
UIView
:
MyView.h
:
#import <UIKit/UIKit.h>
@interface MyView : UIView {
}
@end
MyView.m
:
#import "GreenView/MyView.h"
@implementation MyView
- (void)baseInit {
self.backgroundColor = [UIColor greenColor];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self baseInit];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self baseInit];
}
return self;
}
@end
GreenView.h
:
#import <UIKit/UIKit.h>
FOUNDATION_EXPORT double GreenViewVersionNumber;
FOUNDATION_EXPORT const unsigned char GreenViewVersionString[];
#import "MyView.h"
Ejemplo de Sharpie (para iniciar el ApiDefinition.cs
)
sharpie bind
-sdk iphoneos9.3
-o GreenViewBinding
GreenView.framework/Headers/*.h
Crear un Xamarin.iOS
enlace Xamarin.iOS
:
- Agregue
GreenView.framework
como referencia nativa
ApiDefinition.cs
using UIKit;
namespace GreenViewBinding
{
// @interface MyView : UIView
[BaseType(typeof(UIView))]
interface MyView
{
}
}
Uso:
Crear una aplicación de vista única de iOS
Agregue el proyecto de enlace como referencia.
ViewController.cs
Método ViewDidLoad
:
public override void ViewDidLoad()
{
base.ViewDidLoad();
var view = new GreenViewBinding.MyView();
view.Frame = new CoreGraphics.CGRect(40, 40, 100, 100);
Add(view);
}