oc 导入swift 库

2019-05-05 15:31:39 Sunny_Captain 阅读数 750

swift导入oc第三方库

前言

对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程中导入并使用oc版本的第三方库进行阐述。

正文

1.编写oc桥接头文件

顾名思义,将oc编写的库桥接到swift工程里的头文件。
结合实战,首先我在项目工程的根目录下创建一个名为xxxx.h的.h文件,内容如下,暂时不去修改:

#ifndef xxxx_h
#define xxxx_h
#endif 

接着,在项目的targets里的Build Settings选项里,找到Objective-c Bridging Header选项:

在这里插入图片描述
将这一项设置为刚刚创建的.h文件,如“xxxx.h”

2.导入第三方库

做完第一步,准备工作就已经做好了,接下来也很简单。我在这里分两种情况进行阐述。
(1)framework形式导入的第三方库:
例如集成支付宝的sdk(https://docs.open.alipay.com/204/105295/),导入后项目里会存在AlipaySDK.framework文件。这个时候在swift中,你还是不能直接引用支付宝相关的类和方法的,这个时候,我们在刚刚创建的桥接文件里,加上:

#ifndef xxxx_h
#define xxxx_h
//导入支付宝的OC的头文件
#import <AlipaySDK/AlipaySDK.h>
#import <AlipaySDK/APayAuthInfo.h>
#endif 

然后你会发现,在代码里,你就可以正常调用支付宝SDK中的类和方法了,就这么简单。
(2)直接拷贝的第三方库:
例如第三方客服平台Udesk的集成(http://www.udesk.cn/doc/ios/udesksdk_ios/),按其要求手动将第三方工程文件导入你的项目中后,你的项目会存在如下的文件夹:

此时,仍然需要在桥接文件里将你所需要用到的类文件导入,如:

#ifndef xxxx_h
#define xxxx_h
//导入Udesk的OC的头文件
#import "UdeskSDK/SDK/UdeskAgent.h"
#import "UdeskSDK/SDK/UdeskCustomer.h"
#import "UdeskSDK/SDK/UdeskManager.h"
#import "UdeskSDK/SDK/UdeskMessage.h"
#import "UdeskSDK/SDK/UdeskOrganization.h"
#import "UdeskSDK/SDK/UdeskSetting.h"
#import "UdeskSDK/UDChatMessage/Udesk.h"
#endif 

然后,在项目targets的general选项中,找到“Linked Frameworks and Libraries”,将第三方库中的.a文件添加进去:


点击add other…之后选择.a文件即可。接下来你就可以在swift中调用第三方库的类和方法了。

swift导入oc第三方库的方法就说到这,欢迎留言讨论~

2016-02-21 11:01:23 fjienigui 阅读数 786

前言

近来开始用swift撸App,想用做一些数据持久化的尝试,数据持久化就五种方法,

  • plist属性列表,
  • NSUserDefaults偏好设置,
  • NSArchieve归档和解档,
  • SQLite3或FMDB,
  • Core Data

前三种对增删数据的情况不大友好,最后一种感觉又比较复杂,所以就选了第四种,但是我一看SQLite3的那些C语言的API就想死啊有木有,最蛋疼的是查询操作,还好github上有第三方的库FMDB,可以理解为这是一个封装了SQLite3的库,以一种让你更爽的方式来操作数据库。
这里我就遇到一个问题,FMDB没有swift的版本!纠结得要死赶紧Google,发现用swift可以引用OC的代码,下面就看看怎么引用。

正文

自动添加Bridging Header

Bridging Header是桥接头文件,当你往swift的环境下添加objective-c的代码时,Xcode就会弹出以下的窗口问你要不要配置,如果你选Yes那么就自动生成一个ProjectName-Bridging-Header.h的头文件,然后你可以在这个头文件中导入需要用到的OC代码的header file。

Xcode弹窗

ProjectName-Bridging-Header.h
我看别人都说会弹出提示框,但是我试了至少三遍!就是没弹!试不出来的时候真是想死的心都有了,不过可能跟我的Xcode版本有关系,我的是7.0,还好有下面的手动添加。

手动添加Bridging Header

其实知道手动添加的方法也很好,说到底自动添加就是把手动添加的步骤做一遍。分三步导入FMDB的库。
第一步导入FMDB源文件:
首先下载FMDB

$ git clone https://github.com/ccgus/fmdb

找到FMDB的源文件,

fmdb
添加到工程目录下:

工程目录下

第二步新建一个头文件,放在工程目录下就可以,点击工程目录中即将存放的目录,然后command+n就可以弹出新建文件面板,选择iOS->header file,命名为你的工程名-Bridging-Header,在里面写入#import “FMDB.h”

bridging header

第三步是选择你的工程名,然后target选择你的App名,在Bulid Setting 中搜索Bridging 可以得到下图所示,在Objective-C Bridging Header一项填入第二步中创建的文件路径就可以了。其中KeepAccounts是我的工程名,要换成你自己的工程名。

Build Setting

FMDB的使用方法

使用方法下面有两个链接,可以参考一下
FMDB 使用方法
[Swift使用FMDB操作SQLite](http://www.cnblogs.com/kklldog/p/swift-fmdb.html)

参考文档

swift和OC混编Apple官方文档翻译
swift和OC混编Apple官方文档

2018-05-28 14:24:52 niumanxx 阅读数 2748
由于本人在开发过程中主要用的是OC语言,所以pod的都是OC库,Podfile里又没加use_frameworks!

所以一直都是.a类型的。后来因为需求需要用到一个只有swift版本的库,就使用use_frameworks!将所有.a库变成了.framework。然后信心满满地运行工程,结果GG。


最后归纳出几个需要注意的点:

1.将用到的库提示找不到的,从#import <xxx.h>改为#import "xxx.h";



2.找到Target->Build Settings->Other Linker Flags,把Pod进来的库,

比如:改成,不是Pod进来的不用改;



3.点击pods Target如图:,再点击Build Setting,如图:

搜索Swift Language Version,将版本设置为Swift库能支持的最高版本,如图:





2017-08-23 15:04:53 flowerr_ 阅读数 3885

首先就是在 targets->Build Setting ->Packaging 中设置 Defines Module为YES

  然后创建swift文件时会生成"文件名-Bridging-Header.h"这样一个桥接文件

怎样使用cocoapods就不多说了

最重要的就是在Podfile里面加上use_frameworks!   因为swift使用的是框架而不是静态库