CocoaPods 屢次使用

經過這個教程,你會學習使用一個很流行的第三方開源組件管理工具----CocoaPods。不過這個工具是什麼,爲何要使用它呢?html

做爲一個iOS開發者,你必定會用到不少別人的代碼,這些代碼以類庫的形式提供。想象一下,若是全部的東西都要你從零開始建立,得有多麻煩!ios

若是沒有管理工具,你可能會簡單地將每一個組件加入到你的工程中。可是,這麼作有一些弊端:git

1. 組件代碼保存在你的工程中,浪費空間。github

2. 沒有一個集中的能看到全部可用組件的地方。web

3. 查找和升級組件很困難,尤爲是有多個組件須要升級。xcode

4. 在你的工程中下載而後引入組件可能存在這樣的風險:修改其代碼,而後擱置一邊。從而致使下次升級時更加麻煩。安全

一個第三方組件管理工具能夠幫助你克服這些問題。它能自動獲取組件的源代碼,解決類庫之間的依賴,甚至能夠建立並維護一個正常的環境來建立你的項目。ruby

在本教程中,你會學習如何使用CocoaPods。特別的是,你會使用多個開源組件來建立一個app,它能夠獲取並展現來自trakt.tv的電視及電影信息。CocoaPods讓這個過程變得很是簡單。接着往下看!app

準備開始框架

開始以前:該教程須要你熟悉Xcode,命令行工具,瞭解ASIHTTPRequest組件、JSON格式。若是你對這些都不熟悉,先看看其餘教程

PS:原文中的示例太複雜,和CocoaPods關係不大,所以我強行替換成一個使用ASIHTTPRequest查詢天氣的示例demo。

CocoaPods官網說,它是Objective-C工程下最好的管理類庫依賴的工具,這麼說確實不假!與其本身從GitHub下載代碼而後複製到你的工程中,致使未來升級很困難,CocoaPods能夠幫你作這些事。

下面,你須要安裝CocoaPods。它在Ruby下運行,不過這是它惟一的限制。幸運的是,最近版本的Mac OSX系統(從OS X10.7Lion開始)都已經預裝了Ruby。因此你只須要更新RubyGems到最新版本。

打開終端,而後輸入以下的命令:

  1. sudo gem update --system  

按提示輸入密碼,要注意在終端中密碼不顯示字符,只要輸完後按回車便可。終端中輸入看起來應該是這樣的:

 

更新會花費一點時間,耐心等待幾分鐘。

而後,你須要安裝CocoaPods。在終端中輸入以下命令:

  1. sudo gem install cocoapods  

若是安裝過程當中遇到如下提示,輸入y繼續。

  1. rake's executable "rake" conflicts with /usr/bin/rake  
  2. Overwrite the executable? [yN]  

最後,在終端中輸入以下命令來完成安裝:

  1. pod setup  

這條命令,將CocoaPods Specs repository複製到你電腦上的~/.cocoapods目錄下,它須要一點時間來完成。

 

到這裏,你已經成功安裝了CocoaPods!

PS:從這裏開始,不使用原文demo,本身建立一個新工程。

打開Xcode,建立一個新的singleView工程,而後關掉Xcode,是的關掉它。如今該建立你的podfile了。

安裝你的第一個第三方組件

打開終端,並定位到剛剛建立的工程目錄下:

  1. cd ~/Path/To/Folder/Containing/PodDemo  

而後輸入命令:

  1. pod init  

這條命令會在你的工程下建立一個默認的Podfile。你將在Podfile裏定義所用到的組件。

 

輸入下面的命令,用Xcode打開Podfile:

  1. open -a Xcode Podfile  

默認的Podfile看起來像這樣:

 

 

  1. # Uncomment this line to define a global platform for your project  
  2. # platform :ios, "6.0"  
  3.    
  4. target "PodDemo" do  
  5.    
  6. end  

將# platform:ios, "6.0"替換成,告訴CocoaPods你的工程是運行在iOS7下:

  1. platform :ios, "7.0"  

不少類庫都有最低的iOS版本要求。若是你省略了這一行,CocoaPods會給一個默認的iOS版本(目前是iOS4.3)。

 

如今終於能夠用CocoaPods加入你的第一個組件了。在Podfile中,target "PodDemo" do下面加上:

  1. pod 'ASIHTTPRequest', '1.8.2'  

這句話告訴CocoaPods你想要在工程中引入ASIHTTPRequest Version 1.8.2。

 

若是你想要使用更復雜的操做,請看更多Podfile語法

保存並關閉Podfile。

如今告訴CocoaPods去安裝這些組件到你的工程中。在終端中輸入(確保在項目目錄下):

  1. pod install  

你會看到以下的輸出:

  1. Analyzing dependencies  
  2. Downloading dependencies  
  3. Using ASIHTTPRequest (1.8.2)  
  4. Using Reachability (3.1.1)  
  5. Generating Pods project  
  6. Integrating client project  

可能還會有:

  1. [!] From now on use `ShowTracker.xcworkspace`.  

此時CocoaPods在項目目錄下建立了一個Pods文件夾----用於存放全部的第三方組件,以及PodDemo.xcworkspace。

 

