Cocoapods的常用技巧
相关指令
- 查询当前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
关掉bitcode
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原因:某个库不支持bitcode。
解决:在target->Build Settings->Enable Bitcode,选No 关掉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 theCLANG_ENABLE_MODULES
build setting defined inPods/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)
如有新的总结,后续会有更新。。。