首页 > 其他分享 >Podfile 中 use_frameworks! 的作用

Podfile 中 use_frameworks! 的作用

时间:2024-03-11 16:48:00浏览次数:31  
标签:use podspec framework Podfile frameworks static pod

use_frameworks!生效的条件 1.use_frameworks!只有在第三方库的podspec文件中没有设置s.static_framework = true/falue时有效,如果第三方库的podspec文件中设置了s.static_framework = true/false, 那么依podspec中的设置为准。 2.第三方库必须是源代码,否则也不生效。比如:原来是.a,.framework静态库,那么不管Podfile中是否添加use_frameworks!都不会影响原来的结果。
所谓的库就是一段编译好的二进制文件+头文件+相关的资源文件,然后提供给别人使用。 静态库(.a):在编译时会将库copy一份到目标程序中进行合并,编译完成之后,目标程序不依赖外部的库进行运行,缺点是会使应用程序变大 动态库(.dylib):编译时只存储了指向动态库的引用。可以多个程序指向这个库,在运行时才加载然后动态链接,优点不会使体积变大。 Framework:实际上是一种打包方式,打出来的包可以是动态库也可以是静态库。它是将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。
对于CocoaPods管理的第三方库是否使用的Framework,可以通过Podfile中的use_frameworks来控制 在Podfile中如果不加use_frameworks!,cocoapods会生成相应的 .a文件(静态链接库), Link Binary With Libraries: libPods-xxx.a 包含了其他用pod导入有第三库的.a文件 使用了use_frameworks!,cocoapods会生成对应的frameworks文件(包含了头文件,二进制文件,资源文件等等)Link Binary With Libraries:Pods_xxx.framework包含了其它用pod导入的第三方框架的.framework文件

iOS项目中use_frameworks!的使用场景 不使用frameworks的场景 1.纯oc项目中 通过pod导入纯oc项目
使用frameworks的场景 1.swift 项目中通过pod导入swift项目,必须要使用use_frameworks!,否则报错,在需要使用的到地方 import AFNetworking
可加可不加的场景 1.swift 项目中通过pod导入OC项目 1)使用use_frameworks,在桥接文件里加上#import "AFNetworking/AFNetworking.h" 2)不使用frameworks,桥接文件加上 #import "AFNetworking.h"
use_frameworks!何时生效 use_frameworks!是否生效依赖于podspec指向的第三库的实际情况。 use_frameworks!不生效场景 1.如果podspec指向的第三库自己本身就是一个.a 静态库,或者.framework 静态库, podfile是否使用use_framework 集成到主工程后,没有区别,都是在app资源包下,与app主二进制可执行程序集合成一个整体执行文件
2, 如果组件库是.framework 动态库 那么无论podfile是否使用use_framework都没啥区别,都是在app资源包下面的framework目录下。
3,podspec 既有静态库又有动态库 静态库链接到可执行文件中去。动态库在Frameworks下app启动动态链接。
use_frameworks!生效场景 1,依赖的pod组件库是源代码 如果在podfile中使用了use_framework,会打成动态库framework,放到app Frameworks目录下。 app启动时,动态链接。 如果是不用useframework,会编译成.a,随着编译一起打进app二进制可执行程序内。
podspec中s.static_framework与Podfile中use_frameworks!的优先级 podspec static_framework 的优先级大于 Podfile中的use_framework! :linkage的优先级。 也就是说以podspec中的为准。Podfile 只是改变,在podspec中没有用static_framework指定的为true或false情况下的集成方式。 如果podspec中源代码的pod库s.static_framework = true,则Podfile中用 use_frameworks! :linkage => :dynamic 也不会改变动态库的方式。

当在podfile文件中使用use_frameworks!指令时,CocoaPod在安装Pod时,会用framework方式组织资源(默认使用lib方式) 同时该指令还提供扩展选项,指定动态framework或者静态framework use_frameworks! #使用默认值,根据podspec 类型自行设置static或者dynamic use_frameworks! :linkage => :static # 使用静态链接 use_frameworks! :linkage => :dynamic #使用动态链接

当在podfile中设置了use_frameworks! ,但是没有指定linkage => :static或linkage => :dynamic时,则会根据podspec文件中的根配置static_framework = true/false来设置。 和use_frameworks!的起作用条件一样,即使在use_frameworks!后面加了linkage => :static或linkage => :dynamic,也只对源码Pod有效,对已经是framework的pod不起作用。 注意:如果pod中的framework是动态库,那么在pod install后,会在相应的target的Build Phases设置中添加[cp] Embed Pods Frameworks脚本,以动态库的方式将framework输出到最终产物中。
如果在podspec中既有 静态库,又有动态库:

