• Xamarin.ios引用第三方SDK


    引言

      诚然,Xamarin是个优秀的跨平台解决方案,但毕竟还是不能将Native中所有的方法都直接实现。诸如各种第三方库,也都只有java/oc原生版本的SDK,无法直接拿过来直接使用。但,不能直接拿过来用,就没办法扩展APP功能,不能使用已经造好的轮子吗?答案是否定的!Xamarin中可以通过引用java中的Jar包,oc中的A档,实现这一切!

    什么是a档?

      a档就是iOS中的class library,我是这么理解为啥叫a档的,因为a档生成的文件扩展名是.a。举个栗子:

    如何建立a档

      1、在XCode中建立一个新的project,选择iOS底下的framework&library中的Cocoa Touch Static librar,输入Product Name,选择好存储地址,项目就建立好了。        

      2、项目全貌

      3、点选左边侧边栏中,默认生成的TestClassLib.h文件,在该文件中增加个公开的静态方法。给之后引用该a档的项目调用方法。

      4、接着打开TestClassLib.m,给add方法写上具体实现方法

      5、将项目设定中的CodeSigning设定为Developer。

      6、Build For Running

      7、运行成功后,展开Products文件夹,便能看到我们所需要的a档了。show in finder。在Debug-iphonesimulator中的a档,是给iPhone设备模拟器用了的;Debug-iphoneos中的a档,则是给真机使用。如果打开文件夹后发现,只有一种类型的(如下1图),我们需要重新Build For Running,在重新编译前,在xcode中调整编译目标即可(如下2图),在打开finder,即可看到两种类型(如下3图)

    在Xamarin工程中引用a档

      1、在一个现有的Xamarin工程中,添加新的工程,选择类型为Bindings Library的工程,写好工程名,创建成功。

      2、在建好的Bindings Library中,添加现有项目,选择我们刚刚创建的a档,并确认该a档文件的BuildAction为ObjcBindingNativeLibrary。

      3、下载Objective Sharpie——转换c#代码的工具 链接:https://download.xamarin.com/objective-sharpie/ObjectiveSharpie.pkg

        1.打开terminal

        1.确认Xcode的SDK版本,输入 sharpie xcode -sdks

        2.切换到你希望生成文件所在的位置

        3.输入转换指令 sharpie bind -output

        4、sharpie bind -output TestClassLib -namespace TestClassLib -sdk iphoneos9.3 ./TestClassLib/*.h

         

      4、将利用Objective Sharpie生成的ApiDefinitions.cs替换Bindings Library中的ApiDefinition.cs

        注意,工具生成的是ApiDefinitions,而原项目中的是ApiDefinition,多了个s哦,一定不能改着个文件的文件名,否则会报错。

        另,ApiDefinition中的错误不用去理会,build也不会报错。

        

      5、好,至此我们的操作差不多结束了,接下来,编写代码,调用a档中的方法。

        

    结束语

      OK,这篇文章算是说完了,虽然没有拿市面上任何一个SDK作例子,但我想,授人以鱼不如授人以渔,知道怎么制作a档,引用a档,大部分SDK,应该都可以搞定了。

      参考资料:https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/walkthrough/

           https://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/

  • 相关阅读:
    FindWindowEx
    c# 基础知识
    propertychange 属性说明
    Python3-2020-测试开发-22- 异常
    Python3-2020-测试开发-21- 面向对象之封装,继承,多态
    Python3-2020-测试开发-20- Python中装饰器@property
    Python3-2020-测试开发-19- Python中私有属性和私有方法
    Python3-2020-测试开发-18- Python中方法没有重载
    Python3-2020-测试开发-17- 类编程
    Python3-2020-测试开发-16- 嵌套函数(内部函数 )&nonlacal声明外部函数的局部变量&LEGB规则
  • 原文地址:https://www.cnblogs.com/qinhe/p/5506414.html
Copyright © 2020-2023  润新知