在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)。与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。
在 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文件/页面,都通过闭包的方式回调到主工程中
对于 Swift 项目,CocoaPods 提供了动态 Framework 的支持,通过 use_frameworks! 选项控制。
|
请发表评论