美文网首页
Cocoapods,让iOS开发更简单(三):实践经验汇总

Cocoapods,让iOS开发更简单(三):实践经验汇总

作者: 清晨一杯豆浆 | 来源:发表于2021-06-24 17:42 被阅读0次

    相信各位读了之前的两篇文章,对pods的使用已经相当熟练了。不过在纷繁复杂的实际使用场景下,可能还是会遇到一些问题。本文就结合自己的实践经验,做一些快问快答,希望大家能多多补充交流。话不多说,那我们就即刻开始吧!

    pod系列文章
    Cocoapods,让iOS开发更简单(一):走近Cocoapods
    Cocoapods,让iOS开发更简单(二):创建私有库
    Cocoapods,让iOS开发更简单(三):实践经验汇总
    一文带你快速分清静态库-动态库-Framework

    pods版本

    //查看安装的pods版本
    pod --version
    
    //更新pods版本
    sudo gem install cocoapods
    

    清除本地缓存

    //查看本地缓存列表
     pod cache list
    
    //清除本地缓存
    pod cache clean XXX
    

    灵活多样的版本依赖形式

    ~> 含义为:大于等于指定的版本号,小于高一位的版本号
    eg:
    ~> 0.1.x :0.2以下 0.1.x以上(包括0.1.x)

    pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本
    pod 'AFNetworking', '2.0' //只使用2.0版本
    pod 'AFNetworking', '> 2.0'  //使用高于2.0的版本
    pod 'AFNetworking', '>= 2.0' //使用大于或等于2.0的版本
    pod 'AFNetworking', '< 2.0' //使用小于2.0的版本
    pod 'AFNetworking', '<= 2.0' //使用小于或等于2.0的版本
    pod 'AFNetworking', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本
    pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'//指定远程分支
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'//指定tag
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'//指定commit
    pod 'PodTestLibrary', :path => '../../../PodTestLibrary'//指定本地地址
    pod 'AFNetworking', '2.0' , :modular_headers => true//设置个别库的modular_headers
    

    子库的依赖

    pod 'TestPodLib/aaa','0.1.0'
    pod 'TestPodLib', '0.1.0', :subspecs => ['aaa','bbb','ccc']
    

    依赖的稳定性

    一般推荐使用指定版本或范围版本号,以确保依赖的稳定性。

    pod install&pod update

    • pod install:在第一次检索集成第三方以及每一次在Podfile中新增、更改或删除pod的时候使用。每一次执行pod install命令,它都会下载安装新的pod,并且会把每一个安装的pod的版本信息写入Podfile.lock文件。每一次执行pod install命令,对于已在Podfile.lock中列出的pod,会下载指定的版本,不会检查是否有新版本,而没有在Podfile.lock中列出的pod,它会搜索并安装Podfile中指定的版本。
    • pod update:会检查安装Podfile中列出的所有pod的新版本(往往比较慢)。
    • pod update PODNAME:将PODNAME更新到Podfile中指定的版本,可以是更新到老版本也可以是更新到新版本,取决于Podfile,而不考虑Podfile.lock中记录的版本信息。

    总结:能用pod install解决问题的,就不要用pod update。因为pod update会把依赖库全部检查一遍,不仅慢有时候还会出现坑。

    inhibit_all_warnings!

    忽略Pods警告,有些第三方Pod集成进来会有一大堆警告信息,在Podfile中对应的target或分组下加上关键字inhibit_all_warnings!就可以把警告忽略。

    use_frameworks!

    作用:
    在pods中用frameworks替代.a静态库。

    场景:
    swift项目pods默认开启(use_frameworks!),OC项目pods默认关闭(#use_frameworks!),同时需满足以下两点,

    • 用pods导入swift框架到swift项目或OC项目都必须要use_frameworks!
    • 使用dynamic frameworks,必须要在Podfile文件中添加use_frameworks!

    解析:

    1. 如果在Podfile文件里不使用 use_frameworks! 则会生成相应的 .a文件(静态链接库),通过 static libraries 这个方式来管理pods的代码。Linked:libPods-xxx.a包含了其它用pods导入的第三方框架的.a文件。
    #use_frameworks! -> static libraries 方式 -> .a
    
    1. 如果使用了use_frameworks! 则pods 会生成相应的 .frameworks文件(动态链接库:头文件 + 动态链接库 + 资源文件),使用 dynamic frameworks 来取代 static libraries 方式。Linked:Pods_xxx.framework包含了其它用pods导入的第三方框架的.framework文件。
    use_frameworks! -> dynamic frameworks 方式 -> .framework
    
    1. swift不支持.a静态库

    use-modular-headers

    swift工程依赖了OC工程的话,需要use_modular_headers!

    示例:
    为某个 Pods 使用模块化标头,可以使用以下语法:
    pod 'TestPodLib', :modular_headers => true
    另外,当全局使用 use_modular_headers! 属性时,同时还可以使用以下方法从模块化标头中排除特定的Pod:
    pod 'TestPodLib', :modular_headers => false

    在podspec文件中指定支持的架构

    valid_archs = ['armv7s','arm64']
    s.xcconfig = {
      'VALID_ARCHS' =>  valid_archs.join(' '),
    }
    s.pod_target_xcconfig = {
        'ARCHS[sdk=iphonesimulator*]' => '$(ARCHS_STANDARD_64_BIT)'
    }
    

    版本号规范

    版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

    主版本号:当你做了不兼容的 API 修改,
    次版本号:当你做了向下兼容的功能性新增,
    修订号:当你做了向下兼容的问题修正。
    

    如何使用pod中素材

    常用的方式调用pod中的素材是不生效的,因为默认是从mainBundle中读取的,如

    imgView.image = [UIImage imageNamed:@"t.png"];
    

    打在pod中的素材已经不在mainBundle中而在对应组件下的bundle 里面,所以应该这么调用:

    NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
    NSString *path = [currentBundle pathForResource:@"t.png" ofType:nil inDirectory:@"resource.bundle"];
    imgView.image = [UIImage imageWithContentsOfFile:path];
    

    引用第三方库中的头文件

    在用CocoaPods集成第三方库之后,默认情况下,使用类似#import <XXX/YYY.h>的方式引入第三方库的头文件。

    pod search 经常搜索不到的问题

    pod search只会搜索本地缓存的库,如果想搜索到最新的第三方框架或者某个框架的最新版本,必须先使用pod repo update。

    相关文章

      网友评论

          本文标题:Cocoapods,让iOS开发更简单(三):实践经验汇总

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