podfile中 use_frameworks! 和 #use_

作者: Maggie的小蜗居 | 来源:发表于2017-03-06 15:51 被阅读2262次

    开发过程中发现,在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"

    相关文章

      网友评论

      • denty_fa98:iOS8 / Xcode 6 之前是无法使用静态库,出现了AppExtension之后可以使用 这个地方写错了吧,应该是无法使用动态链接库
      • 肾得朕心:纯oc项目中 通过pod导入纯oc项目, 使用use_frameworks也是动态库吗?
      • sunny635533:总结的不错,外行的我表示也看得懂
      • xiongcy:你好!我想请教一个问题。我的项目之前是纯oc,使用cocoapods的时候没有加use_frameworks!, 现在是要加入swift框架,在Podfile里面添加了use_frameworks!之后,会报错 Reference to ‘AFNetworkReachabilityStatusNotReachable’ is ambiguous,请问你知道是什么情况吗?
        xiongcy:@乂滥好人 据我的项目swift的框架用cocoapods会有些问题比较麻烦,你可以换成Carthage来用swift框架
        乂滥好人:我也遇到了跟你一样的问题,OC用cocoapods添加使用Swift框架问题,请问你是如何解决的?谢谢了
        Maggie的小蜗居:清下缓存,重新pod试试
      • 吃蘑菇De大灰狼:总结的不错,赞一个~

      本文标题:podfile中 use_frameworks! 和 #use_

      本文链接:https://www.haomeiwen.com/subject/dlrugttx.html