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

2021-12-17  本文已影响0人  我是小胡胡分胡

cocoapods
3种类形的pod组件:

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

源代码依赖,会打成动态库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/'
上一篇下一篇

猜你喜欢

热点阅读