AFNetworking - GitHub README翻譯


AFNetworking是一個(gè)基于iOS和Mac OS X的備受人們喜愛的網(wǎng)絡(luò)類庫馍刮。它是建立在 Foundation URL Loading System之上,將高層網(wǎng)絡(luò)進(jìn)行強(qiáng)有力的擴(kuò)展抽象成了Cocoa因苹。它有一個(gè)精心設(shè)計(jì)的模塊結(jié)構(gòu)、各種易用且功能豐富的API。
然而最令人吃驚的不是AFNetworking的這些特點(diǎn)驱闷,而是每天都有開發(fā)者使用并維護(hù)著。AFNetworking應(yīng)用在iPhone空免、iPad空另、mac的App上。
為你下一個(gè)項(xiàng)目選擇AFNetworking或者將他移植到現(xiàn)有的項(xiàng)目中都會是你受益匪淺蹋砚。

怎么開始

  • 下載AFNetworking并且在mac和iPhone上嘗試一些示例App
  • 讀入門指南扼菠、常見問題的解答、或其wiki上的相關(guān)文章
  • 查看AFNetworking文檔中所有可用的API
  • 閱讀概述AFNetworking從2.0到3.0結(jié)構(gòu)變化的遷移指南

交流

  • 如果你需要幫助坝咐,用Stack Overflow循榆。
  • 如果你想要問問題,用Stack Overflow墨坚。
  • 如果你發(fā)現(xiàn)了一個(gè)bug并且可以提供操作步驟復(fù)現(xiàn)它秧饮,公布這個(gè)問題
  • 如果你有一個(gè)指定的需求,公布它
  • 如果你想要投稿泽篮,提交一個(gè)pull請求

安裝

AFNetworking支持在一個(gè)項(xiàng)目中安裝的多種方法

用Cocoapods安裝

CocoaPods依賴objective - c管理,自動化和簡化的過程像AFNetworking在你的項(xiàng)目使用第三方庫盗尸。有關(guān)更多信息,請參見“入門”指南。你可以用下面的命令安裝:

$ gem install cocoapods

Podfile

使用CocoaPods 將AFNetworking導(dǎo)入到你的Xcode項(xiàng)目,在Podfile輸入:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'TargetName' do
pod 'AFNetworking', '~> 3.0'
end

然后執(zhí)行命令

$ pod install

用Carthage安裝

Carthage是一個(gè)分散的依賴管理器,構(gòu)建你的依賴關(guān)系,為您提供二進(jìn)制框架帽撑。

你可以用 Homebrew安裝Carthage,然后運(yùn)行一下代碼

$ brew update
$ brew install carthage

用Carthage導(dǎo)入AFNetworking到你的工程中泼各,指定你的Cartfile文件

github "AFNetworking/AFNetworking" ~> 3.0

運(yùn)行Carthage 構(gòu)建framework并且拖動AFNetworking的framework到你的工程中

要求

AFNetworking 版本 iOS最低系統(tǒng) OS X 最低系統(tǒng) watchOS 最低系統(tǒng) tvOS 最低系統(tǒng) 注釋
3.x iOS 7 OS X 10.9 watchOS 2.0 tvOS 9.0 必需xcode7以上 ;NSURLConnectionOperation已經(jīng)被刪除了
2.6 -> 2.6.3 iOS 7 OS X 10.9 watchOS 2.0 n/a 必需xcode7以上
2.0 -> 2.5.4 iOS 6 OS X 10.8 n/a n/a 必需xcode5 以上
1.x iOS 5 Mac OS X 10.7 n/a n/a n/a
0.10.x iOS 4 Mac OS X 10.6 n/a n/a n/a

架構(gòu)

NSURLSession
  • AFURLSessionManager
  • AFHTTPSessionManager
Serialization
  • <AFURLRequestSerialization>
  • AFHTTPRequestSerializer
  • AFJSONRequestSerializer
  • AFPropertyListRequestSerializer
  • <AFURLResponseSerialization>
  • AFHTTPResponseSerializer
  • AFJSONResponseSerializer
  • AFXMLParserResponseSerializer
  • AFXMLDocumentResponseSerializer (Mac OS X)
  • AFPropertyListResponseSerializer
  • AFImageResponseSerializer
  • AFCompoundResponseSerializer
Additional Functionality
  • AFSecurityPolicy
  • AFNetworkReachabilityManager

用法

AFURLSessionManager

AFURLSessionManager創(chuàng)建并管理一個(gè)NSURLSession對象亏拉,基于一個(gè)指定的NSURLSessionConfiguration對象扣蜻,這個(gè)對象要遵循以下協(xié)議<NSURLSessionTaskDelegate>, <NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>, and <NSURLSessionDelegate>.

