經過這個教程,你會學習使用一個很流行的第三方開源組件管理工具----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很重要。
入門教程到此結束。