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/
Xamarin.ios引用第三方SDK的更多相关文章
- iOS 静态库生成(引用第三方SDK、开源库、资源包)
一.静态库创建 打开Xcode, 选择File ----> New ---> Project 选择iOS ----> Framework & Library ---> ...
- AIR Native Extension for iOS 接入第三方sdk 如何实现 AppDelegate 生命周期
作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/6492385.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 去年到今年做 ...
- unity 引入 ios 第三方sdk
原地址:http://blog.csdn.net/u012085988/article/details/17785023 unity开发中ios应用时,要想成功引入第三方sdk,首先得知道c#与obj ...
- Xamarin.iOS调试提示需要iOS SDK
Xamarin.iOS调试提示需要iOS SDK 错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xco ...
- Xamarin SQLite教程Xamarin.iOS项目添加引用
Xamarin SQLite教程Xamarin.iOS项目添加引用 使用直接方式访问SQLite数据库,需要将System.Data和Mono.Data.SQlite库导入到创建的项目中.下面将分别讲 ...
- [Xamarin.iOS] 如何引用Objective-c寫的Class Library (转帖)
這個範例是如何在Xamarin.ios中去使用一個我們自行在Xcode中開發的Objective-c Class Library. 主要會執行的步驟如下 1. 在Xcode 裡面去建立一個Class ...
- IOS 编程中引用第三方的方类库的方法及常见问题
方法一:直接复制全部源文件到项目中 这样的方法就是把第三方类库的全部源文件拷贝到项目中,直接把全部.h和.m文件拖到XCode项目中就可以. 注意: 1. 假设第三方类库引用了一些系统自带类库,那么在 ...
- 解决iOS第三方SDK之间重复的symbols问题
前言:今天公司项目准备使用高德导航,其中用到了高德3D地图SDK,然后就出现bug了.在真机上可以完美运行,但是在模拟器上,就出现了一大片的bug:提示有82个Duplicate symbols,仔细 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
随机推荐
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...
- 搭建 SVN 服务器
安装.启动 SVN 服务器 在 Windows 下,可以使用以下命令将 SVN 服务注册到 windows 服务中去: sc create svnserver binPath= "drive ...
- ie a absolute bug
给a设置position:absolute时,在IE下,尽管display:block;width:100%;height:100%,依然无法点击.但是加一个背景颜色就可以了.如果不需要背景,再把背景 ...
- [ASP.NET MVC 小牛之路]14 - Unobtrusive Ajax
Ajax (Asynchronous JavaScript and XML 的缩写),如我们所见,这个概念的重点已经不再是XML部分,而是 Asynchronous 部分,它是在后台从服务器请求数据的 ...
- Ubuntu 16 安装JDK1.8
检查是否JDK已被安装: 上图表示没有安装,创建文件夹: 下载JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...
- Nginx内置变量
$args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...
- MySQL_01之MySQL数据库基础
1.通过SQL(结构化查询语言)操作数据库: DDL:数据定义语言,创建库,创建表,选择: DML:数据操作语言,完成数据增删改: DQL:数据查询语言,完成数据查询: DCL:数据控制语言,授权.回 ...
- Divshot —— 在线的可视化网页设计
Divshot 是一个在线网站,通过可视化方式进行 Web 界面的设计,并直接生成 HTML 和 CSS 代码.该工具提供常用的 Web UI 组件.界面基于 Twitter 的 Bootstrap ...
- WPF 保存image控件里的图片
string ProImgPath = ProcessPath + name + ".png";//要保存的图片的地址,包含文件名 BitmapSource BS = (Bitma ...
- JavaScript 命名空间
<script type="text/javascript"> Namespace=new Object(); Namespace.register=function( ...