Xamarin iOS - 如何使用CFNetwork框架依赖绑定工作

时间:2015-08-21 23:43:38

标签: c# ios binding xamarin cfnetwork

我正在开发需要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版本是一个蛋糕走。

0 个答案:

没有答案