s.dependency 'xxx' //是一个动态库
s.dependency 'Bugly' //是静态库

 

那么在Podfile中: 1、不使用:use_frameworks! 或者使用: use_frameworks! :linkage => :static 按照静态库进行编译,则可以编译通过.
2、使用:use_frameworks! 或者 使用 use_frameworks! :linkage => :dynamic 进行动态库进行编译时,就会pod install报错:


参考文章: https://www.jianshu.com/p/8059330a61cd https://juejin.cn/post/6974224632983322655    

标签:use,podspec,framework,Podfile,frameworks,static,pod
From: https://www.cnblogs.com/zhou--fei/p/18066471

相关文章

  • Esxi 安装企业版 suse 系统
    ......
  • Mysql和Clickhouse数据查询-按照时间分组统计并且对无无数据的日期补0
      最近在做数据查询需求的时候,遇到按照时间分组查询统计指标的需求,比如说查询模块的最近15天访问数据量,没有数据的日期补0,以前对于这种类似的需求都是通过代码来补数据,想试试sql实现这种查询,因此查询了不少文章,对于类似实现方法的文章网上也有很多,差异也很多,因此这篇文章只......
  • 设置MaxUserPort和TcpTimedWaitDelay
    现象:在windows服务器上安装了mysql5.7,一开始mysql运行良好,但是过了一段时间后,收到错误“错误2003(HY000):无法连接到localhost上的MySQL服务器(10055)”,当重新启动机器时,问题就解决了,但是过了一段时间后,我再次收到同样的错误消息。解决办法:设置MaxUserPortMaxUserPort是Windows操......
  • 2-AP-14: Create procedures with parameters to organize code and make it easier t
        ChapterModule/LessonBigIdeas/Topics/ConceptsStandards(CSTA)LearningObjectivesChapter1Module1,Lesson1Sequences,ProblemSolving1A-AP-10:Developprogramswithsequencesandsimpleloops,toexpressideasoraddress......
  • How to use try-catch with DB::transaction in Laravel
    Howtousetry-catchwithDB::transactioninLaravel.Whenaddingnumerousqueries,DB::transaction()isusedtocheckwhethereachquerywasproperlyrunbeforerollingback.Therefore,canweuseatry-catchblockwithdb::transactionaswell?Usingat......
  • 利用.user.ini文件隐藏后门
    0x00前言在PHP中有个很有趣的东西叫.user.ini,有点类似.htaccess文件,PHP会在每个目录下扫描INI文件,我们可以通过.user.ini文件来实现隐藏后门的效果官方手册地址:传送门通过阅读手册,我们知道在.user.ini中可以识别PHP_INI_PERDIR和PHP_INI_USER模式的INI设置关于PHP_INI_*一......
  • User Agent 数据解释说明
    Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/114.0.0.0Safari/537.36UA字符串各部分的含义如下:Mozilla/5.0:表示当前浏览器所使用的用户代理标识符的版本号。它几乎是一个固定的写法。(WindowsNT10.0;Win64;x64):表示......
  • 解决 Android studio Connect to 127.0.0.1:[/127.0.0.1] failed: Connection refused
    前言由于代理变更,androidstudio会有一系列报错,其中一个是Connectto127.0.0.1:xxxxxx[/127.0.0.1]failed:Connectionrefused网上答案大都太片面了,无法完全解决问题,这里列举出四个可能的原因,希望对大家有用问题如下建议一下四种方案都尝试下,我相信总有一种能......
  • docker-compose部署单机clickhouse
    【转载:https://www.cnblogs.com/crow1840/p/17506884.html】1、创建clickhouse目录[root@localhostdocker]#lsgitlab_dockerjenkins_dockermysql_docker[root@localhostdocker]#mkdirclickhouse/conf-p2.创建docker-compose.yml[root@localhostclickhouse]#cat......
  • 运行时遇到Oracle错误1017 invalid username/password;login denied
    参考链接:https://answer.baidu.com/answer/land?params=7elCyy2%2BVQFLNLJM1h81dr5QZQQgc1gH3Jx0mKtGyC9iN883lLAjVKkqqFwgT9IkwDSCCV6LpBhAaZmXkqXteDsXxjanzrzpWVxBkZhfR3Unz5gw02%2BImYJ2Z%2Bvnm92UuArsoipr6J4Lg4wWW8llDohcXIR6bJhJl2%2Fy598QiTvvwPJAYShha1DQ3DoUCfGRi%2BD......