CocoaPods☀️

作者: LeaderBiao | 来源:发表于2016-06-28 19:08 被阅读28次
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。

CocoaPods简介

每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm。随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供依赖管理的工具,它的名字叫做:CocoaPods
CocoaPods项目的源码 在 Github 上管理。该项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 iOS 开发事实上的依赖管理标准工具。开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得我们可以节省设置和更新第三方开源库的时间。
我在开发猿题库客户端时,使用了 24 个第三方开源库。在没有使用 CocoaPods 以前,我需要:

  • 1.把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
  • 2.对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
  • 3.对于某些开源库,我还需要设置-licucore或者-fno-objc-arc等编译参数
  • 4.管理这些依赖包的更新。

这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行pod install
CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。

CocoaPods的安装及使用

安装

安装的方式非常简单,Mac下已经自带了ruby,只要使用ruby的gem命令就可以安装了。打开的Mac的终端,在终端运行下面的命令:

$ [sudo] gem install cocoapods
$ pod setup

说明:执行$ pod setup这步可能比较慢,需要多等待一段时间,也可能是网络的问题

更新

当然我们也可以更新我们的CocoaPods,同样也是使用ruby的gem命令:

$ [sudo] gem update cocoa pods```

然而你也可以更新CocoaPods的预览版,执行下面的命令:

$ [sudo] gem update cocoapods --pre```

查找第三方库

如果我们不知道cocoaPods管理的库中,是否有你想要的库,那么你可以通过$ pod search xxx命令进行查找,以下是我用$ pod search sdwebimage查找到的所有可用的库:

-> SDWebImage (3.5.1)
   Asynchronous image downloader with cache support with an UIImageView
   category.
   pod 'SDWebImage', '~> 3.5.1'
   - Homepage: https://github.com/rs/SDWebImage
   - Source:   https://github.com/rs/SDWebImage.git
   - Versions: 3.5.1, 3.5, 3.4, 3.3, 3.2, 3.1, 3.0, 2.7.4, 2.7, 2.6, 2.5, 2.4
   [master repo]
   - Sub specs:
     - SDWebImage/Core (3.5.1)
     - SDWebImage/MapKit (3.5.1)
     - SDWebImage/WebP (3.5.1)```

>注:我省略了两个库,没有全列出。

#####使用

假设我的Desktop上有一个已经存在的一个项目名称叫做:CocoaPodsTest,首先,进入项目的根目录,并在根目录下创建一个名叫Podfile的文件(没有任何后缀):

$ cd Desktop/CocoaPodsTest/ '进入项目根目录,根据自己项目实际目录'
$ vim Podfile '创建Podfile文件,你可以选择你自己喜欢的编辑器'```

注:vim的简单用法,$ vim fileName创建文件fileName,并打开;按i进入插入模式,输入文本;按esc进入命令模式后,按:wq或ZZ退出并保存。

然后,在Podfile文件中按以下的格式将依赖库的名字列出:

platform :ios, '6.0'                '平台、版本'
target 'CocoaPodsText' do          `项目target`
pod 'SDWebImage', '~> 3.5.1'       '开源库名称、版本'
pod 'AFNetworking', '~> 2.0.3'     '开源库名称、版本'```


保存Podfile文件后,执行如下安装的命令:

$ pod install```

当安装命令执行成功后,会输出:

Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.0.3)
Installing SDWebImage (3.5.1)
Generating Pods project
Integrating client project
[!] From now on use `CocoaPodsTest.xcworkspace`.```

哈哈,看到类似这样的输出就是成功了。你所需要的第三方开源库都下载好了,并且设置好了相应的依赖以及编译参数。在我们以后用的时候一定要记住以下两点:

>1. 最后一行是一个警告,提醒我们需要注意:从现在开始,需要通过`xxx.xcworkspace`打开的我们的项目。而不是之前我们一直用的`xxx.xcodeproj`

>2. 当我们每次修改了`Podfile`这个文件后,一定要记得执行命令:`$ pod install`,还可以执行`$ pod update`来更新类库




###常见问题

1.[!] Invalid Podfile file: undefined local variable or method `en_US' for #<Pod::Podfile:0x00000102a5d8b0>. Updating CocoaPods might fix the issue.

原因:单引号格式,可能是手动输入导致
解决办法:系统偏好设置-键盘-文本-将“使用智能引号和破折号”一项取消勾选-再将podfile里面的单(双)引号修改一下



2.如果在执行sudo gem install cocoapods的时候报以下错误:
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/pod
并且你的操作系统是EI Caption,可是尝试使用以下方法来代替上面的安装命令:

$ sudo gem install -n /usr/local/bin cocoa pods

附:如何使用CocoaPods的镜像索引:

所有项目的Podspec文件都托管在https://github.com/CocoaPods/Specs,
第一次执行pod setup时,CocoaPods会将这些podspec索引文件更新到本地的~/.cocoapods目录下,
这个索引文件比较大,所以第一次更新时非常慢.
友好人士在国内的服务器建立了Cocoapods索引库的镜像,
所以执行索引跟新操作时候会快很多.具体操作方法如下:
$ pod repo remove master
$ pod repo add master https://gitcafe.com/akuandev/Specs.git
$ pod repo update
这是使用gitcafe上的镜像,将以上代码中的 https://gitcafe.com/akuandev/Specs.git
替换成 http://git.oschina.net/akuandev/Specs.git 即可使用oschina上的镜像。```

3.ArgumentError - invalid byte sequence in US-ASCII
原因:字符集错误
解决办法:
使用locale命令查看当前的字符集,如果都是zh,需要执行以下命令:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后再使用locale命令查看,已经改过来了

[!] The YMTea [Debug] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
Use the $(inherited) flag, or
Remove the build settings from the target.
[!] The YMTea [Release] target overrides the OTHER_LDFLAGS build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation

- Use the `$(inherited)` flag, or
- Remove the build settings from the target.

原因:我是在已有项目中集成Cocoapods的时候遇到这个问题,原因是项目 Target 中做了一些设置,CocoaPods 也做了默认的设置,如果两个设置结果不一致,就会造成问题。
解决方法:我想要使用 CocoaPods 中的设置,分别在我的项目中定义PODS_ROOT 和 Other Linker Flags的地方(build settings),把他们的值用$(inherited)替换掉,进入终端,执行 pod update
警告没了,回到 Xcode,build通过。
网上还流行另外一种简单粗暴的方法:点击项目文件 project.xcodeproj,右键显示包内容,用文本编辑器打开project.pbxproj,删除OTHER_LDFLAGS的地方,保存(这种我没试过)

相关链接

CocoaPods Blog

CocoaPods安装和使用教程

CocoaPods 制作自己的pod spec文件

相关文章

网友评论

    本文标题:CocoaPods☀️

    本文链接:https://www.haomeiwen.com/subject/auvtjttx.html