關於cocoapods的使用(管理ios開發第三方類庫)

來源:互聯網
上載者:User
文章目錄
  • 安裝RubyGems
  • 安裝command line工具
  • 安裝CocoaPods
http://ijavascripter.com/?p=47

本文會介紹如何使用CocoaPods。CocoaPods一個依賴關係管理工具。

那麼什麼是依賴關係管理工具?我們為什麼需要這個工具?

作為一個iOS開發人員,你肯定會使用第三方庫。通常,我們直接把第三方庫的原始碼直接加入到我們的項目中(手動建立一個static library還是很無聊滴),但是這麼做有一些缺點:

  • 浪費空間。原始碼可能已經存在你的代碼託管中
  • 有些時候,很難獲得某個具體版本的第三方庫
  • 沒有一個集中的地方可以查看哪些庫現在可以使用
  • 更新新版本的時候,是件無聊的事情,有些時候還很痛苦

一個依賴關係管理工具可以協助你克服大部分上面提到的問題。它會幫你下載你所用到的庫的原始碼、建立和維護你所需要的環境。

本文會用cocoapod來建立一個應用,這個應用用於擷取你在trakt.tv上收聽的節目資訊。

等會你就會發現使用cocoaPods所帶來的好處

CocoaPods的官網是這麼描述它自己的”The best way to manage library dependencies in Objective-C projects”。 就目前來看,所言非虛。

與其你自己每次從Github中下載代碼,然後拷貝到你的項目中,還不如讓CocoaPods來幫你完成這個工作。

trakt.tv這個應用的需求就是-我們希望建立一個應用,可以顯示將要播放的電視節目的資訊。

安裝CocoaPods安裝RubyGems

CocoaPods需要ruby環境,幸運的是所有的mac電腦都已經預裝了ruby,所以你需要更新一下你的RubyGems(如果你的系統版本低於OS X Lion)

只需要輸入如下命令就可以更新你的RubyGems:

sudo gem update --system

安裝command line工具

確保你在你的Xcode中安裝了command line tool(命令列工具)。在最新的Mac OS X Lion和Xcode中,命令列工具預設沒有安裝。可以通過如下方式安裝command line tool:

  • 從這裡下載,然後安裝
  • 開啟xcode,開啟components介面。Xcode->Preferences->Downloads->Components.裡面應該有一個選項是”Command Line Tools”,後面應該“Install”或者“Update”按鈕,點一下按鈕就行。安裝完成後,按鈕的文字會變成“Installed”。如:
安裝CocoaPods

完成以上步驟後,只需要輸入如下命令就可以安裝CocoaPods了:

sudo gem install cocoapods

pod setup

第一次安裝可能需要一些時間,耐心等待一下

建立一個“CocoaPodsExample”工程

開啟Xcode,然後建立一個基於“Single View Application”的工程。工程的名字“CocoaPodsExample”,“Device Family”選為“iPhone”,選中“Use Storyboards”和“Use Automatic Reference Counting”。如:

點擊下一步然後選擇一個地方存放你的工程。

找一張圖片作為Launch Images。如果沒有合適的可以下載這一張-placeholder.png。把這張圖片拖到工程中,選中“Copy items into destination group’s folder(if needed)”。

下面開啟MainStoryboard.storyboard,並按照如下步驟進行修改:

  1. 添加一個scroll view。確保這個scroll view的寬度和高度是100%
  2. 修改scroll view的屬性。開啟屬性選取器,不選“Shows Horizontal Scrollers”,”Shows Verticall Scollers”。選中“Scrolling Enabled”, “Paging Enabled”, “Direction Lock Enabled”
  3. 添加一個page control。確保這個page control是之前scroll view的兄弟視圖,而不是scroll view的子視圖,並且page control應該在scroll view的前面,不然你就看不到page control了。

storyboard應該看起來像:

最後把scroll view和page view串連到一個outlet中,我們把scroll view的outlet命名為showsScrollView,並且把當前的view controller做為scroll view的delegate。把page control的outlet命名為showPageControl,給page control的“Value Changed”事件綁定一個方法,方法名稱是pageChanged。

現在你可以關了你的Xcode了,接下來就是開始建立你的Podfile了。

建立你的第一個依賴關係

開啟終端,並且開啟存放你的“CocoaPodsExample”工程的檔案夾。輸入如下命令:

touch Podfile 
open -e Podfile

TextEdit會被開啟,你可以往開啟的空白Podfile中新增內容了。

我們往Podfile中加入如下內容:

platform :iOS pod 'AFNetworking', '0.9.1'

如你所見,Podfile的格式很簡單。首先,你設定platform為ios(因為有一些架構只支援iOS或者Mac OS X中的一個,而不是都有)。然後,你添加你的第一個依賴-“AFNetworking”,並且指定了,你需要的是0.9.1。

編輯Podfile,除了上面的方法,你還可以使用別的你喜歡的編輯工具,比如vim

