iOS.CocoaPods.0

时间:2022-09-02 18:31:53

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. 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&period;

    关于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&colon;CocoaPods详解

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

随机推荐

  1. 【BZOJ-4435】Juice Junctions 最小割树(分治&plus;最小割)&plus;Hash

    4435: [Cerc2015]Juice Junctions Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 20  Solved: 11[Submi ...

  2. 简简单单的一个PYTHON多进程实现

    因为在作自动化部署时,希望能将多个服务分不同的批次进行发布, 同一批次的机器同时发布, 如果前面一批次出错误,后面就需要停止整 个流程. 那可以简单的用threading来实现了. thread_li ...

  3. mySQL 教程 第7章 存储过程和函数

    存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只 ...

  4. hbase1&period;1&period;2安装

    环境:hadoop2.6.1,zk3.4.6 1.配置环境变量 sudo vi /etc/profile.d/hbase-env.sh export HBASE_HOME=/usr/local/hba ...

  5. jdbc访问pipelinedb

    建立Stream及视图 pipeline.execute("create stream caesar(name text,info json);") #创建stream,字段nam ...

  6. Python四线程爬取西刺代理

    import requests from bs4 import BeautifulSoup import lxml import telnetlib #验证代理的可用性 import pymysql. ...

  7. VMware中安装Contos

    1 检查BIOS虚拟化支持 2 新建虚拟机 3 新建虚拟机向导 4 创建虚拟空白光盘 5 安装Linux系统对应的CentOS版 6 虚拟机命名和定位磁盘位置 7 处理器配置,看自己是否是双核.多核 ...

  8. 【Linux】shell编程案例

    一.随机生成字符文件名 1.需求描述: 使用for循环在/usr/test目录下创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串test,案例名称如下: 以下为示例: 2.代 ...

  9. PHP&colon;第三章——PHP中的可变函数

    PHP中的可变函数 <?php header("Content-Type:text/html;charset=utf-8"); function F(){ echo '999 ...

  10. PKUWC 2018 铁牌记

    Day –INF: 联赛后根据分数一部分人继续停课.由于本蒟蒻撞上了*运,联赛分数还行,可参加NOIWC和PKUWC,故继续停课训练.期间补全了一堆知识点,并成功翘掉期末考.(然而该还的还是要还的, ...

相关文章