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.1)
cocoapods-core (1.1.1)
cocoapods-deintegrate (1.0.1, 1.0.0.beta.1)
cocoapods-downloader (1.1.2, 1.1.1, 1.0.0.beta.3, 0.9.3)
cocoapods-plugins (1.0.0, 1.0.0.beta.1, 0.4.2)
cocoapods-search (1.0.0, 1.0.0.beta.2, 0.1.0)
cocoapods-stats (1.0.0, 1.0.0.beta.4, 0.6.2)
cocoapods-trunk (1.1.1, 1.0.0, 1.0.0.beta.3, 0.6.4)
cocoapods-try (1.1.0, 1.0.0.beta.3, 0.5.1)

接下来一个一个卸载:

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.5)                              Auto Retries for AFNetworking requestspod 'AFNetworking+AutoRetry', '~> 0.0.5'- Homepage: https://github.com/shaioz/AFNetworking-AutoRetry- Source:   https://github.com/shaioz/AFNetworking-AutoRetry.git- Versions: 0.0.5, 0.0.4, 0.0.3, 0.0.2, 0.0.1 [master repo]-> AFNetworking+Ext (1.2.1)AFNetworking的封装, 并提供一个 UIImageView+DYLoading  cache in fileSystem+memorypod 'AFNetworking+Ext', '~> 1.2.1'- Homepage: https://github.com/junhaiyang/AFNetworkingExt- Source:   https://github.com/junhaiyang/AFNetworkingExt.git- Versions: 1.2.1, 1.2, 1.1, 1.0, 0.5, 0.4, 0.3 [master repo]- Subspecs:- AFNetworking+Ext/Base (1.2.1)- AFNetworking+Ext/AFCustomRequestOperation (1.2.1)- AFNetworking+Ext/AFDownloadRequestOperation (1.2.1)- AFNetworking+Ext/AFTextResponseSerializer (1.2.1)- AFNetworking+Ext/example (1.2.1)- AFNetworking+Ext/UIKit (1.2.1)- AFNetworking+Ext/UIKit/UIImageView+DYLoading (1.2.1):

解释下内容:

-> 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' dopod 'ShowsKit'# Has its own copy of ShowsKit + ShowWebAuthtarget 'ShowsiOS' dopod 'ShowWebAuth'end# Has its own copy of ShowsKit + ShowTVAuthtarget 'ShowsTV' dopod 'ShowTVAuth'end
end

如果使用隐式abstract_target语法必须写在Podfile文件顶部:

pod 'ShowsKit'
# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' dopod 'ShowWebAuth'
end# Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' dopod 'ShowTVAuth'
end

3.不同target引用不同Pod依赖

如果为IOSHelloWorldProject的targetOne引用Reachability,而targetTow引用SBJson、AFNetworking,将Podfile写成如下方式:

target :'targetOne' dopod 'Reachability',  '~> 3.0.0'endtarget :'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.1pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45' // git上commit为0f506b1c45pod '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. MySQL数据库教程天花板,mysql安装到mysql高级,强|硬 宋红康版

    MySQL数据库教程天花板,mysql安装到mysql高级,强|硬 宋红康版(自用不可外传) 文章目录 MySQL数据库笔记 第一部分 MySQL基础篇 第01章 数据库概述 1. 为什么要使用数据库 ...

  2. 2017泰牛java_泰牛PHP基础到高级教程

    2017泰牛PHP基础到高级教程全套课件是小编为大家分享的一套可以让你快速的把自己需要的内容在线观看的资源,而且自带很多让你开心快乐的元素,需要的下载吧. 可以让你学习到PHP的精髓 2017泰牛PH ...

  3. 现代CMake高级教程

    文章目录 1.为什么要学习现代 CMake? 2.命令行小技巧 (1)传统的 CMake 软件构建/安装方式 (2)现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命令 ...

  4. 最新Anaconda3的安装配置及使用教程(详细过程)

    最新Anaconda3的安装配置及使用教程(详细过程) 1. Anaconda下载 方式一:官网下载 方式二:清华镜像下载(推荐) 2. Anaconda安装 3. Anaconda配置 3.1 配置 ...

  5. python3.6.2怎样安装,python 3.6.2 安装配置方法图文教程

    python 3.6.2 安装配置方法图文教程 Windows下Python(pip)环境搭建(3.6)图解,供大家参考,具体内容如下 1.下载最新的Python安装:3.6.2 2.安装时不要选择默 ...

  6. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  7. iOS 9音频应用开发基础教程(大学霸内部资料)

    iOS 9音频应用开发基础教程(大学霸内部资料) 介绍:iOS 9音频应用开发基础教程(内部资料)是iOS 9音频应用开发专向教程.本书采用Swift 2.0语言开发基于iOS 9的音频应用.实现的功 ...

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

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

  9. iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序

    iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序 程序是为了实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.本章将以编写第一个Sprite Kit程序为 ...

最新文章

  1. python 检测exe是否未响应_第002篇:Python的安装
  2. c# mongodb or查询_C# MongoDB 查询方法
  3. python在web可以开发吗_Python Web开发
  4. 10-2 5-2 查询至少生产两种不同的计算机(PC或便携式电脑)且机器速度至少为133的厂商 (20 分)(思路加详解+测试用例)
  5. B - A Funny Bipartite Graph
  6. LeetCode MySQL 1369. 获取最近第二次的活动(over窗口函数)
  7. 凯撒密码和栅栏密码 - 密码学01
  8. [转]献给2010年仍然单身的80后
  9. WEB应用程序的开发和研究
  10. 解决计算机主机与打印机共享打印机,HP M126A打印机共享打印机后必须得主机先打印一次后其他电脑才能打印问题的解决办法...
  11. 给自己一个不断学习的理由
  12. 漏洞系列一一看我一招征服漏洞SSRF
  13. 智能合约逆向心法2(案例篇)——34C3_CTF题目分析续篇
  14. 这个AR/VR设计原型利器,爆赞
  15. rewind函数+php,PHP SplFixedArray rewind()用法及代码示例
  16. 卸载网易邮箱大师邮件从服务器删除,网易邮箱大师怎么删除邮箱 删除邮箱其实很简单...
  17. GMF 所依赖的插件
  18. android倒计时停止,Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),重开 (resume)功能...
  19. 设计模式--谈谈Reactive Programming 响应式编程
  20. 将闲置的Ipad作为Windows的副屏(Twomon SE)

热门文章

  1. 【LeetCode】230#二叉搜索树中第K小的元素
  2. 《对软件工程课程的期望》
  3. CodeForces 114B 【STL应用】
  4. 多态---父指针指向子类对象(父类引用指向子类对象)
  5. centos删除系统自带的httpd
  6. 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因
  7. VS2017配置OpenCV3.2+contrib3.2
  8. 图像滤波总结(面试经验总结)
  9. Linux中errno使用
  10. Memcached深度分析