1. CocoaPods
CocoaPods 是Objective-C (iOS and OS X) projects 的依赖管理器。
A CocoaPod (singular) is a specification for a library, usually open source.
CocoaPods (plural) is the tool for managing these specs. [1]
2. How to install CocoaPods
2.1 安装CocoaPods步骤
在终端中输入以下命令:
$ sudo gem install cocoapods
注:在终端中安装CocoaPods时可能会遇到如下问题 (感谢伟大的GFW):
"ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out - connect(2) (https://rubygems.org/quick/Marshal.4.8/cocoapods-0.33.1.gemspec.rz)"
这时候我们需要改变 gem source, 参考[4], [5]。需要在终端中执行如下命令:
$ gem sources -l
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
接下来输入以下命令:
$ pod setup
This process will likely take a while as this command clones the CocoaPods Specs repository
into ~/.cocoapods/ on your computer. Ref[6]
至此CocoaPods安装完毕。
注: 如果漏掉 "$ pod setup" 命令,而直接执行"$ pod init"
会有类似以下的error信息:
"$ pod init
Setting up CocoaPods master repo
[!] /usr/bin/git clone 'https://github.com/CocoaPods/Specs.git' master --depth=1
Cloning into 'master'...
error: RPC failed; result=52, HTTP code = 0
fatal: The remote end hung up unexpectedly
/Library/Ruby/Gems/2.0.0/gems/claide-0.6.1/lib/claide/command.rb:304:in `handle_exception': undefined method `verbose?' for nil:NilClass (NoMethodError)
from /Library/Ruby/Gems/2.0.0/gems/claide-0.6.1/lib/claide/command.rb:284:in `rescue in run'
from /Library/Ruby/Gems/2.0.0/gems/claide-0.6.1/lib/claide/command.rb:274:in `run'
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.33.1/lib/cocoapods/command.rb:48:in `run'
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.33.1/bin/pod:33:in `<top (required)>'
from /usr/bin/pod:23:in `load'
from /usr/bin/pod:23:in `<main>' "
2.2 更新CocoaPods
$ [sudo] gem install cocoapods
http://guides.cocoapods.org/using/getting-started.html
更新cocoapods到指定的版本:
$ [sudo] gem install cocoapods -v VERSION
3. How to use CocoaPods
创建一个Podfile, 将依赖添加到Podfile中。
3.1 创建一个新Xcode Project, 并在该工程中使用CocoaPods
A: 如正常创建一个新工程
B: 在终端窗口中, 执行 cd 命令到 工程目录
C: 创建一个Podfile文件. ($ vim Podfile 或者 $ touch Podfile )
D: 在Podfile文件第一行指明平台和版本, 例如:
platform :ios, '6.0'
E: Add a CocoaPod by specifying pod '$PODNAME'
on a single line (????)
pod 'ObjectiveSugar'
F: 保存 Podfile.
G: 运行 $ pod install
H: 打开MyApp.xcworkspace
3.2 集成到一个已存在的workspace中
集成CocoaPods到一个存在的workspace中,需要在Podfile中额外添加一行。
将".xcworkspace"去掉后的根文件名添加到Podfile中:
workspace 'MyWorkspace'
3.3 是否应该在源代码控制中忽略Pods目录?
3.4 Podfile.lock是什么以及作用?
该文件是由Pod工具生成的:
"When this is run, CocoaPods will recursively analyze the dependencies of each project,
resolving them into a dependency graph, and serializing into a Podfile.lock
file." Ref[10]
3.5 在背后发生了什么? (What is happening behind the scenes?)
3.6 Pods 和 Submodules(git)
3.7 从submodules切换到CocoaPods
4. Demo
Ref[3]
4.1 将Pod添加到Xcode Project中
安装CocoaPods完毕后,用Xcode创建一个Project(例如:CocoaPodsDemo)后,
cd 到 CocoaPodsDemo 的目录下:
$ pwd
/Users/XiaoKL/Projects/CocoaPodsDemo
执行以下命令:
$ pod init
"$ pod init" 创建一个Podfile。
$ ls -l
total 8
drwxr-xr-x 12 XiaoKL staff 408 8 23 22:09 CocoaPodsDemo
drwxr-xr-x 5 XiaoKL staff 170 8 23 22:09 CocoaPodsDemo.xcodeproj
drwxr-xr-x 5 XiaoKL staff 170 8 23 22:09 CocoaPodsDemoTests
-rw-r--r-- 1 XiaoKL staff 160 8 23 22:52 Podfile
创建的Podfile内容如下:
"# Uncomment this line to define a global platform for your project
# platform :ios, "6.0"
target "CocoaPodsDemo" do
end
target "CocoaPodsDemoTests" do
end "
4.2 修改生成的Podfile
修改后的Podfile内容如下:
"# Uncomment this line to define a global platform for your project
platform :ios, "6.0"
target "CocoaPodsDemo" do
pod "SVProgressHUD", "0.9"
end
target "CocoaPodsDemoTests" do
end"
然后执行命令:
"$ pod install"
该命令有以下输出:
"Analyzing dependencies
Downloading dependencies
Installing SVProgressHUD (0.9)
Generating Pods project
Integrating client project
[!] From now on use `CocoaPodsDemo.xcworkspace`."
"$ pod install" 命令创建了:CocoaPodsDemo.xcworkspace, Podfile.lock和Pods, 如下可以从ls命令的时间戳上看出来。
$ ls -alG
total 16
drwxr-xr-x 9 XiaoKL staff 306 8 23 23:30 .
drwxr-xr-x 4 XiaoKL staff 136 8 23 22:09 ..
drwxr-xr-x 12 XiaoKL staff 408 8 23 22:09 CocoaPodsDemo
drwxr-xr-x 5 XiaoKL staff 170 8 23 22:09 CocoaPodsDemo.xcodeproj
drwxr-xr-x 3 XiaoKL staff 102 8 23 23:30 CocoaPodsDemo.xcworkspace
drwxr-xr-x 5 XiaoKL staff 170 8 23 22:09 CocoaPodsDemoTests
-rw-r--r-- 1 XiaoKL staff 186 8 23 23:26 Podfile
-rw-r--r-- 1 XiaoKL staff 165 8 23 23:30 Podfile.lock
drwxr-xr-x 17 XiaoKL staff 578 8 23 23:30 Pods
4.3 使用SVProgressHUD
在代码中使用SVProgressHUD,需要#import <SVProgressHUD.h>
4.4 为一个已经用CocoaPods管理的workspace添加一个新的依赖库
A: 将依赖项添加到Podfile文件中
B: 运行命令: $ pod install
4.5 pod install 卡在 "Analyzing dependencies"
A: pod install --verbose --no-repo-update
或者使用VPN。 这是因为访问github.com慢导致的。
5. 解析Podfile文件
http://guides.cocoapods.org/using/the-podfile.html
5.1 Podfile是什么?
Podfile一个规格书, 该规格书来描述Xcode工程的target的依赖关系。
The Podfile is a specification that describes the dependencies of the targets of one
or more Xcode projects. The Podfile always creates an implicit target, named default
,
which links to the first target of the user project.
podfile可以如下简单:
pod 'AFNetworking', '~> 1.0'
关于version的说明:
-
'> 0.1'
Any version higher than 0.1 -
'>= 0.1'
Version 0.1 and any higher version -
'< 0.1'
Any version lower than 0.1 -
'<= 0.1'
Version 0.1 and any lower version
-
'~> 0.1.2'
Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher -
'~> 0.1'
Version 0.1 and the versions up to 1.0, not including 1.0 and higher -
'~> 0'
Version 0 and higher, this is basically the same as not having it.
version 也可以是 :head, 例如:
pod 'Objection', :head
注:在实践中,Podfile中如下写,
pod 'FMDB', '~> 2.0'
安装的是 2.5(即 当时最新的版本), 下面是console的输出:
Installing FMDB (2.5)
5.2 version冲突的解决
[Todo]
5.3 使用本地文件夹的文件
[Todo]
5.4 From a podspec in the root of a library repo.
本节示例了如何使用某个分支,某个tag,某个commit。
5.5 Podfile的语法规范
[Todo]
6. Pods在使用过程中的FQA
6.1 .pbxproj格式变为xml格式的问题
Cocoapods 0.34 在pod install 或 pod update 时会将Pods/Pods.xcodeproj/project.pbxproj
以xml的格式重写,这给我们进行merge带来了很大的挑战。
解决方法: 安装xcproj Ref[11]
6.2 pod install Vs. pod update
pod install 和 pod update的区别以及pod其它的各个命令 Ref[12]
Ref[12] Ref[14]
Reference:
1. http://ashfurrow.com/blog/getting-started-with-cocoapods-demo
2.
3. Getting Started with CocoaPods
http://ashfurrow.com/blog/getting-started-with-cocoapods-demo
该blog中讲的安装过程漏掉了"pod setup" 这一步, 参加[6]中的步骤。
介绍了一个Xcode插件:https://github.com/kattrali/cocoapods-xcode-plugin
PPT:Effective Use of Open Source Software (ToRead)
https://speakerdeck.com/ashfurrow/effective-use-of-open-source-software
4. RubyGems 镜像
http://ruby.taobao.org
5.
http://*.com/questions/19612185/unable-to-install-cocoapods-gem-from-rubygems-org-bad-response-backend-read-e
6. Introduction to CocoaPods Tutorial (ToRead)
http://www.raywenderlich.com/64546/introduction-to-cocoapods-2
7. Streamlining Cocoa Development With CocoaPods (ToRead)
http://code.tutsplus.com/tutorials/streamlining-cocoa-development-with-cocoapods--mobile-15938
8. Using CocoaPods to Modularize a Big iOS App (ToRead)
http://dev.hubspot.com/blog/architecting-a-large-ios-app-with-cocoapods
9. Using CocoaPods to Manage Private
http://chariotsolutions.com/blog/post/using-cocoapods-to-manage-private-libraries/
CocoaPods 支持git, svn等scm工具。 如何使用CocoaPods管理私有的库,以及示例。
pod spec create projectname
10. CocoaPods
http://nshipster.com/cocoapods/
11. Generate ASCII format xcodeproj
https://github.com/CocoaPods/CocoaPods/wiki/Generate-ASCII-format-xcodeproj
12. pod 各个命令的解释
https://github.com/CocoaPods/CocoaPods/issues/760#issuecomment-46300500
13. 在cocoapods中搜索开源库/Project
https://cocoapods.org/
14. Demystifying Pod Install and Pod Update [To Read]
https://hackernoon.com/demystifying-pod-install-and-pod-update-1751dc35de43
Todo:
1. CocoaPod的工作原理是什么?
$ pod install 命令创建了一个workspace,该workspace包含了原来的project,以及一个新建的project。
这和使用subproject的方法有和不同呢?
2. .xcconfig文件的作用?
3. CocoaPods能给我们带来什么?并发式开发,or 管理大项目?
iOS.CocoaPods.0的更多相关文章
-
iOS -- CocoaPods
CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 GitHub( https://github.com/CocoaP ...
-
iOS CocoaPods 版本安装问题
今天安装salesforce中的pods,这是里面的podfile # Uncomment this line to define a global platform for your project ...
-
iOS cocoapods升级及问题
安装 安装RubyCocoaPods基于Ruby语言开发而成,因此安装CocoaPods前需要安装Ruby环境.幸运的是Mac系统默认自带Ruby环境,如果没有请自行查找安装.检测是否安装Ruby:$ ...
-
iOS Cocoapods的pod install出现的某个错误 but they required a higher minimum deployment target.
关于cocoapods的安装和使用的基本教程: http://my.oschina.net/vimfung/blog/182427?fromerr=j7l3DvCG 出现以下错误提示: Specs ...
-
iOS - CocoaPods 第三方开源框架管理
1.CocoaPods CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 Github 上管理.该项目开始于 2011 年 8 月 12 日,在这 ...
-
iOS CocoaPods安装和使用图解
Cocoapods安装步骤 1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPo ...
-
iOS CocoaPods一些特别的用法 指定版本、版本介绍、忽略警告
简介 介绍一些CocoaPods一些特别的用法 CocoaPods github地址 CocoaPods 官方地址 1. 指定第三方库版本 1. 固定版本 target 'MyApp' do use_ ...
-
iOS 从0到1搭建高可用App框架
iOS 从0到1搭建高可用App框架 最近在搭建新项目的iOS框架,一直在思考如何才能搭建出高可用App框架,能否避免后期因为代码质量问题的重构.以前接手过许多“烂代码”,架构松散,底层混乱,缺少规范 ...
-
iOS:CocoaPods详解
原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 一.什么是CocoaPods 1.为什么需要CocoaPods 在进行iOS ...
随机推荐
-
【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
4435: [Cerc2015]Juice Junctions Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 20 Solved: 11[Submi ...
-
简简单单的一个PYTHON多进程实现
因为在作自动化部署时,希望能将多个服务分不同的批次进行发布, 同一批次的机器同时发布, 如果前面一批次出错误,后面就需要停止整 个流程. 那可以简单的用threading来实现了. thread_li ...
-
mySQL 教程 第7章 存储过程和函数
存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只 ...
-
hbase1.1.2安装
环境:hadoop2.6.1,zk3.4.6 1.配置环境变量 sudo vi /etc/profile.d/hbase-env.sh export HBASE_HOME=/usr/local/hba ...
-
jdbc访问pipelinedb
建立Stream及视图 pipeline.execute("create stream caesar(name text,info json);") #创建stream,字段nam ...
-
Python四线程爬取西刺代理
import requests from bs4 import BeautifulSoup import lxml import telnetlib #验证代理的可用性 import pymysql. ...
-
VMware中安装Contos
1 检查BIOS虚拟化支持 2 新建虚拟机 3 新建虚拟机向导 4 创建虚拟空白光盘 5 安装Linux系统对应的CentOS版 6 虚拟机命名和定位磁盘位置 7 处理器配置,看自己是否是双核.多核 ...
-
【Linux】shell编程案例
一.随机生成字符文件名 1.需求描述: 使用for循环在/usr/test目录下创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串test,案例名称如下: 以下为示例: 2.代 ...
-
PHP:第三章——PHP中的可变函数
PHP中的可变函数 <?php header("Content-Type:text/html;charset=utf-8"); function F(){ echo '999 ...
-
PKUWC 2018 铁牌记
Day –INF: 联赛后根据分数一部分人继续停课.由于本蒟蒻撞上了*运,联赛分数还行,可参加NOIWC和PKUWC,故继续停课训练.期间补全了一堆知识点,并成功翘掉期末考.(然而该还的还是要还的, ...