創(chuàng)建下載任務(wù)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
創(chuàng)建上傳任務(wù)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Success: %@ %@", response, responseObject);
    }
}];
[uploadTask resume];
創(chuàng)建一個(gè)復(fù)雜請求的上傳任務(wù)逆巍,附帶進(jìn)度條
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
    } error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      //Update the progress view
                      [progressView setProgress:uploadProgress.fractionCompleted];
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                  }
              }];

[uploadTask resume];
創(chuàng)建一個(gè)數(shù)據(jù)任務(wù)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
[dataTask resume];

請求序列化

請求序列化從請求一個(gè)URL字符串開始創(chuàng)建,編碼參數(shù)弱贼,查找字符串或者HTTP的body

NSString *URLString = @"http://example.com";
NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
查找字符參數(shù)編碼
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
URL表單參數(shù)編碼
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];

POST http://example.com/
Content-Type: application/x-www-form-urlencoded
foo=bar&baz[]=1&baz[]=2&baz[]=3

JSON參數(shù)編碼
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];

POST http://example.com/
Content-Type: application/json
{"foo": "bar", "baz": [1,2,3]}

監(jiān)測網(wǎng)絡(luò)管理器

AFNetworkReachabilityManager 監(jiān)測域名以及IP地址的暢通性蒸苇,對于WWAN以及WiFi的網(wǎng)絡(luò)接口都管用。

  • 不要用網(wǎng)絡(luò)可用來確定原始請求是否應(yīng)該被發(fā)送吮旅。
  • 你可以用網(wǎng)絡(luò)可用決定當(dāng)一個(gè)請求是否應(yīng)該自動重試溪烤。
  • 網(wǎng)絡(luò)可用性是一個(gè)有用的工具來決定一個(gè)請求可能會失敗的原因。
分享網(wǎng)絡(luò)可用性
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

安全策略

AFSecurityPolicy評估對固定X服務(wù)器信任庇勃。509證書和公鑰安全連接檬嘀。將固定的SSL證書添加到您的應(yīng)用程序可以幫助防止中間人攻擊和其他漏洞≡鹑拢或財(cái)務(wù)信息處理敏感的客戶數(shù)據(jù)的應(yīng)用程序被強(qiáng)烈鼓勵所有通信路由在一個(gè)HTTPS和SSL連接固定配置和啟用鸳兽。

允許不合法的SSL證書
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production

單元測試

AFNetworking包括一套單元測試中的測試子目錄。這些測試可以在平臺上運(yùn)行簡單地執(zhí)行測試活動你想測試框架罕拂。

工作人員

AFNetworking 是由Alamofire Software Foundation 所有并維護(hù)
AFNetworking 最初是由Scott Raymond和 Mattt Thompson在Gowalla for iPhone 的開發(fā)中創(chuàng)建的
AFNetworking的logo是由Alan Defibaugh設(shè)計(jì)的
最后 謝謝所有為AFNetworking做出貢獻(xiàn)的人

安全信息披露

如果你相信你已經(jīng)確定了一個(gè)與AFNetworking安全漏洞,你應(yīng)該報(bào)告盡快通過電子郵件至security@alamofire.org揍异。請不要發(fā)布到一個(gè)公共問題跟蹤器。

證書

AFNetworking MIT許可下發(fā)布爆班。有關(guān)詳細(xì)信息,請參閱許可證衷掷。

PS:翻譯完感覺更不像人話了 哈哈
GitHub原文網(wǎng)址:https://github.com/AFNetworking/AFNetworking

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柿菩,隨后出現(xiàn)的幾起案子戚嗅,更是在濱河造成了極大的恐慌,老刑警劉巖枢舶,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦胞,死亡現(xiàn)場離奇詭異,居然都是意外死亡凉泄,警方通過查閱死者的電腦和手機(jī)躏尉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旧困,“玉大人醇份,你說我怎么就攤上這事『鹁撸” “怎么了僚纷?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拗盒。 經(jīng)常有香客問我怖竭,道長,這世上最難降的妖魔是什么陡蝇? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任痊臭,我火速辦了婚禮哮肚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘广匙。我一直安慰自己允趟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布鸦致。 她就那樣靜靜地躺著潮剪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪分唾。 梳的紋絲不亂的頭發(fā)上抗碰,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音绽乔,去河邊找鬼弧蝇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛折砸,可吹牛的內(nèi)容都是我干的看疗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼睦授,長吁一口氣:“原來是場噩夢啊……” “哼鹃觉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睹逃,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祷肯,沒想到半個(gè)月后沉填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佑笋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年翼闹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋纬。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猎荠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜀备,到底是詐尸還是另有隱情关摇,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布碾阁,位于F島的核電站输虱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脂凶。R本人自食惡果不足惜宪睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一愁茁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亭病,春花似錦鹅很、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胸蛛,卻和暖如春污茵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葬项。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工泞当, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人民珍。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓襟士,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嚷量。 傳聞我的和親對象是個(gè)殘疾皇子陋桂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容