MT5202: Falló el enlace nativo – Xamarin.iOS 7 – ExternalAccessory

Estoy intentando utilizar un objective nativo-C Framework creando un proyecto binding Xamarin.iOS. El proyecto de enlace en sí mismo comstack bien, pero el proyecto de la aplicación de iOS que lo hace reference no se genera cada vez que agrego una línea de código que utiliza esta biblioteca binding. El error es:

Error MT5202: Native linking failed. Please review the build log. (MT5202) 

Había buscado por internet, incluido aquí, y veía a muchas personas con un problema similar, pero estaba relacionado con la architecture en la que se comstackba la biblioteca. Así que, para asegurarse, he revisado la biblioteca en las herramientas de command y el resultado fue que debería tenerlo funcionando tanto en el Simulador como en el Dispositivo real. Los commands y las salidas fueron:

 # xcrun -sdk iphoneos lipo -info libDTEFMobile.a Architectures in the fat file: libDTEFMobile.a are: armv7 armv7s i386 

y

 # file libDTEFMobile.a libDTEFMobile.a: Mach-O universal binary with 3 architectures libDTEFMobile.a (for architecture armv7): current ar archive random library libDTEFMobile.a (for architecture cputype (12) cpusubtype (11)): current ar archive random library libDTEFMobile.a (for architecture i386): current ar archive random library 

Así que, para estar seguro, he revisado mi file linkwith.cs en el proyecto binding y esto es lo que tengo:

 [assembly: LinkWith ("libDTEFMobile.a", LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator, ForceLoad = true)] 

Los últimos loggings en mi salida de compilation son:

 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -Qunused-arguments -miphoneos-version-min=7.0 -c -o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.o -x assembler /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Wl,-pie -miphoneos-version-min=7.0 -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/M2MobileiOS.exe.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/monotouch.dll.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/M2.Mobile.Bindings.iOS.dll.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/registrar.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/main.armv7.o -force_load /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/libDTEFMobile.a -o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/bin/iPhone/Debug/M2MobileiOS.app/M2MobileiOS -framework CFNetwork -framework Foundation -framework UIKit -framework CoreGraphics -lz -liconv -u _mono_pmip -u _monotouch_release_managed_ref -u _monotouch_create_managed_ref -u _monotouch_log /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonoboehm-2.0.a /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonotouch-debug.a Process exited with code 1, command: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Wl,-pie -miphoneos-version-min=7.0 -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/M2MobileiOS.exe.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/monotouch.dll.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/M2.Mobile.Bindings.iOS.dll.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/registrar.armv7.o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/main.armv7.o -force_load /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/obj/iPhone/Debug/mtouch-cache/libDTEFMobile.a -o /Users/gutemberg/Projects/M2.Mobile/M2.Mobile.iOS/bin/iPhone/Debug/M2MobileiOS.app/M2MobileiOS -framework CFNetwork -framework Foundation -framework UIKit -framework CoreGraphics -lz -liconv -u _mono_pmip -u _monotouch_release_managed_ref -u _monotouch_create_managed_ref -u _monotouch_log /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonoboehm-2.0.a /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonotouch-debug.a Undefined symbols for architecture armv7: "_EAAccessoryDidConnectNotification", referenced from: -[PaxMessager connectByBT] in libDTEFMobile.a(DTEFMobile) "_EAAccessoryDidDisconnectNotification", referenced from: -[PaxMessager connectByBT] in libDTEFMobile.a(DTEFMobile) "_OBJC_CLASS_$_EAAccessoryManager", referenced from: objc-class-ref in libDTEFMobile.a(DTEFMobile) "_OBJC_CLASS_$_EASession", referenced from: objc-class-ref in libDTEFMobile.a(DTEFMobile) (maybe you meant: _OBJC_CLASS_$_EASessionController) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation) error MT5202: Native linking failed. Please review the build log. at MonoTouch.Application.NativeLink () [0x00000] in <filename unknown>:0 at MonoTouch.Application.BuildApp () [0x00000] in <filename unknown>:0 at MonoTouch.Application.Build () [0x00000] in <filename unknown>:0 at MTouch.Main2 (System.String[] args) [0x00000] in <filename unknown>:0 at MTouch.Main (System.String[] args) [0x00000] in <filename unknown>:0 ---------------------- Done ---------------------- 

Y mis detalles de la versión de Xamarin.iOS son:

 Xamarin Studio Version 4.0.12 (build 3) Installation UUID: 7348d641-ed6d-4c8a-b59a-116674e06dfd Runtime: Mono 3.2.3 ((no/8d3b4b7) GTK 2.24.20 GTK# (2.12.0.0) Package version: 302030000 Apple Developer Tools Xcode 5.0 (3332.25) Build 5A1413 Xamarin.iOS Version: 7.0.0.11 (Trial Edition) Hash: aa35ba3 Branch: Build date: 2013-18-09 16:42:48-0400 Build Information Release ID: 400120003 Git revision: 593d7acb1cb78ceeeb482d5133cf1fe514467e39 Build date: 2013-08-07 20:30:53+0000 Xamarin addins: 25a0858b281923e666b09259ad4746b774e0a873 Operating System Mac OS X 10.8.5 Darwin Gutembergs-MacBook-Pro.local 12.5.0 Darwin Kernel Version 12.5.0 Mon Jul 29 16:33:49 PDT 2013 root:xnu-2050.48.11~1/RELEASE_X86_64 x86_64 

¿Alguien tiene una pista sobre cómo conseguí que esto funcione? La biblioteca que estoy intentando usar está vinculada a ExternalAccessory.framework para que pueda acceder a un dispositivo bluetooth y esto es lo que parece quejarse de los loggings …

Gracias por la ayuda, realmente aprecio …

Gutemberg

Debe vincular con el marco ExternalAccessory, Xamarin.iOS no puede determinar automáticamente que esto debe hacerse para sus enlaces.

Esto es fácil de hacer, simplemente agregue la propiedad Frameworks al atributo LinkWith en su proyecto binding:

 [LinkWith (..., Frameworks = "ExternalAccessory")] 

descargue el enlace del package xamarin.build.download en ios y luego agregue un argumento mtouch adicional "–registrar: static" (sin comillas / estudios xamarin) en la compilation ios para el error mt5202 y mt5209