CocoaPods的使用
文档更新说明
- 2018-7-4 v1.0 初稿
一、CocoaPods的安装
1.替换ruby源
CocoaPods是基于ruby ecosystem的,需要ruby环境,使用ruby的gem命令。所以我们的系统要有ruby环境。然而Mac系统默认会安装好ruby环境。可在终端ruby -v
查看ruby版本:
//查看ruby版本
ruby -v
//输出信息
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
查看ruby源
gem sources -l
默认情况下,终端会显示下面:
*** CURRENT SOURCES ***
https://rubygems.org/
当然这个源在墙内是访问不到的,所以要更换到ruby-china的镜像
// 1.移除掉原有的源
gem sources --remove https://rubygems.org/
//2.淘宝的源已经不更新维护了,现在使用ruby-china的源哦
gem source -a https://gems.ruby-china.org
以下命令添加淘宝的源:(不建议继续使用)
gem sources -a https://ruby.taobao.org/
// 3.验证是否替换成功
gem sources -l
如果显示下面输出就说明正确:
*** CURRENT SOURCES ***
https://gems.ruby-china.org
2.更新升级Gem版本
Gem是管理Ruby库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级Gem,执行下述命令即可:
// 更新升级gem,国内需要切换源
sudo gem update --system
查看gem版本
gem -v
2.6.14
3.安装CocoaPods
sudo gem install cocoapods// 安装cocoapods
如果error:You don't have write permissions for the /usr/bin directory.
命令改为:
sudo gem install -n /usr/local/bin cocoapods
可以避免 rootless 权限造成的不能读写的问题。
想要卸载CocoaPods
//卸载CocoaPods
sudo gem uninstall cocoapods
更新CocoaPods包
sudo gem update cocoapod
检查Pod是否安装成功
pod --version
1.5.3
4.更新Podspec索引文件
pod初始化
pod setup
#将所有第三方的Podspec索引文件更新到本地的
~/.cocoapods/repos
目录下
很久没有使用CocoaPods,在使用之前执行下面这个命令:
pod repo update
#更新仓库(将更新的podspec下载到本地)
#更新podspec索引文件
所有的第三方开源库的Podspec文件都托管在 https://github.com/CocoaPods/Specs
我们需要把这个Podspec文件保存到本地,这样才能让我们使用命令pod search 开源库
搜索一个开源库,怎样才能把github上的Podspec文件保存本地呢? 那就是 pod setup
执行pod setup时,CocoaPods 会将第三方的podspec索引文件更新到本地的~/.cocoapods/repos
目录下
- 如果没有执行过 pod setup,那用户根目录下~找不到
.cocoapods/repos
目录的,没有创建这个目录。
- 如果执行 pod setup,并且命令没有执行成功,那么会创建
~/.cocoapods/repos
目录,只不过目录是空的。
- 如果执行 pod setup,并且命令执行成功,说明把github上的Podsepc文件更新到本地,那么会创建
~/.cocoapods/repos
目录,并且repos目录
里有一个master目录
,这个master目录保存的就是github上所有第三方开源库的Podspec索引文件。
但是第一次执行pod setup时,这个github的Podspec索引文件比较大,有 300M 左右(以后会越来越大的),所以第一次更新时非常慢。可以进去目录~/.cocoapods/repos
使用命令 du -sh *
来查看下载文件的大小
二、CocoaPods的使用
1.新建Podfile文件
使用时需要在你的项目根目录下新建一个名为Podfile
的文件(文件名一定为Podfile,不能更改),将依赖的库名字依次列在文件中即可。
进入到项目路径后,执行下面命令:
pod init
2.编辑Podfile文件
简单的Podfile
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'TestPod' do # Uncomment the next line if you're using Swift or would like to use dynamic frameworks # use_frameworks! # Pods for TestPod pod 'MLeaksFinder' end
复杂些的Podfile文件
# Uncomment the next line to define a global platform for your project platform :ios, '8.0' inhibit_all_warnings! def common_pods pod 'libwebp', :path => './LocalPods/libwebp' pod 'Masonry', :path => './LocalPods/Masonry' pod 'SDWebImage', :path => './LocalPods/SDWebImage' pod 'SDWebImage/GIF', :path => './LocalPods/SDWebImage' pod 'SDWebImage/WebP', :path => './LocalPods/SDWebImage' pod 'SDWebImage/MapKit', :path => './LocalPods/SDWebImage' pod 'MBProgressHUD_V1', :path => './LocalPods/MBProgressHUD_V1' pod 'WeakStrongMacro', :path => './LocalPods/WeakStrongMacro' pod 'FSProgressHUD', :path => './LocalPods/MBProgressHUD' pod 'FSiOSAccess', :path => './LocalPods/FSiOSAccess' pod 'KVOController', '~> 1.2.0' pod 'DACircularProgress', :path => './LocalPods/DACircularProgress' end def third_parts_pods pod 'FSAssetUtils', :path => './LocalPods/FSAssetUtils' pod 'MJRefresh', :path => './LocalPods/MJRefresh' pod 'HLNetWorkReachability', :path => './LocalPods/HLNetWorkReachability' pod 'AFNetworking', :path => './LocalPods/AFNetworking' pod 'AFNetworking/Serialization', :path => './LocalPods/AFNetworking' pod 'AFNetworking/Security', :path => './LocalPods/AFNetworking' pod 'AFNetworking/Reachability', :path => './LocalPods/AFNetworking' pod 'AFNetworking/NSURLSession', :path => './LocalPods/AFNetworking' pod 'AFNetworking/UIKit', :path => './LocalPods/AFNetworking' pod 'MergedThirdParties', :path => './LocalPods/MergedThirdParties' end def image_picker_pods pod 'ALOCenteredButton', :path => './LocalPods/ALOCenteredButton' pod 'FSImagePickerSharedComponents', :path => './LocalPods/FSImagePickerSharedComponents' pod 'QBImagePickerController', :path => './LocalPods/QBImagePicker' pod 'MWPhotoBrowser', :path => './LocalPods/MWPhotoBrowser' end target 'ThirdParts' do # Uncomment the next line if you're using Swift or would like to use dynamic frameworks # use_frameworks! # Pods for ThirdParts common_pods third_parts_pods target 'ThirdPartsTests' do inherit! :search_paths # Pods for testing end end target 'FSImagePicker' do common_pods image_picker_pods target 'FSImagePickerTests' do inherit! :search_paths end end
3.安装依赖库
进入到项目路径后,执行下面命令:
pod install
pod install
命令执行成功后,会看到项目根目录下多出xxx.xcworkspace
、Podfile.lock文件
和Pods目录
。
4.更新第三方库
跟pod install
相似的一个命令就是 pod update。
如果未指定版本的话,pod update
将所有第三方框架更新到最新版本。
每次更改了 Podfile 文件,你需要重新执行一次pod update命令。
5.不更新podspec
CocoaPods 在执行pod install
和pod update
时,会默认先更新一次podspec
索引。使用 --no-repo-update
参数可以禁止其做索引更新操作。
pod install --no-repo-updatepod update --no-repo-update
6.查找第三方库
你如果不知道 cocoaPods 管理的库中,是否有你想要的库,那么你可以通过 pod search 命令进行查找
pod search json
#在podspec中搜索json库
7.pod文件和命令说明
………………………………………相关文件…………………………………………………
1. Podfile文件
项目的第三方库的依赖及项目的基本配置
2. Podfile.lock文件
最后一次更新Pods时, 保存所有第三方框架的版本号
3. pods目录
保存通过pod install或者pod update下载下来的第三方开源库的源代码
4. xxx.xcworkspace文件
重新生成一个工作空间,打开这个工程文件来进行开发
………………………………………常用命令…………………………………………………
1. pod setup
将所有第三方的Podspec索引文件更新到本地的~/.cocoapods/repos目录下,更新本地仓库。
2. pod repo update
执行 pod repo update更新本地仓库,本地仓库完成后,即可搜索到指定的第三方库,作用类似pod setup。
不过这个命令经常不单独调用。比如执行pod setup
、pod search
、pod install
、pod update都
会默认执行pod repo update
3. pod search xxx
查找某一个开源库。查找开源库之前,默认会执行pod repo update指令
4. pod list
列出所有可用的第三方库.现在已经2.4W+了.还在不断地增长
如果一开始Podfile.lock文件不存在, 就会按照Podfile文件列举的版本号来安装第三方框架
安装开源库之前, 默认会执行pod repo update指令
pod update WeexSDK
pod install一般是你第一次想要为项目添加pod的时候使用的,它同样也使用在你为Podfile文件添加或移除pod库的时候。
- 每次你运行pod install的时候,都会在Podfile.lock文件里写入你安装的pod的版本号。Podfile.lock文件追踪每一个安装的pod库的版本号,并锁定这些版本号。
- 当你运行pod install是,它将只解决不在Podfile.lock中的pod库依赖关系
- 对于在Podfile.lock文件中的pod库,pod install会只下载Podfile.lock文件中指定的版本(pod ‘xxx’, '~1.0' ),而不会去检查这个库是否有更新的版本。
- 对于不在Podfile.lock文件中的pod库,pod install会搜索这个pod库在Podfile文件中指定的版本
- 只有当你想要更新pod库的版本时才使用pod update。update命令并不会理会Podfile.lock中的版本信息。执行后,会重新生成Podfile.lock文件。
8.Podfile的语法解释
1.platform: iOS, '7.0'
指定了开源库应该被编译在哪个平台以及平台的最低版本
若不指定平台版本,官方文档里写明各平台默认值为iOS:4.3
, OS X:10.6
, tvOS:9.0
, watchOS:2.0
2.inhibit_all_warnings!
屏蔽cocoapods库里面的所有警告
如果想屏蔽某pod里面的警告:
pod 'JYCarousel', :inhibit_warnings => true
使用frameworks动态库替换静态库链接
(1)swift项目cocoapods 默认 use_frameworks!
(2)OC项目cocoapods 默认 #use_frameworks!
** end**
指定特定Target的依赖库
可以嵌套子Target的依赖库
明确指定继承于父层的所有pod,默认就是继承的
9.使用私有的pods
我们可以直接指定某一个依赖的podspec
,这样就可以使用公司内部的私有库。该方案有利于使企业内部的公共项目支持 CocoaPods。如下是一个示例:
pod 'MyCommon', :podspec => 'https://xxx.com/common/myCommon.podspec'
10.特殊处理
已经存在的 workspace 的 cocoapods 集成
在 podfile 的最后单独的一行 指定(也可以是开始的第一行)
workspace 'MyWorkspace'
# MyWorkspace 可以任意指定。
# 在执行 pod install 的时候 会根据 MyWorkspace 生成 MyWorkspace.xcworkspace 文件。
三、CocoaPods说明
CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给我们自己的CocoaPodsTest工程使用。
对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中
为了方便我们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程会被以workspace的形式组织和管理。
CocoaPods官方文档:
参考学习博客:
最新的CocoaPods的使用教程