podfile中 use_frameworks! 和 #use_frameworks!区别

开发过程中发现,在swift项目中若要通过pod引入第三方的swift项目,必须加上use_frameworks! ,否则报错

为什么呢?!

首先需要了解下静态库,动态库,Framework的区别

所谓的库就是一段编译好的二进制文件,加上头文件,相关的资源文件就可供别人使用

静态库:(静态链接库)(.a)在编译时会将库copy一份到目标程序中,编译完成之后,目标程序不依赖外部的库,也可以运行
       缺点是会使应用程序变大
动态库:(.dylib)编译时只存储了指向动态库的引用。
       可以多个程序指向这个库,在运行时才加载,不会使体积变大,
       但是运行时加载会损耗部分性能,并且依赖外部的环境,如果库不存在或者版本不正确则无法运行
Framework:实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。

iOS8 / Xcode 6 之前是无法使用静态库,出现了AppExtension之后可以使用

对于是否使用Framework,CocoaPods 通过use_frameworks来控制

  1. 不使用use_frameworks! -> static libraries 方式 -> 生成.a文件
在Podfile中如不加use_frameworks!,cocoapods会生成相应的 .a文件(静态链接库),
Link Binary With Libraries: libPods-**.a 包含了其他用pod导入有第三库的.a文件

2.use_frameworks! -> dynamic frameworks 方式 -> 生成.framework文件

使用了use_frameworks!,cocoapods会生成对应的frameworks文件(包含了头文件,二进制文件,资源文件等等)
Link Binary With Libraries:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件

1.纯oc项目中 通过pod导入纯oc项目, 一般都不使用frameworks

2.swift 项目中通过pod导入swift项目,必须要使用use_frameworks!,在需要使用的到地方 import AFNetworking

3.swift 项目中通过pod导入OC项目

 1) 使用use_frameworks,在桥接文件里加上#import "AFNetworking/AFNetworking.h"
 2)不使用frameworks,桥接文件加上 #import "AFNetworking.h"

推荐阅读更多精彩内容

  • 这一年,在长长短短的假期里迫切的想要离开居住的城市。 对于旅行这件事越发的着迷,在陌生的没有任何陈旧记忆的城市里散...
    木子可可阅读 58评论 0 1
  • 专家导读:高智商的人个人业绩会很优秀,但是如果情商不高,其个人生活就会一团糟。决定一个人成功的因素,智商占20%,...
    yhbred95阅读 36评论 0 0
  • ——裸职的第53天 近日挑战:个人管理(三) 今天是学完了英语课才来写的,已经困得不行,身体各种小毛病的诞生提醒我...
    幕小沐阅读 290评论 3 1
  • 简单生活 走过闪躲的念头 昨天的愧疚 又沾了衣袖 思念放空的气球 想要挣脱 虚假承诺 会感动我过一种生活 简单到没...
    小熊的厨房阅读 52评论 0 0
  • 北方恰深秋,残花粉面休。 黄染钻天杨,翠失垂绦柳。 信步幽林路,拾阶镜水楼。 掠影几飞鸟,委身数蜉蝣。 衣宽遮人肥...
    啣山放翁阅读 169评论 22 27