经过这个教程,你会学习使用一个很流行的第三方开源组件管理工具----CocoaPods。不过这个工具是什么,为何要使用它呢?php
做为一个iOS开发者,你必定会用到不少别人的代码,这些代码以类库的形式提供。想象一下,若是全部的东西都要你从零开始建立,得有多麻烦!html
若是没有管理工具,你可能会简单地将每一个组件加入到你的工程中。可是,这么作有一些弊端:ios
1. 组件代码保存在你的工程中,浪费空间。git
2. 没有一个集中的能看到全部可用组件的地方。github
3. 查找和升级组件很困难,尤为是有多个组件须要升级。web
4. 在你的工程中下载而后引入组件可能存在这样的风险:修改其代码,而后搁置一边。从而致使下次升级时更加麻烦。安全
一个第三方组件管理工具能够帮助你克服这些问题。它能自动获取组件的源代码,解决类库之间的依赖,甚至能够建立并维护一个正常的环境来建立你的项目。ruby
在本教程中,你会学习如何使用CocoaPods。特别的是,你会使用多个开源组件来建立一个app,它能够获取并展现来自 trakt.tv 的电视及电影信息。CocoaPods让这个过程变得很是简单。接着往下看! app
准备开始ide
开始以前:该教程须要你熟悉Xcode,命令行工具,了解ASIHTTPRequest组件、JSON格式。若是你对这些都不熟悉,先看看 其余教程 。
PS: 原文中的示例太复杂,和CocoaPods关系不大,所以我强行替换成一个使用ASIHTTPRequest查询天气的示例demo 。
CocoaPods官网 说,它是Objective-C工程下最好的管理类库依赖的工具,这么说确实不假!与其本身从GitHub下载代码而后复制到你的工程中,致使未来升级很困难,CocoaPods能够帮你作这些事。
下面,你须要安装CocoaPods。它在Ruby下运行,不过这是它惟一的限制。幸运的是,最近版本的Mac OSX系统(从OS X10.7Lion开始)都已经预装了Ruby。因此你只须要更新RubyGems到最新版本。
打开终端,而后输入以下的命令:
sudo gem update --system
按提示输入密码,
要注意在终端中密码不显示字符,只要输完后按回车便可
。终端中输入看起来应该是这样的:
更新会花费一点时间,耐心等待几分钟。
而后,你须要安装CocoaPods。在终端中输入以下命令:
sudo gem install cocoapods
若是安装过程当中遇到如下提示,输入y继续。
rake's executable "rake" conflicts with /usr/bin/rake Overwrite the executable? [yN]
若是遇到:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why: Unable to download data from https://rubygems.org/ - Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://rubygems.org/latest_specs.4.8.gz)
可参考:http://www.phperz.com/article/14/1122/36484.html
最后,在终端中输入以下命令来完成安装:
pod setup这条命令,将 CocoaPods Specs repository
复制到你电脑上的~/.cocoapods目录下,它须要一点时间来完成。
到这里,你已经成功安装了CocoaPods!
PS:从这里开始,不使用原文demo,本身建立一个新工程 。
打开Xcode,建立一个新的singleView工程,而后关掉Xcode,是的关掉它。如今该建立你的podfile了。
安装你的第一个第三方组件
打开终端,并定位到刚刚建立的工程目录下:
cd ~/Path/To/Folder/Containing/PodDemo
而后输入命令:
pod init
这条命令会在你的工程下建立一个默认的Podfile。你将在Podfile里定义所用到的组件。
输入下面的命令,用Xcode打开Podfile:
open -a Xcode Podfile
默认的Podfile看起来像这样:
# Uncomment this line to define a global platform for your project # platform :ios, "6.0" target "PodDemo" do end
将# platform:ios, "6.0"替换成,告诉CocoaPods你的工程是运行在iOS7下:
platform :ios, "7.0"
不少类库都有最低的iOS版本要求。若是你省略了这一行,CocoaPods会给一个默认的iOS版本(目前是iOS4.3)。
如今终于能够用CocoaPods加入你的第一个组件了。在Podfile中,target "PodDemo" do下面加上:
pod 'ASIHTTPRequest', '1.8.2'
这句话告诉CocoaPods你想要在工程中引入ASIHTTPRequest Version 1.8.2。
若是你想要使用更复杂的操做,请看 更多Podfile语法 。
保存并关闭Podfile。
如今告诉CocoaPods去安装这些组件到你的工程中。在终端中输入(确保在项目目录下):
pod install
你会看到以下的输出:
Analyzing dependencies Downloading dependencies Using ASIHTTPRequest (1.8.2) Using Reachability (3.1.1) Generating Pods project Integrating client project
可能还会有:
[!] From now on use `ShowTracker.xcworkspace`.
此时CocoaPods在项目目录下建立了一个Pods文件夹----用于存放全部的第三方组件,以及PodDemo.xcworkspace。
正如上面的警告提醒,从如今开始,你必须使用PodDemo.xcworkspace来打开该项目。
若是Xcode项目还打开着,关掉它,打开PodDemo.xcworkspace。
测试ASIHTTPRequest
1.在ViewController.h中导入ASIHTTPRequest头文件:
#import <<span class="title">ASIHTTPRequest/ASIFormDataRequest.h>
2.给ViewController.h添加一个ASIFormDataRequest属性:
@property (nonatomic,strong)ASIFormDataRequest *request;
3.修改ViewController.m的ViewDidLoad方法:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/data/sk/101010100.html"]; self.request = [[ASIFormDataRequest alloc] initWithURL:url]; self.request.requestMethod = @"GET"; self.request.delegate = self; [self.request startAsynchronous]; }
4.在ViewController.m中添加ASIHTTPRequest代理方法:
- (void)requestFinished:(ASIHTTPRequest *)request { NSArray *result = [NSJSONSerialization JSONObjectWithData:request.responseData options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",result); }
运行代码,看到Console输入以下:
2014-10-15 14:08:24.734 PodDemo[7319:120294] { weatherinfo = { Radar = "JC_RADAR_AZ9010_JB"; SD = "16%"; WD = "\U5317\U98ce"; WS = "4\U7ea7"; WSE = 4; city = "\U5317\U4eac"; cityid = 101010100; isRadar = 1; njd = "\U6682\U65e0\U5b9e\U51b5"; qy = 1010; temp = 21; time = "13:55"; }; }
至此,组件已经被成功的引入到你的工程中了!
添加更多Pods
既然你已经知道CocoaPods如何工做,下面只剩下一件事可作:添加更多的Pods!
不过,事实上。。。你应该在工程中引入尽可能少的pods。虽然CocoaPods让升级组件变得更容易,可是你始终要不时地更新你本身的代码。长远来看,最好的方式是让这些组件在你的控制以内。
如今向你的工程添加2个组件。比起从命令行打开Podfile,如今你能够在workspace中找到这个文件并打开。添加:
pod 'SAMCategories', '0.5.2' pod 'Nimbus/AttributedLabel', '1.2.0'
保存,而后安装引用(在终端中使用pod install)。
你是否注意到Nimbus/AttributedLabel和其余pod不同,多了一个"/"?大的pods经常将他们的库拆分红核心模块和一些小的子模块。在这个例子中,“/”表示AttributedLabel是Nimbus的子模块。
若是你不熟悉这些类库,这里有两个例子:
sstoolk 是一个便捷的工具包,用于解决iOS开发者们常常遇到的问题。
Nimbus ,全称NimbusKit,是另外一个颇有用的工具包。
为了测试一切正常,编译项目。此时,你会看到有不少警告!
“等等,我尚未更改项目代码!”你可能会这么想。
无论何时,你经过CocoaPods添加一个引用,它的源码已经被加入到项目中了。当你编译项目时,它们也会一块儿被编译。
因此,若是你加入的引用有不少警告,甚至编译报错,极可能它已经再也不被维护了。
遇到这种状况,你能够在 CocoaPods website 上查找一个替换的组件。同时你还能找到它们的详细信息,如网站连接,说明文档,等等。
咱们这个实力,大部分的警告都来源于iOS7废弃了一些方法,你能够安全地无视掉它们。
为了让CocoaPods的引入不显示警告,在Podfile最上方加上:
inhibit_all_warnings!
从新运行pod install,编译项目,此时你应该看到警告已经不显示了。
PS: 对Podfile修改安装以后编译项目,可能会出现以下警告 :
The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
此时,正确的作法是:
pod install
注意,1.3很重要。
入门教程到此结束。