ios cocopods 安装使用及高级教程
CocoaPods简介
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm。随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫做:CocoaPods。http://cocoapods.org/
一、安装
1.更新gem
如果终端gem版本太老可能会有问题,先更新gem:(现在大部分新机都不会有这个问题)
sudo gem update --system
2.换源
gem默认的源是外国的https://rubygems.org/
,国内网速太慢,换成淘宝源
gem sources -l // 查看当前源
gem sources --remove https://rubygems.org/ // 删除原有的
rubygems
源
gem sources -a
https://gems.ruby-china.org/
gem sources -l
// 再次查看当前源有没有替换成功
3.选中xcode
如果安装有多个版本xcode的朋友,需要切换一个默认的版本
sudo xcode-select --switch /Applications/Xcode.app
4.安装cocoapods
mac系统版本如果是10.11以前的,使用一下命令安装:
sudo gem install cocoapods
如果是10.11以后由于cocoapods
的命令路径改变了,变成:
sudo gem install -n /usr/local/bin cocoapods
5.初始化cocopods
安装好cocopods以后,需要下载更新本地的依赖库tree,每天很多人都会更新或创建好的Pods库,需要下载或更新到本地,由于依赖库tree数量太多,可能会很慢,耐心等待,中间可能出现各种莫名其妙的错误,很大一部分是网络原因,请重新执行命令
pod setup
二、项目集成cocopods
1.进入到项目的根目录,创建Podfile文件,
cd ***/IOSHelloWorldProject // 进入项目根目录
touch Podfile // 创建Podfile文件
2.用记事本或xcode打开Podfile文件,添加项目所需要的依赖库,例如:
platform :ios, '8.0'
inhibit_all_warnings!
pod 'AFNetworking'
pod 'SDWebImage'
这样一个AFNetworking、SDWebImage的依赖库就添加完成了
3.安装依赖库,返回终端执行:
pod install --no-repo-update
pod install --verbose --no-repo-update
--verbose 查看安装细节
4.安装完成以后我们不在打开后缀为.xcodeproj的工程,而是打开后缀为.xcworkspace的工作空间。
此时一个简单的cocopods工程就完成了,相信可以满足大部分小朋友的需求了,对于项目比较复杂、架构设计要求高、个性化追求高的小朋友请接着看cocopods的高级教程
5.cocopods升级
pod --version // 查看cocopods当前的版本
gem update cocoapod // 升级cocopods命令
6.cocopods卸载
电脑重装或者切换到某个账号后cocopods使用有问题或者cocopods出现解决不了的问题而必须卸载重装,下面就是卸载了:
which pod // 查看pod的安装路径
gem list --local | grep cocoapods // 查看当前安装了哪些有关cocopods的东西
xiaomingdeMacBook-Pro:OCServiceDemo xiaoming$ gem list --local | grep cocoapods
cocoapods (1.1.)
cocoapods-core (1.1.)
cocoapods-deintegrate (1.0., 1.0..beta.)
cocoapods-downloader (1.1., 1.1., 1.0..beta., 0.9.)
cocoapods-plugins (1.0., 1.0..beta., 0.4.)
cocoapods-search (1.0., 1.0..beta., 0.1.)
cocoapods-stats (1.0., 1.0..beta., 0.6.)
cocoapods-trunk (1.1., 1.0., 1.0..beta., 0.6.)
cocoapods-try (1.1., 1.0..beta., 0.5.)
接下来一个一个卸载:
sudo gem uninstall cocoapods-core
sudo gem uninstall cocoapods-deintegrate
如果需要卸载那个版本,如下:
sudo gem uninstall cocoapods -v 1.1.1 //后面的版本号要和上面列表中的版本号对应
二、 国内镜像下载慢的解决方案:
1.切换镜像源
- gem sources --remove https://rubygems.org/
- gem sources -a https://gems.ruby-china.co
2.使用国内站点开放的镜像源,如gitee:
pod repo remove master
pod repo add master https://gitee.com/mirrors/CocoaPods-Specs.git
3.Podfile文件增加指向镜像源:
source 'https://gitee.com/mirrors/CocoaPods-Specs.git'
三、cocopods高级教程
1.类似pod 'AFNetworking'依赖库名如何得来,使用pod的搜索命令:
pod search AFNetworking
xiaomingMacBook-Pro:OCServiceDemo xiaoming$ pod search AFNetworking
-> AFNetworking (3.1.0)
A delightful iOS and OS X networking framework.
pod 'AFNetworking', '~> 3.1.0'
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3, 3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,
2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1,
1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1
[master repo]
- Subspecs:
- AFNetworking/Serialization (3.1.0)
- AFNetworking/Security (3.1.0)
- AFNetworking/Reachability (3.1.0)
- AFNetworking/NSURLSession (3.1.0)
- AFNetworking/UIKit (3.1.0)
-> AFNetworking+AutoRetry (0.0.)
Auto Retries for AFNetworking requests
pod 'AFNetworking+AutoRetry', '~> 0.0.5'
- Homepage: https://github.com/shaioz/AFNetworking-AutoRetry
- Source: https://github.com/shaioz/AFNetworking-AutoRetry.git
- Versions: 0.0., 0.0., 0.0., 0.0., 0.0. [master repo] -> AFNetworking+Ext (1.2.)
AFNetworking的封装, 并提供一个 UIImageView+DYLoading cache in fileSystem+memory
pod 'AFNetworking+Ext', '~> 1.2.1'
- Homepage: https://github.com/junhaiyang/AFNetworkingExt
- Source: https://github.com/junhaiyang/AFNetworkingExt.git
- Versions: 1.2., 1.2, 1.1, 1.0, 0.5, 0.4, 0.3 [master repo]
- Subspecs:
- AFNetworking+Ext/Base (1.2.)
- AFNetworking+Ext/AFCustomRequestOperation (1.2.)
- AFNetworking+Ext/AFDownloadRequestOperation (1.2.)
- AFNetworking+Ext/AFTextResponseSerializer (1.2.)
- AFNetworking+Ext/example (1.2.)
- AFNetworking+Ext/UIKit (1.2.)
- AFNetworking+Ext/UIKit/UIImageView+DYLoading (1.2.) :
解释下内容:
-> AFNetworking (3.1.0) // 依赖库名、最新版本号
A delightful iOS and OS X networking framework. // 简介描述
pod 'AFNetworking', '~> 3.1.0' // 在Podfile文件里引用这个依赖库的语法,大部分情况下拷贝这行到Podfile文件即可
- Homepage: https://github.com/AFNetworking/AFNetworking // 依赖库的主页,主页里包含介绍、说明、源码等一系列文件
- Source: https://github.com/AFNetworking/AFNetworking.git // 依赖库的git仓库路径
- Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3, 3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,
2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1,
1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1 // 依赖库的各个版本
[master repo]
- Subspecs: // 这里的是依赖库的各个子模块,一般不用关心,研究依赖库源码框架的可以看看
- AFNetworking/Serialization (3.1.0)
- AFNetworking/Security (3.1.0)
- AFNetworking/Reachability (3.1.0)
- AFNetworking/NSURLSession (3.1.0)
- AFNetworking/UIKit (3.1.0)
在Podfile文件使用如下语法引用依赖库:
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的版本,不包含0.1.2
pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
2.多个target使用相同Pod依赖库
如果为IOSHelloWorldProject的targetOne和targetTwo都需要引用Reachability、SBJson、AFNetworking三个Pods依赖库,可以使用link_with关键字来实现,将Podfile写成如下方式:
link_with 'targetOne', 'targetTwo'
pod 'Reachability', '~> 3.0.0'
pod 'SBJson', '~> 4.0.0'
pod 'AFNetworking', '~> 2.0'
新的语法是使用abstract_target
# There are no targets called "Shows" in any Xcode projects
abstract_target 'Shows' do
pod 'ShowsKit'
# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' do
pod 'ShowWebAuth'
end # Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' do
pod 'ShowTVAuth'
end
end
如果使用隐式abstract_target语法必须写在Podfile文件顶部:
pod 'ShowsKit'
# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' do
pod 'ShowWebAuth'
end # Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' do
pod 'ShowTVAuth'
end
3.不同target引用不同Pod依赖
如果为IOSHelloWorldProject的targetOne引用Reachability,而targetTow引用SBJson、AFNetworking,将Podfile写成如下方式:
target :'targetOne' do
pod 'Reachability', '~> 3.0.0'
end target :'targetTow' do
pod 'AFNetworking', '~> 2.0' pod 'SBJson', '~> 4.0.0'
end
do/end作为开始和结束标识符
4.其他常用pod引用依赖库语法
pod 'Alamofire', :path => '~/Documents/Alamofire' // 在~/Documents/Alamofire
路径下存在spec的项目(spec
后期介绍)
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git' // git上的master分支
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1' // git上tag为3.1.1
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45' // git上commit为0f506b1c45
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev' // git上的开发分支
更多Podfile语法请参考官网:https://guides.cocoapods.org/syntax/podfile.html#podfile
5.关于Podfile.lock文件
在使用CocoaPods,执行完pod install之后,会生成一个Podfile.lock文件。这个文件看起来跟我们关系不大,实际上绝对不应该忽略它。
该文件用于保存已经安装的Pods依赖库的版本
Podfile.lock文件最大得用处在于多人开发。当团队中的某个人执行完pod install命令后,生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本,这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的Pods依赖库的版本就和最开始用户获取到的版本一致。如果没有Podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的SBJson,这就有可能造成同一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难!
在这种情况下,如果团队想使用当前最新版本的SBJson依赖库,有两种方案:
- 更改Podfile,使其指向最新版本的SBJson依赖库;
- 执行pod update命令;
鉴于Podfile.lock文件对团队协作如此重要,我们需要将它添加到版本管理中
5.查看本地依赖库的tree文件
cocopods的tree文件默认是隐藏的,先把Mac隐藏文件夹显示出来,Mac隐藏和显示的命令如下:
隐藏:defaults write com.apple.finder AppleShowAllFiles -bool true
显示:defaults write com.apple.finder AppleShowAllFiles -bool false
然后退出终端,重启Finder
cocopods的tree文件的默认路劲是
~/.cocoapods/repos/master/Specs // 当前用户的.cocoapods/repos/master/Specs目录下
直接使用命令如下命令打开路劲即可:
open ~/.cocoapods/repos/master/Specs
常见问题:
1.如果pod install 出现报错:
[!] Unable to find host target(s) for StaticLib. Please add the host targets for the embedded targets to the Podfile.
解决方案:
Certain kinds of targets require a host target. A host target is a "parent" target which embeds a "child" target. These are example types of targets that need a host target:
- Framework
- App Extension
- Watch OS 1 Extension
- Messages Extension (except when used with a Messages Application)
降低一个版本试下:pod _1.1.1_ install Xcode 9以后如果使用了cocopods后icon无法显示,Podfile文件底部添加:
post_install
do
|installer|
copy_pods_resources_path =
"Pods/Target Support Files/Pods-FuelCardApp/Pods-FuelCardApp-resources.sh"
string_to_replace =
'--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"'
assets_compile_with_app_icon_arguments =
'--compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${BUILD_DIR}/assetcatalog_generated_info.plist"'
text = File.read(copy_pods_resources_path)
new_contents = text.gsub(string_to_replace, assets_compile_with_app_icon_arguments)
File.open(copy_pods_resources_path,
"w"
) {|file| file.puts new_contents }
end
ios cocopods 安装使用及高级教程的更多相关文章
- iOS cocopods安装使用和安装过程中遇到的问题及解决办法
在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...
- iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】
在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...
- win7下IIS的安装和配置 图文教程
转自 http://www.jb51.net/article/29787.htm 最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功.在博客里记录一下,给需要的 ...
- win8.1系统的安装方法详细图解教程
win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...
- Windows OS上安装运行Apache Kafka教程
Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...
- Swift版iOS游戏框架Sprite Kit基础教程下册
Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...
- 【转】iOS开发Xcode7真机调试教程
原文网址:https://www.skyfox.org/ios-xcode7-debug-device.html 从Xcode7开始,Xcode 不需要$99/$299升级开发者直接可以进行真机调试 ...
- Python学习 1 一 Python2.75的安装及环境配置教程
Python2.75的安装及环境配置教程 Python的语法简洁,功能强大,有大量的第三方开发包(模块),非常适合初学者上手.同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方 ...
- 微软源代码管理工具TFS2013安装与使用图文教程
微软源代码管理工具TFS2013安装与使用图文教程 这篇文章主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 ...
随机推荐
- 备忘:maven 中指定版本
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- UML——在Visual Studio 2013/2015中设计UML类图
1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是 ...
- RecyclerView的使用(二)
上篇博客讲了如何导入RecyclerView . 本章将告诉小伙伴们怎么使用RecyclerView : 第一步:在布局中使用RecyclerView并且绑定控件: 第二步:自定义Adapter:(继 ...
- 前端构建工具:gulp的配置与使用
安装gulp 因为gulp是基于node的管理工具,所以要先安装nodejs安装nodejsnodejs下载地址:中文站:http://nodejs.cn/ 英文站:https://nodejs.or ...
- css-css权威指南学习笔记5
第六章 文本属性 1.text-indent只能作用于块级元素(如p或inline-block或block后的span/a/i等). 2.text-align只能作用于块级元素(如p或inline-b ...
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- 用File判断D盘下面是否还有txt文件
package cn.idcast; import java.io.File; public class File1 { public static void main(String[] args) ...
- .Net 中的反射(动态创建类型实例) - Part.4
动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...
- 浅谈 jQuery 事件源码定位问题
该方法已过期,chrome 48还是49开始,自带各种流行框架的事件绑定解析. 勾上这个选项即可. 昨天群里有人问了个事件源码定位的问题,简单描述下是这样的. 在一个不是自己写的页面上,如何快速定位到 ...
- 大熊君JavaScript插件化开发------(第二季)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得昨天的那篇文章吗------这个系列的开篇(第一季).主要讲述了以“jQuery的方式如何开发插件”, 那么今天我们带着昨天的疑问来继续我们的插 ...