CocoaPods简介

每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm。随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫做:CocoaPodshttp://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依赖库,有两种方案:

  1. 更改Podfile,使其指向最新版本的SBJson依赖库;
  2. 执行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 安装使用及高级教程的更多相关文章

  1. iOS cocopods安装使用和安装过程中遇到的问题及解决办法

    在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...

  2. iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】

    在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...

  3. win7下IIS的安装和配置 图文教程

    转自   http://www.jb51.net/article/29787.htm 最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功.在博客里记录一下,给需要的 ...

  4. win8.1系统的安装方法详细图解教程

    win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...

  5. Windows OS上安装运行Apache Kafka教程

    Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...

  6. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

  7. 【转】iOS开发Xcode7真机调试教程

    原文网址:https://www.skyfox.org/ios-xcode7-debug-device.html 从Xcode7开始,Xcode 不需要$99/$299升级开发者直接可以进行真机调试 ...

  8. Python学习 1 一 Python2.75的安装及环境配置教程

    Python2.75的安装及环境配置教程 Python的语法简洁,功能强大,有大量的第三方开发包(模块),非常适合初学者上手.同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方 ...

  9. 微软源代码管理工具TFS2013安装与使用图文教程

    微软源代码管理工具TFS2013安装与使用图文教程 这篇文章主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 ...

随机推荐

  1. 基于Bootstrap仿淘宝分页控件实现

    .header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...

  2. Loogn.OrmLite映射优化记录

    大家对ORM效率的争议多半在映射性能方面.自己的ORMLite也是如此,经过前段时间的折腾,已经找不出一个简单的方法再提升一下这部分的方法了.在此把优化涉及的几点记录一下. 注:用于性能测试的Code ...

  3. route使用详解

    route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...

  4. offsetHeight, clientHeight与scrollHeight的区别

      在网上搜了一下,结论非常笼统,讲IE从不讲版本,因此自己做了测试并上传结论.以下结论皆是在标准模式下测试通过的,没有测试quirk模式. clientHeight 大部分浏览器对 clientHe ...

  5. 教你一招:Excel中使用MID函数获取身份证中的出生年月日

    MID字符串函数,作用是从一个字符串中截取出指定数量的字符 MID(text, start_num, num_chars)   text被截取的字符 start_num从左起第几位开始截取(用数字表达 ...

  6. java异常

    java之异常 认识java中的异常: 有过编程经历的人都会知道,出错在编写程序时,是再正常不过的事,当运行程序时,每次看到那个程序出错时,都会觉得心塞,但是最让人心塞的事情往往是——程序运行的结果和 ...

  7. BZOJ 2743: [HEOI2012]采花

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 2056  Solved: 1059[Submit][Status ...

  8. AI贪吃蛇(二)

    前言 之前写过一篇关于贪吃蛇AI的博客,当时虽然取得了一些成果,但是也存在许多问题,所以最近又花了三天时间重新思考了一下.以下是之前博客存在的一些问题: 策略不对,只要存在找不到尾巴的情况就可能失败, ...

  9. html5离线应用和缓存

    1 localstorage和sessionstorage sessionStrage: session即会话的意思,在这里的session是指用户浏览某个网站时,从进入网站到关闭网站这个时间段,se ...

  10. PHP -- Perl风格正则表达式

    1.正则表达式作为一个匹配的模版,是由原子(普通字符,例如a-z),有特殊功能的字符(元字符,例如*.+ 和?等),以及模式修正符三个部分组成.2.在于Perl兼容的正则表达式函数中使用模式时一定要给 ...