iOS - 制作Swift动态库

动态库

动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)。与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。

iOS FrameWork

在 iOS 8 之前,iOS 平台不支持使用动态 Framework,开发者可以使用的 Framework 只有苹果自家的 UIKit.Framework,Foundation.Framework 等,iOS 8/Xcode 6 推出之后,iOS 平台添加了动态库的支持

创建动态库

打开Xcode,Command+Shift+N创建新工程,选择 Cocoa Touch Framework,语言选择Swift

暴露接口

对于那些需要暴露出来,即在框架外部也能访问使用的类、方便、变量前面需要加上关键字 Public

编译动态库

command+B编译成功,在Products文件下出现XXX.framework文件

使用动态库

如果把某个自己开发的动态库Add在Linked Frameworks and Libraries里,程序一启动就会报Reason: Image Not Found,你只能把它放在Embeded Binaries里面才能正常使用。为什么呢?因为加在EmbededBinaries里面的东西其实会被复制一份到xx.app里面(直译就是嵌入的框架)

存在的问题:在动态库中不能使用静态库

造成这个的主要原因是Swift的运行时库(不等同于OC的runtime概念),由于Swift的ABI不稳定,静态库会导致最终的目标程序中包含重复的运行库,相关可以看下最后的参考文章SwiftInFlux#static-libraries

临时解决办法:动态库中有需要依赖静态库的swift文件/页面,都通过闭包的方式回调到主工程中

CocoaPods使用Use_framework!

对于 Swift 项目,CocoaPods 提供了动态 Framework 的支持,通过 use_frameworks! 选项控制。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值