美文网首页
2021-12-17 Podfile 使用和不用use_fram

2021-12-17 Podfile 使用和不用use_fram

作者: 我是小胡胡分胡 | 来源:发表于2021-12-17 15:54 被阅读0次

    cocoapods
    3种类形的pod组件:

    • 1,如果组件是,.a 静态库,或者.framework 静态库,
      podfile是否使用use_framework
      集成到主工程后,没有区别(.framework没测试)
      都是在app资源包下,与app主二进制可执行程序集合成一个整体执行文件

    • 2, 如果组件是.framework 动态库
      podfile是否使用use_framework
      也没啥区别

    都是在app资源包下面的framework目录下。

    • 3,依赖的pod组件是源代码

    源代码依赖,会打成动态库framework,放到app Frameworks目录下。 app启动时,动态链接。
    如果是不用useframework,会编译成.a,随着编译一起打进app二进制可执行程序内。

    测试方法如下:
    app

    Podfile

    target 'testapp' do
      # Comment the next line if you don't want to use dynamic frameworks
    #  use_frameworks!
    
      # Pods for testapp
    
      pod 'sourcecode',:path=>'../sourcecode'
      pod 'dynamicframework',:path=>'../dynamicframework'
      pod 'astaticlib',:path=>'../astaticlib'
      
      target 'testappTests' do
        inherit! :search_paths
        # Pods for testing
      end
    
      target 'testappUITests' do
        # Pods for testing
      end
    
    end
    
    

    1、不用use_frameworks!

    不用useframeworks.png

    2 、用了use_frameworks!

    useframeworks.png

    所以useframework选项只是对源代码形式的组件库有区别。

    测试demo
    https://github.com/hc2088/testpodfile

    https://blog.z6z8.cn/2021/03/29/cocoapod-%E6%8C%87%E5%AE%9A%E5%8A%A8%E6%80%81%E6%88%96%E8%80%85%E9%9D%99%E6%80%81%E9%93%BE%E6%8E%A5framework/

    重点内容

    1、

    当在podfile文件中使用use_frameworks!指令时,CocoaPod在安装Pod时,会用framework方式组织资源(默认使用lib方式),同时该指令还提供扩展选项,指定动态framework或者静态framework

    use_frameworks! #使用默认值,根据pod类型自行设置static或者dynamic
    use_frameworks! :linkage => :static # 使用静态链接
    use_frameworks! :linkage => :dynamic #使用动态链接
    如果在podfile中设置use_frameworks! ,又没有指定linkage => :static或linkage => :dynamic时,则会根据podspec文件中的根配置static_framework = true/false来设置。

    另外,linkage => :static或linkage => :dynamic只对源码Pod有效,对已经是framework的pod不起作用。而且,如果pod中的framework是动态库,那么在pod install后,会在相应的target的Build Phases设置中添加[cp] Embed Pods Frameworks脚本,以动态库的方式将framework输出到最终产物中。

    2、

    如果podspec中源代码的pod库
    s.static_framework = true
    则Podfile中用 use_frameworks! :linkage => :static 也不会改变动态库的方式
    即:
    app的bundle 包下面Frameworks下面是不会有这个动态库的。

    也就是说podspec中为准。
    Podfile 只是改变,在podspec中没有用static_framework指定的为true或false情况下的集成方式。

    3、

    虽然不能改变下app的bundle 包下面Frameworks是否用动态库还是静态库方式
    但是用了 use_frameworks 将会改变头文件的搜索方式。
    如果在pod库中用了@import 这种方式的话,
    就需要我们把Podfile中加上 use_frameworks
    否则会编译报错。

    也有其他方式处理。 那就是用cocoapods定制 plugin 插件了
    定制Gemfile 引入gem 插件,在插件里面定制内容
    在podfile中引入插件,然后在插件中修改cocoapods的默认行为
    具体实现方案,不知道。

    https://stackoverflow.com/questions/32591878/ios-is-it-a-static-or-a-dynamic-framework

    11

    I use this command to list all STATIC Frameworks from a path with a list of frameworks:

    find -E . -type f -iregex ".*\.framework\/[^./]*" -exec file {} \; | grep ': current ar archive' | sed 's/.*\/\(.*.framework\).*/\1/'
    

    相关文章

      网友评论

          本文标题:2021-12-17 Podfile 使用和不用use_fram

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