Cocoapods的常用技巧

作者: A_rcher34 | 来源:发表于2019-10-16 23:38 被阅读0次

官网地址:https://cocoapods.org/

相关指令

  • 查询当前cocoapods版本:
pod --version
  • 更新当前cocoapods:
sudo gem install cocoapods
  • 在项目中第一次使用CocoaPods, 进行安装时
pod init
  • 在Podfile中增加或删除某个pod后, 也是使用这个命令. 而不是pod update
pod install
  • CocoaPods将尝试查找PODNAME更新的pod版本
pod update    // 更新全部
pod update AFNetworking    // 更新单个库
  • CocoaPods会列出所有在Podfile.lock中的有新版本的pod库。这意味着当你对这些pod使用pod update PODNAME时,他们会更新(只要新版本仍然遵守你在Podfile中做的类似于pod 'MyPod', '~>x.y'这样的限制)
pod outdated
  • 控制是否使用FrameWork。如果不使用,会生成static libraries 方式 -> 生成.a文件;如果使用,会生成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"
use_frameworks!

podfile的相关写法

pod 'AFNetworking'                 //不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '~>0'          //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

pod 'AFNetworking', '~> 0.1.2'     //使用大于等于0.1.2但小于0.2的版本
pod 'AFNetworking', '~>0.1'        //使用大于等于0.1但小于1.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', '< 2.0'        //使用小于2.0的版本
pod 'AFNetworking', '<= 2.0'       //使用小于或等于2.0的版本

pod 'AFNetworking', :git => 'http://gitlab.xxxx.com/AFNetworking.git', :branch => 'R20161010'  //指定分支 

pod 'AFNetworking',  :path => '../AFNetworking'  //指定本地库

# 忽略引入库的所有警告(强迫症者的福音啊)
inhibit_all_warnings!

问题总结

  • ld: could not reparse object file in bitcode bundle: 'Invalid bitcode version (Producer: '1100.0.33.8.0_0' Reader: '1001.0.46.4_0')', using libLTO version 'LLVM version 10.0.1, (clang-1001.0.46.4)' for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    原因:某个库不支持bitcode。
    解决:在target->Build Settings->Enable Bitcode,选No 关掉bitcode;或者将不支持的库回滚到以前支持的版本(如果存在)。

    关掉bitcode
  • CDN: trunk Repo update failed
    原因:CocoaPods 1.8将CDN切换为默认的spec repo源,并附带一些增强功能!CDN支持最初是在1.7版本中引入的,最终在1.7.2中完成。 它旨在大大加快初始设置和依赖性分析。
    解决:1. podfile文件中指定source源为master:
    source 'https://github.com/CocoaPods/Specs.git'(一般情况下,加在最顶部的位置)
    2.执行pod repo list查看source源的list
    3.执行pod repo remove trunk移除trunk源

  • pod: command not found(未找到命令)
    解决:更新一下cocoapods: sudo gem install -n /usr/local/bin cocoapods

  • Unable to resolve dependency: 'cocoapods (= 1.9.1)' requires 'cocoapods-core (= 1.9.1)'
    解决:https://juejin.im/post/5a687e26f265da3e3d49527a

  • The last version of minitest (~> 5.1) to support your Ruby & RubyGems was 5.12.0. Try installing it with gem install minitest -v 5.12.0 and then running the current command again。此时可以在Mac上更新Ruby
    解决:https://juejin.im/post/5a35ee095188252b145b1ffc

  • [Xcodeproj] Generated duplicate UUIDs:
    这个错误一般发生在库B依赖了模块A,同时在主工程里 添加A到 development pod,所以报了这个错,这是因为 cocoapods 重复生成了相同库的uuid,不过这个错误无关紧要,不影响项目,只是会报提示信息

解决:可以在podfile中 添加

install!'cocoapods',:deterministic_uuids=>false

或者找到重复添加的库,删除到只剩一个。

  • The LingoDeer [Debug] target overrides the CLANG_ENABLE_MODULES build setting defined in Pods/Target Support Files/Pods-LingoDeer/Pods-LingoDeer.debug.xcconfig. This can lead to problems with the CocoaPods installation
    解决:
    1)打开项目 Target - Build Settings ,搜索 Other Linker Flags ,在这个设置上加入 $(inherited)
    2)打开项目 Target - Build Settings,依次搜索如下图所示的警告上提示的设置名称,将这些设置选项全部改为 $(inherited) ,或者选中这些设置按下 delete 键恢复原设置。

  • target overrides the GCC_PREPROCESSOR_DEFINITIONS
    解决:我们应该继承而不应该覆盖cocoa pods的预编译宏选项,应该保证debug和release下都有$(inherited)


如有新的总结,后续会有更新。。。

参考文献

相关文章

网友评论

    本文标题:Cocoapods的常用技巧

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