我正在开发需要CFNetwork框架的iOS静态库绑定。 我已经看过如何DllImport CFNetwork的例子,但它要求该方法是外部静态的。 不幸的是,这似乎对linkwith.cs中的方法无效 该库似乎实际工作并启动curl命令,但我收到错误:
-[MKNetworkOperation operationFailedWithError:] [Line 1293] State: 0
我假设这是因为我没有导入CFNetwork,因为该库可以使用常规的XCode iOS项目。 此外,每次我在模拟器中运行项目时,它会询问我是否要允许网络连接。 这不会发生在使用该库的普通XCode项目中。
以下是所有相关文件:
ApiDefinition.cs http://pastebin.com/p3S0H28X
withlink.cs http://pastebin.com/UR0X2pZ1
构建输出http://pastebin.com/aTbdW2Gj
应用输出http://pastebin.com/Hxcuufgj
我感谢大家提供的任何帮助。 谢谢!
[编辑 - 2015-08-26]
所以我发现了这个: https://developer.xamarin.com/guides/ios/advanced_topics/native_interop/
不幸的是,这似乎让我陷入了一个兔子洞。
在我们的测试应用程序中,我输入了文章中所述的额外构建参数:
要配置Xamarin.iOS要链接库,关于最终可执行文件的项目选项(不是库本身,而是最终程序),您需要在iOS Build'额外参数中添加(这些是您的项目选项)" -gcc_flags"选项后跟一个带引号的字符串,其中包含程序所需的所有额外库,例如:
-gcc_flags" -L $ {ProjectDir} -lMylibrary -force_load $ {ProjectDir} /libMyLibrary.a"
以上示例将链接libMyLibrary.a
您可以使用-gcc_flags指定任何命令行集 传递给GCC编译器的参数用于做最终的链接 可执行文件。例如,这个命令行也引用了 CFNetwork框架:
-gcc_flags" -L $ {ProjectDir} -lMylibrary -lSystemLibrary -framework CFNetwork -force_load $ {ProjectDir} /libMyLibrary.a"
我用正确的名称替换了-lMylibrary和libMyLibrary.a然后我收到了大量错误,说明我有重复的条目。我想是因为我已经引用了绑定DLL。另外-lSystemLibrary抛出错误,所以我删除了它。
最后我试了一下:
-gcc_flags" -L $ {ProjectDir} -framework CFNetwork"
它构建没有错误,但我仍然得到
- [MKNetworkOperation operationFailedWithError:] [Line 1288]
可以在此处找到应用的构建输出: http://pastebin.com/sLNUwYwX
仍希望有人可以提供帮助!
[编辑2015-09-03] 在模拟器中运行时,我仍然会收到MKNetworkOperation错误。现在我已经拿回了iPad,我已经尝试过测试了。使用以下输出在iPad上运行时应用程序完全崩溃:
Foundation.MonoTouchException:抛出Objective-C异常。名称: NSInvalidArgumentException原因: - [ApiEngine randomStringOfLength:]: 无法识别的选择器发送到实例0x1742a3900 at ObjCRuntime.Runtime.ThrowNSException(IntPtr ns_exception)[0x00000] 在 /Users/builder/data/lanes/1977/2c66d2fe/source/maccore/src/ObjCRuntime/Runtime.cs:167 在ObjCRuntime.Runtime.throw_ns_exception(IntPtr exc)[0x00000] in :0 at at(包装器本机到托管) ObjCRuntime.Runtime:at(wrapper)的throw_ns_exception(intptr) 托管到本机)ApiDefinition.Messaging:void_objc_msgSend (intptr,intptr)在shared2you.Shared2YouAdManager.StartDetection() [0x0001b] in:0 at s2u_xamarin_uni.AppDelegate.FinishedLaunching(UIKit.UIApplication 应用程序,Foundation.NSDictionary launchOptions)[0x00021] in /用户/ manns41078 /桌面/ Xamarin Projects / s2u_xamarin_uni / s2u_xamarin_uni / AppDelegate.cs:50 at at at (包装器托管到原生)UIKit.UIApplication:UIApplicationMain UIKit.UIApplication.Main上的(int,string [],intptr,intptr) (System.String [] args,IntPtr principal,IntPtr delegate)[0x00005] in /Users/builder/data/lanes/1977/2c66d2fe/source/maccore/src/UIKit/UIApplication.cs:63 在UIKit.UIApplication.Main(System.String [] args,System.String principalClassName,System.String delegateClassName)[0x0001c] in /Users/builder/data/lanes/1977/2c66d2fe/source/maccore/src/UIKit/UIApplication.cs:46 在s2u_xamarin_uni.Application.Main(System.String [] args)[0x00008] 在/ Users / manns41078 / Desktop / Xamarin 项目/ s2u_xamarin_uni / s2u_xamarin_uni / Main.cs:12
库是一个FAT库,在XCode中工作没问题。 Xamarin为什么给我这样的心痛? java版本是一个蛋糕走。