SwiftJC专题swift 开发

swift开发:CocoaPods和第三方库

2016-04-27  本文已影响444人  djyuning
CocoaPods
在Swift项目中引入第三方库需要用到CocoaPods(以下简称CP),使用CP后,开发时不再使用原生的工程文件(APP.xcodeproj),而是使用CP创建的APP.xcworkspace工程文件。

CocoaPods官网已推出了其 APP,可以可视化、规范化的使用 CocoaPods 了。

CocoaPods APP

<a id="convenient">快速使用</a>

依次执行下面的命令,即可完成安装,期间可能出现各种怪异的错误,具体请参考下面的分步操作。

# 查看 Ruby 版本
$ ruby -v

# 配置淘宝软件源,提升安装速度
$ gem sources --remove https://rubygems.org/ # 移除现有源
$ gem sources --add https://ruby.taobao.org/ # 添加淘宝源
$ gem sources -l # 查看配置是否成功

# 安装 cocoapods
$ sudo gem install cocoapods

# 查找插件
$ pod search 插件关键字

<a id="install">CocoaPods的安装</a>

一般OS X系统应该是自带Ruby环境的,打开终端,输入以下代码即可查看到其版本信息。注意:终端操作需要使用到root权限,即使用sudo执行。

$ ruby -v

回车后,终端显示:

ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]

确认系统已存在Ruby环境后,我们就可以使用gem命令了。CP应该是和前端开发中的node.js相似的东西,都是基于命令来执行扩展(包或库)管理(NODE使用npm命令,CP使用pod命令)。下面的操作顺序应为:

CP安装需要使用以下命令,网上的部分文章都没有提到使用sudo,所以我本地使用的时候总是报错:

$ sudo gem install cocoapods

另外,据说是CP的官网被墙,具体我未考证,而是直接设置为淘宝镜像了。
全新安装时,要先删除现有的源,然后再设置为淘宝镜像,如果直接设置为淘宝镜像,则会出现 Error fetching http://ruby.taobao.org/的问题:
移除现有源:

$ gem sources --remove https://rubygems.org/

设置为淘宝镜像:

$ gem sources --add https://ruby.taobao.org/

然后检查是否成功:

$ gem sources -l

终端显示:

*** CURRENT SOURCES ***
https://ruby.taobao.org/

确认镜像地址正确后,执行上面的安装命令,终端可能会闪烁一段时间:

$ sudo gem install cocoapods
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
省略·············
21 gems installed

此时CP已安装完成(但貌似未本地初始化)。机器配置不同,软件迭代较快,可能会出现一些问题,导致无法安装,参考(逐步更新中):

· 安装cocoapods失败,提示 requires Ruby version >=2.2.2

安装顺利完成后,接下来测试是否可运行,我用它搜索了下AFNetworking库:

$ pod search AFNetworking

终端显示:

Setting up CocoaPods master repo
CocoaPods 1.0.0.beta.8 is available.
To update use: `gem install cocoapods --pre`
[!] This is a test version we'd love you to try.
For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.
Setup completed
-> 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)
···· 省略N个结果·····

说明CP已经可以正常工作了。

<a id="install">CocoaPods的使用</a>

简单说下CP的使用流程:

逻辑比较简单,来看下Podfile的内容:

platform :ios, '8.0'
use_frameworks!
target "你的应用名称" do
  pod 'AFNetworking', '~> 2.6'
  pod 'SwiftyJSON', '~> 2.3'
  pod 'MBProgressHUD', '~> 0.9.2'
end

注意,这里务必写上target "你的应用名称" do ··· end这一段,否则会出现【[!] The dependency Alamofire (~> 1.2.2) is not used in any concrete target 】的错误。
当CP开始正常工作,我觉得常做的工作就变成找第三方库了,添加一个第三方库可使用:

pod '库名', '版本号'

此处有个版本号,我们怎么知道该库的最新版本呢?可以使用搜索命令,如搜索一个图表库,终端显示下面的内容【打开终端 - 搜索第三方库 - 复制pod命令 - 粘贴到Podfile中 - Xcode执行InstallPod菜单】:

$ pod search chart

CP即可为我搜索出所有关键字相关的第三方库,OK,我看下其中一个:

-> PNChart (0.8.8)
   A simple and beautiful chart lib with animation used in Piner for iOS
   pod 'PNChart', '~> 0.8.8'
   - Homepage: https://github.com/kevinzhow/PNChart
   - Source:   https://github.com/kevinzhow/PNChart.git
   - Versions: 0.8.8, 0.8.7, 0.8.6, 0.8.5, 0.8.3, 0.8.2, 0.8, 0.7.5, 0.7.1,
   0.6.0, 0.5.6, 0.5.5, 0.5, 0.3.3, 0.3.2, 0.3.1, 0.2.2, 0.1.8, 0.1.5 [master
   repo]

可以看出,这段信息的格式:

->  库名(最新版本号)
    介绍
    调用参数【OK就是他了】
    - 主页
    - 源代码
    - 所有版本号

我们直接复制【调用参数】到Podfile中,然后再在项目根目录下执行$ pod install命令即可添加一个新的库。

<a id="attention">注意:</a>

  • 使用CP安装好库后,在Linked Frameworks and Libraries中只需要引入Pods.framework即可在项目中import相关的库文件,通常打开的xcworkspace工程中是已经自动引入的;
  • 项目根目录下的Podfile.lock不可删除,否则Xcode会意外退出;
  • 每当更新了Podfile文件,都需要先执行【command + B】一次,否则会一直提示未找到该库;

疑惑:【CocoaPods安装成功,可显示版本,可菜单项找不到】

需要在终端安装 Alcatraz,Alcatraz 是Xcode的一款插件管理工具,可以用来管理Xcode的插件、模版以及颜色配置的工具。在终端执行下面的命令安装:

curl -fsSL [https://raw.github.com/alcatraz/Alcatraz/master/Scripts/install.sh](https://raw.github.com/alcatraz/Alcatraz/master/Scripts/install.sh) | sh

报错:【Setting up CocoaPods master repo

这是 CocoaPods 正在初始化自身,它会在用户根目录下创建一个名为【.cocoapods】的隐藏文件夹,其过程根据实际情况有长有短,耐心等待即可。

报错:【[!] The dependency Alamofire (~> 1.2.2) is not used in any concrete target

这个提示通常会在更新CP后出现,解决办法是将Podfile改为:

platform :ios, '8.0'
use_frameworks!
target "你的应用名称" do
pod 'MBProgressHUD', '~> 0.9.2'
pod 'Alamofire', '~> 3.3.1'
end

官方提供的完整的代码:

# open source
source 'https://github.com/CocoaPods/Specs.git'

# my work
source 'https://github.com/Artsy/Specs.git'

target 'App' do 
  pod 'Artsy+UIColors' 
  pod 'Artsy+UIButtons' 
  pod 'FLKAutoLayout' 
  pod 'ISO8601DateFormatter', '0.7' 
  pod 'AFNetworking', '~> 2.0' 

  target 'AppTests' do 
    inherit! :search_paths 
    pod 'FBSnapshotTestCase' 
    pod 'Quick' 
    pod 'Nimble' 
  end
end

即使用target "AppName" do ··· end包裹库列表,否则会出现执行Install的时候报错,告知未指定关联的项目,从而无法生成工程文件。

上一篇 下一篇

猜你喜欢

热点阅读