有關Podfile的格式,你可以在A Podfile和Podfile(frames)中得到更詳細資料

儲存Podfile之後,我們可以開始配置你的工程了。

在終端中執行如下命令:

pod install

執行完後,你應該會在終端中看到:

如果這個時候,你開啟你工程所在的檔案夾會看到:

CocoaPods建立了一個檔案夾-“Pods”,這個檔案夾存放了所有的依賴的庫和一個workspace檔案,CocoaPodsExample.xcworkspace

VERY IMPORTANT!

從現在開始,你必須用workspace檔案(CocoaPodsExample.xcworkspace)開啟工程,而不是在是用工程檔案(CocoaPodsExample.xcodeproj)

測試AFNetworking

測試AFNetworking是否成功加入已經CocoaPods是否真的工作,可以建立一個基於iOS/Cocoa Touch/Objective-C class的類,我們稱之為SKTraktAPIClient,並且是這個類是NSObject的子類。切記把這個類加入到CocoaPodsExample中而不是Pods工程中。如果你現在看一下你工程檔案的導航,你會看到有兩個獨立的項目:CocoaPodsExample和Pods

開啟SKTraktAPIClient.h,並且用如下代碼替換已有代碼:

#import #import extern NSString *const kTraktAPIKey; extern NSString *const kTraktBaseURLString; @interface SKTrakeAPIClient : AFHTTPClient +(SKTrakeAPIClient *)sharedClient; @end

上面的代碼做了如下事情:

  1. 第一行代碼匯入Foundation標頭檔
  2. 第二行代碼匯入AFNetworking的標頭檔,AFNetworking將會是SKTraktAPIClient的標頭檔
  3. 接下來的兩行定了兩個變數
  4. 最後我們定義了一個方法,該方法會返回一個獨立的SKTraktAPIClient實力

為什麼在已經有AFNetworking可以處理所有的HTTP請求的情況下,我們還要建立一個SKTraktAPIClient類?原因就在於,我們希望有一個類可以處理所有我們和trakt.tv的請求,可以使用同樣的Base URL和api key。這樣子可以方便之後的維護。

現在開啟SKTraktAPIClient.m,並且用如下的代碼替換已有的代碼:

#import "SKTraktAPIClient.h" #import NSString *const kTraktAPIKey = @"fc3df235908f83107cedd7914950d7a0"; NSString *const kTraktBaseURLString = @"http://api.trakt.tv"; @implementation SKTraktAPIClient +(SKTraktAPIClient *)sharedClient{ static SKTraktAPIClient *_sharedClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kTraktBaseURLString]]; }); return _sharedClient; } -(id)initWithBaseURL:(NSURL *)url{ self = [super initWithBaseURL:url]; if(!self){ return nil; } [self registerHTTPOperationClass:[AFJSONRequestOperation class]]; [self setDefaultHeader:@"Accept" value:@"application/json"]; self.parameterEncoding = AFJSONParameterEncoding; return self; } @end

首先我們匯入了AFJSONRequestOperation.h,這樣子所有的傳回值都是JSON格式的。我們建立了sharedClient,這裡使用了GCD(Grand Central Dispatch),確保了實現SKTraktAPIClient的單例,隨意只要是通過sharedClient方法獲得的SKTraktAPIClient都是同一個執行個體,不會重複建立。除了這個以外,我們還重寫了initWithBaseURL方法,原因就是之後所有用initiWithBaseURL建立的方法,它們都有同樣的response格式-json格式

下面開啟AppDelegate.m加入下面代碼:

#import

application:didFinishLaunchingWithOptions:加入如下代碼:

[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;

以上代碼開啟了automatic network activity indication manager,這個是AFNetworking支援的功能。通過這種方法,你就不需要每次發送請求開啟activity indication,完成後關閉activity indication。

現在開啟ViewController.m,並且加入如下代碼:

#import "SKTraktAPIClient.h" #import

並用如下代碼替換viewDidLoad

-(void)viewDidLoad { [super viewDidLoad]; // 1 - Create trakt API client SKTraktAPIClient* client = [SKTraktAPIClient sharedClient]; // 2 - Create date instance with today's date NSDate* today = [NSDate date]; // 3 - Create date formatter NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMdd"; NSString* todayString = [formatter stringFromDate:today]; // 4 - Create API query request NSString* path = [NSString stringWithFormat:@"user/calendar/shows.json/%@/%@/%@/%d", kTraktAPIKey, @"marcelofabri", todayString, 3]; NSURLRequest* request = [client requestWithMethod:@"GET" path:path parameters:nil]; // 5 - Create JSON request operation AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { // 6 - Request succeeded block NSLog(@"%@", JSON); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { // 7 - Request failed block }]; // 8 - Start request [operation start]; }

編譯運行之後,你可以在你的控制台中看到類似的日誌:

可見,CocoaPods正確幫我們配置了AFNetworking。

 

附件:http://vdisk.weibo.com/s/kvEHc

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.