常用命令总结写在前面,具体分析往下看
# 检索框架
pod search 框架名关键字
# 创建项目,并cd到工程文件所在目录,创建Podfile文件
pod init
# pod install和pod update的选择(CocoaPods1.0.1之后)
# 安装框架,不会直接更新repo库
pod install
# 更新框架,如果不加--no-repo-update,默认会更新repo库
pod update [--verbose] --no-repo-update
Podfile文件内容(建议使用Xcode进行编辑)
# 支持的iOS系统的最低版本
platform:ios,'8.0'
# 忽略引入库的所有警告(强迫症者的福音啊)
inhibit_all_warnings!
# 使用framework(包含swift库就必须使用此设置,纯OC库可以不设置)
use_frameworks!
# 下面两行是指明依赖库的来源地址
source 'https://gitclub.cn/CocoaPods/Specs.git'
source '你自己的私有库镜像源'
# 做一些安装之前的更改
pre_install do |installer|
...
end
# 依赖目标一般为项目名称
# 针对MyApp target引入AFNetworking
# 针对MyAppTests target引入OCMock,
target 'MyApp' do
pod 'AFNetworking', '~> 3.0'
target 'MyAppTests' do
# ???
inherit! :search_paths
pod 'OCMock', '~> 2.0.1'
end
end
# ----------------以下命令一般采取系统默认设置,无特别需求无需设置----------------
# install! 这个命令是cocoapods声明的一个安装命令,用于安装引入Podfile里面的依赖库
install! 'cocoapods',
:deterministic_uuids => false,
:integrate_targets => false
# 默认情况下,我们不需要指定,直接使用与Podfile所在目录的工程名一样就可以了。如果要指定另外的名称,而不是使用工程的名称,可以这样指定
workspace 'MyWorkspace'
# 作用于哪个工程
project 'MyProject'
# 这个是cocoapods的一些配置,官网并没有太详细的说明,一般采取默认就好了,也就是不写.
post_install do |installer|
installer.pods_project.targets.each do |target|
puts target.name
end
end
# ----------------以上命令一般采取系统默认设置,无特别需求无需设置----------------
Cocopods工作原理图
检索第三方框架
pod search 框架关键字
安装第三方框架
- 使用Xcode新建一个工程
- 打开终端,
cd
到工程目录下
- 生成
Podfile
文件
-
Podfile
文件是使用ruby语法编写的框架依赖描述文件
,就是告诉cocoapods需要下载哪些框架
-
Podfile
文件配置语法详见Podfile语法参考(译)
- 创建命令:
pod init
- 使用
Xcode
or vim编辑器
编辑Podfile文件
- 在终端中使用
vim编辑器
编辑Podfile步骤
-
vi podfile
在vim编辑器中打开podfile
文件
- 按
i
键进入编辑模式
- 编辑完成后,按
esc
键退出编辑模式
- 按
:wq
组合键并回车
退出vim编辑器
- 记得在Podfile文件的顶部加入下面的repo源地址:
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
- Podfile示例
# 指定的repo镜像源
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
# 最低支持的iOS版本
platform :ios, '8.0'
# 依赖目标一般为项目名称
target '依赖目标' do
# 以framework的形式使用第三方库
use_frameworks!
pod 'AFNetworking', '~> 3.0' # 网络库
pod 'SDWebImage', '~>3.8' # 图片加载
pod 'SVProgressHUD' # Loading框 + 提示框
pod 'MJRefresh' # 下拉刷新
pod 'HandyFrame' # 使用frame布局
pod 'YYModel' # 模型转换
end
- 安装框架
// --verbose表示打印详细信息
// --no-repo-update表示不更新本地框架信息源
// 安装框架,此命令在新版本中不会更新索引库
pod install
// 更新框架,防止更新索引库
pod update [--verbose] --no-repo-update
- 遇到的问题
- 问题描述:
The dependency 'SSZipArchive', '~> 1.6.2' is not used in any concrete target.
- 解决方案:指定依赖目标
- 从cocoapods 1.0.1
及后续
版本必须明确
指定依赖目标
# 依赖目标一般为项目名称
target '依赖目标' do
# target数组 如果有新的target直接加入该数组
targetsArray = ['targetName1', 'targetName2', 'targetName3']
# 循环指定公用的库
targetsArray.each do |t|
target t do
pod 'MJRefresh', '~> 1.4.6'
pod 'Masonry', '~> 0.6.1'
end
end
# 指定额外依赖的不同的三方库
target 'targetName1' do
pod 'xxx1'
pod 'xxx2'
end
target 'targetName2' do
pod 'xxx3'
end
- 安装完后生成的文件
-
Podfile.lock
文件:记录上一次
下载的框架的版本号
-
*.xcworkspace
文件:工作区文件
- 以后要添加新的库,就编辑
Podfile
文件,cd
到工程根目录下,然后执行pod install --no-repo-update
命令就可以了
-
pod install
和pod update
在没有
指定框架版本号
时是有区别
的
-
pod install
在Podfile.lock
文件存在时直接读取并下载框架,如果是团队开发为了保证版本一致,建议使用此命令
-
pod update
直接读取Podfile
文件中的信息,不管Podfile.lock
文件是否存在,所以在团队开发时可能导致
大家使用的第三方库的版本不一致
-
pod install
和pod update
选择
- 一般情况下,
第一次
从共享库把项目下载下来之后,应该使用pod install
命令安装,而不是
选择pod update
,目的是为了保证大家使用的第三方框架版本一致
- 如果以后大家需要升级第三方框架,那么大家
约定好
,统一
再执行一次pod update
-
建议
在编写podfile文件时,明确
指定第三方库的版本,格式如下:pod '第三方库名称', '~> 版本号'
,这样不管使用pod install
还是pod update
效果都是一致的
参考资料