針對蘋果6月1號起,要求上傳的應(yīng)用需要適配IPv6-only,如果我們的工程里面不是自定義的網(wǎng)絡(luò)層,只需要更新三方SDk就可以,例如AFNetworking.
因為蘋果對于底層NSURLConnection這個API做了申明,這個是不支持IPv6的,而且Xcode 7中,NSURLConnection的API已經(jīng)正式被蘋果棄用.從而去支持NSURLSession和CFNetwork.而AFNetworking 3.0版本已經(jīng)全部適配成NSURLSession.
所以對于我們使用三方SDK的人來說,就是去更新最新的庫,但是跟新之前一定要看清楚這些三方庫的安轉(zhuǎn)要求,
當(dāng)你使用coocapods集成AFNetworking 3.0的時候你會發(fā)現(xiàn)報錯
首先你應(yīng)該先更新你的cocoapods
$ sudo gem update --system // 先更新gem
$ sudo gem install cocoapods // 安裝cocoapods
$ pod setup
// 最好保證你的ruby源是淘寶的,如果是默認(rèn)國外的,你猜會怎么樣?
// 更換ruby源
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l //查看ruby地址
運行setup的時候,會有一點慢,請內(nèi)心等待
接下來就是正常的pod AFNetworking 3.0
但是你會發(fā)現(xiàn)老是報錯,無法正常安裝
即使我把Qiniu刪掉,依然報錯,這里不上圖了,直接說解決方法,
把你podfile文件里面關(guān)于用到AFNetworking的,和Qiniu的pod刪掉,然后pod install(這里是因為我使用 pod update 不管用)一下,然后重新添加
pod 'AFNetworking', '~> 3.1.0'
pod install
接下來七牛怎么辦呢,我直接安轉(zhuǎn)還是報錯
無法理解,只能去七牛的github上面找找原因,原來七牛單獨為AFNetworking 3.0 開了一個分支,然后找到pod的方法
pod "Qiniu", :git => 'https://github.com/qiniu/objc-sdk.git', :branch => 'AFNetworking-3.x’
pod install
對于不是使用cocoapos管理三方庫的同學(xué),附上下載地址
https://github.com/qiniu/objc-sdk/tree/AFNetworking-3.x
關(guān)于SDWebImage的話,暫時還沒有支持IPv6,不過到4.0的話應(yīng)該會支持,就跟中國要普及IPv6,不知道要到猴年馬月!!!
由于昨晚時間太緊,今天搭了個IPv6的環(huán)境,測試了一下AFN2.0是否支持IPv6,發(fā)現(xiàn)正常的請求都是可以的,也就是說,暫時可以不升級到AFN3.0,因為3.0之后有的網(wǎng)站加了SSL驗證,如果你的app里面有抓取別人部分?jǐn)?shù)據(jù)的,會有問題. 如果是自己的服務(wù)器數(shù)據(jù),那么問題不大.
但是盡量把請求地址,改成地址綁定的域名,這樣好一點.
雖然現(xiàn)在蘋果還支持NSURLConnection,但是轉(zhuǎn)換應(yīng)該會很快的,只是不明白蘋果是對于NSURLSession和CFNetwork做了NSURLConnection的兼容,還是別的原因.不過之后盡量是改成同時支持iPv4和IPv6的!
AFN3.0之后,暫時不計劃支持同步請求,
NSParameterAssert(manager); // prevent infinite loop
dispatch_async(dispatch_get_global_queue(0, 0), ^{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSLog(@"AAA");
[manager GET:self.paramsModel.apiUrl parameters:self.paramsModel.paramsDic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self responseResult:responseObject successBlock:successBlock];
NSLog(@"BBB");
dispatch_semaphore_signal(semaphore);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self responsResultError:error failure:failureBlock];
NSLog(@"BBB");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"CCC");
});
后續(xù)有別的東西,會補充
關(guān)于測試的話,好多人都已經(jīng)寫過了,你們可以直接搜索.
若有用,請點喜歡!
若轉(zhuǎn)載,請注明出處!