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://stackoverflow.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. Cocoa​Pods

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的更多相关文章

  1. iOS -- CocoaPods

    CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 GitHub( https://github.com/CocoaP ...

  2. iOS CocoaPods 版本安装问题

    今天安装salesforce中的pods,这是里面的podfile # Uncomment this line to define a global platform for your project ...

  3. iOS cocoapods升级及问题

    安装 安装RubyCocoaPods基于Ruby语言开发而成,因此安装CocoaPods前需要安装Ruby环境.幸运的是Mac系统默认自带Ruby环境,如果没有请自行查找安装.检测是否安装Ruby:$ ...

  4. iOS Cocoapods的pod install出现的某个错误 but they required a higher minimum deployment target.

    关于cocoapods的安装和使用的基本教程: http://my.oschina.net/vimfung/blog/182427?fromerr=j7l3DvCG   出现以下错误提示: Specs ...

  5. iOS - CocoaPods 第三方开源框架管理

    1.CocoaPods CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 Github 上管理.该项目开始于 2011 年 8 月 12 日,在这 ...

  6. iOS CocoaPods安装和使用图解

    Cocoapods安装步骤 1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPo ...

  7. iOS CocoaPods一些特别的用法 指定版本、版本介绍、忽略警告

    简介 介绍一些CocoaPods一些特别的用法 CocoaPods github地址 CocoaPods 官方地址 1. 指定第三方库版本 1. 固定版本 target 'MyApp' do use_ ...

  8. iOS 从0到1搭建高可用App框架

    iOS 从0到1搭建高可用App框架 最近在搭建新项目的iOS框架,一直在思考如何才能搭建出高可用App框架,能否避免后期因为代码质量问题的重构.以前接手过许多“烂代码”,架构松散,底层混乱,缺少规范 ...

  9. iOS:CocoaPods详解

    原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 一.什么是CocoaPods 1.为什么需要CocoaPods 在进行iOS ...

随机推荐

  1. 吴裕雄 python 机器学习-NBYS(2)

    import matplotlib import numpy as np import matplotlib.pyplot as plt n = 1000 xcord0 = [] ycord0 = [ ...

  2. SAP 使用

    SAP 提供多种方法查找系统内的事务代码 1. 使用SE11查看存储事物代码的表:TSTC 或者TSTCT TSTC: 存有事务代码,程序名称,屏幕号码等字段 TSTCT: 存有语言代码,事务代码,事 ...

  3. pandas 中的常用数学计算

    1.开方: >>> s = pd.Series([1.2 + 1j]) >>> s.abs()

  4. 找回密码的url分析

    https://www.example.com/reset?email=user@example.com&key=b4c9a289323b21a01c3e940f150eb9b8c542587 ...

  5. 通过DataTable获得表的主键

    转载http://www.cnblogs.com/hobe/archive/2005/10/07/249940.html 通过DataTable获得表的主键 很多情形下我们需要知道表的主键是什么.在A ...

  6. win10 安装php

    缺失:msvcp110.dll https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=30679

  7. 纯css3棋盘图案背景以及45度斜纹背景

    css代码  .stripes {     height: 250px;     width: 375px;     float: left;          margin: 10px;      ...

  8. cf-Round551-Div2-D. Serval and Rooted Tree(DP)

    题目链接:https://codeforces.com/contest/1153/problem/D 题意:有一棵树,给定结点数n,在每个结点上的操作(max:表示该结点的number为其孩子结点中的 ...

  9. Docker基础入门

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  10. .py文件右键添加Edit with IDLE

    1.打开注册表(regedit) 2.找到这个目录:HKEY_CLASSES_ROOT\SystemFileAssociations 3.找到.py的项,逐层新建 4.shell和edit,默认值改为 ...