正如上面的警告提醒,從如今開始,你必須使用PodDemo.xcworkspace來打開該項目。

若是Xcode項目還打開着,關掉它,打開PodDemo.xcworkspace。

測試ASIHTTPRequest

1.在ViewController.h中導入ASIHTTPRequest頭文件:

  1. #import <ASIHTTPRequest/ASIFormDataRequest.h>  

2.給ViewController.h添加一個ASIFormDataRequest屬性:

  1. @property (nonatomic,strong)ASIFormDataRequest *request;  

3.修改ViewController.m的ViewDidLoad方法:

  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     // Do any additional setup after loading the view, typically from a nib.  
  4.       
  5.     NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/data/sk/101010100.html"];  
  6.     self.request = [[ASIFormDataRequest alloc] initWithURL:url];  
  7.     self.request.requestMethod = @"GET";  
  8.     self.request.delegate = self;  
  9.     [self.request startAsynchronous];  
  10. }  

4.在ViewController.m中添加ASIHTTPRequest代理方法:

  1. - (void)requestFinished:(ASIHTTPRequest *)request  
  2. {  
  3.     NSArray *result = [NSJSONSerialization JSONObjectWithData:request.responseData options:NSJSONReadingMutableContainers error:nil];  
  4.   
  5.     NSLog(@"%@",result);  
  6. }  

運行代碼,看到Console輸入以下:

  1. 2014-10-15 14:08:24.734 PodDemo[7319:120294] {  
  2.     weatherinfo =     {  
  3.         Radar = "JC_RADAR_AZ9010_JB";  
  4.         SD = "16%";  
  5.         WD = "\U5317\U98ce";  
  6.         WS = "4\U7ea7";  
  7.         WSE = 4;  
  8.         city = "\U5317\U4eac";  
  9.         cityid = 101010100;  
  10.         isRadar = 1;  
  11.         njd = "\U6682\U65e0\U5b9e\U51b5";  
  12.         qy = 1010;  
  13.         temp = 21;  
  14.         time = "13:55";  
  15.     };  
  16. }  

至此,組件已經被成功的引入到你的工程中了!

 

添加更多Pods

既然你已經知道CocoaPods如何工做,下面只剩下一件事可作:添加更多的Pods!

不過,事實上。。。你應該在工程中引入儘可能少的pods。雖然CocoaPods讓升級組件變得更容易,可是你始終要不時地更新你本身的代碼。長遠來看,最好的方式是讓這些組件在你的控制以內。

如今向你的工程添加2個組件。比起從命令行打開Podfile,如今你能夠在workspace中找到這個文件並打開。添加:

  1. pod 'SAMCategories', '0.5.2'  
  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最上方加上:

  1. inhibit_all_warnings!  

從新運行pod install,編譯項目,此時你應該看到警告已經不顯示了。

 

PS: 對Podfile修改安裝以後編譯項目,可能會出現以下警告:

  1. The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.  

此時,正確的作法是:

 

 

I. Project Cleanup

  1. In the project navigator, select your project
  2. Select your target
  3. Remove all libPods*.a in Linked Frameworks and Libraries

II. Update CocoaPods

  1. Launch Terminal and go to your project directory.
  2. Update CocoaPods using the command pod install

注意,1.3很重要。

 

入門教程到此結束。

 

使用cocoaPods和遇到的問題以及解決辦法

 

上一篇說到cocoaPods的安裝,本篇就來講說cocoaPods的使用和遇到一些問題的解決辦法( ⊙ o ⊙ )

 1、cocoaPods的建立使用

一、cd進入所在的項目目錄

二、建立Podfile文件 $ pod init

三、編輯Podfile文件 $sudo vi Podfile

四、導入框架  $ pod ‘框架名’  能夠指定版本號$ pod ‘框架名’,’~>版本號’,通常不指定版本號,默認用最近的

五、按esc,而後輸入  :wq 保存

六、添加框架, $ pod install (把xcode和模擬器都關閉了)

七、打開 項目名.xcworkspace這個文件就能打開項目了

八、添加頭文件就能夠用了,注意:只能用尖括號導入<>

九、框架的更新 $ pod update

十、第三方框架的追加,搜索框架 $ pod search,而後寫入Podfile,使用 $ pod install

***注意,若是以前手動導入個第三方庫,如今用cocoa pods的話,要修改Other Linker Flags,增長$(inherited)

 

2、可能遇到的問題

(1)使用cocoapods導入第三方類庫後頭文件沒有代碼提示?

解決辦法: 選擇Target -> Build Settings 菜單,找到\」User Header Search Paths\」設置項,新增一個值"${SRCROOT}",而且選擇\」Recursive\」

(2)出現以下警告

[!] Your Podfile has had smart quotessanitised. To avoid issues in the future, you should not use TextEdit forediting it. If you are not using TextEdit, you should turn off smart quotes inyour editor of choice.

 

解決辦法:不要使用文本編輯去編輯Podfile,使用Xcode編輯,或者使用終端敲命令去編輯。

 

 (3) 執行pod install 或pod update 命令後,updating local specsrepositories 卡住不動

 

解決辦法:pod install 被牆了,換成新的命令pod install --verbose --no-repo-update

相關文章
相關標籤/搜索