¿Cómo vincular una biblioteca estática de Cocoa Touch a un proyecto MonoTouch?

He creado una biblioteca estática Cocoa Touch usando Xcode 4 y quiero usarlo en un proyecto MonoTouch. ¿Cómo procedo?

Aquí está el contenido de mi biblioteca estática:

MyClass.h
encabezamiento

MyClass.m
implementación


Construí usando "Build For Archiving" después de seguir este BLOG POST y tomé el libMyLib.a que generó y lo agregué a un nuevo Proyecto de enlace MonoTouch.
proyecto vinculante

Luego reemplacé el contenido de libMyLib.linkwith.cs, porque ESTE BLOG POST lo dijo.

[assembly: LinkWith ("libMyLib.a", LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, ForceLoad = true, Frameworks="CoreGraphics QuartzCore UIKit")] 

Luego agregué esto a ApiDefinition.cs
introduzca la descripción de la imagen aquí

Dejé StructsAndEnums.cs vacío.


Luego construí con Release y tomé el dll de la carpeta bin y lo agregué a la raíz de un proyecto de iPad MonoTouch, y lo agregué a las references.

Luego, después de seguir las instrucciones en ESTE ARTÍCULO , establezco los arguments mtouch en este

 -gcc_flags "-L${ProjectDir} -lMyLib -force_load -ObjC" 

Luego traté de ejecutar el proyecto y obtuve este error en la salida de compilation

error MT5201: falla el enlace nativo. Revise las banderas de usuario proporcionadas a gcc: "-L / Users / herpderp / Projects / TestProject / TestProject" "-lMyLib" -force_load "/Users/herpderp/Projects/TestProject/TestProject/libMyLib.a" "-L / Users / herpderp / Projects / TestProject / TestProject "" -lMyLib "" -force_load "" -ObjC "

Este directory contiene una muestra completa que muestra varias forms de integrar las bibliotecas de Objective-C con MonoTouch:

https://github.com/xamarin/monotouch-samples/tree/master/BindingSample

El post de error para MT5201 le dice que hubo un error al hacer el paso del enlace nativo. Eso está 100% seguro. La segunda parte solicita revisar sus gcc_flags , que es la razón más común, para la falla. Sin embargo, no está 100% seguro de que este sea el problema. Cuando busca ayuda, siempre debe pegar las líneas encima de cualquier error (ya que podrían ser útiles).

Es probable que el error sobre la duplicación de las opciones otorgadas al linker nativo. Esto ocurre porque los proporcionó dos veces (es decir, en su proyecto binding y en su proyecto principal).

Del artículo Binding Binding-C Types que vincularon:

O puede aprovechar el LinkWithAttribute de nivel de ensamblaje, que puede insert en sus files de contrato …

Significa que los arguments mtouch adicionales no son necesarios con el uso del atributo LinkWith . Dado que está utilizando esta manera (la mejor 🙂 para vincular su biblioteca estática, puede omitir este paso (desde su proyecto principal).

Al hacerlo, usted (y cualquier persona que utiliza su biblioteca) tiene un favor, ya que tienen less riesgos de perder el time de synchronization (por ejemplo, actualización de biblioteca o configuration de compilation diferente).