cocoaPod

經過這個教程,你會學習使用一個很流行的第三方開源組件管理工具----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.

此時,正確的作法是:

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很重要。

入門教程到此結束。

相關文章
相關標籤/搜索