CocoaPods管理第三方開源組件,入門介紹






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

作爲一個iOS開發者,你一定會用到很多別人的代碼,這些代碼以類庫的形式提供。想象一下,如果所有的東西都要你從零開始創建,得有多麻煩!

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

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

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

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

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

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

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

準備開始

開始之前:該教程需要你熟悉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]

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

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

入門教程到此結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章