iOS 3.0
一、點(diǎn)對(duì)點(diǎn)藍(lán)牙連接
二、遠(yuǎn)程瀏覽內(nèi)容
三、連接周邊產(chǎn)品(硬件)
四、其它應(yīng)用可以使用maps
五、定位軟件
六、推送功能
七、網(wǎng)絡(luò)電話
八、錄音
九、播放音樂
十、增強(qiáng)了 App Store
ios 4.0
一、點(diǎn)對(duì)點(diǎn)藍(lán)牙連接
二、遠(yuǎn)程瀏覽內(nèi)容
三、連接周邊產(chǎn)品(硬件)
四、其它應(yīng)用可以使用maps
五、定位軟件
六、推送功能
七、網(wǎng)絡(luò)電話(voip)
八、錄音
九、播放音樂
十、增強(qiáng)了app store
iOS 5.0
一、iCloud
iCloud存儲(chǔ)API使程序可以將用戶文檔和關(guān)鍵數(shù)據(jù)存儲(chǔ)到iCloud中,并同時(shí)將改動(dòng)推送到用戶所有的計(jì)算機(jī)和設(shè)備上這一切都是自動(dòng)的
二、通知中心
三、新聞綜述,使用 News standkit
四、自動(dòng)引用計(jì)數(shù)(ARC)
五、深度集成twitter
六、storyboard
七、AirPlay
作為在iOS 4.2引入的新功能,airPlay能夠?qū)⒁曨l,音頻和照片作為媒體流輸入到Apple TV上。在iOS 5中,airPlay可以將iPad 2上的任何內(nèi)容通過Apple TV無線鏡像到HDTV上。您的應(yīng)用程序會(huì)自動(dòng)支持這一功能。您也可以調(diào)用額外的API從而在每個(gè)HDTV和iPad2屏幕上顯示不同的內(nèi)容。在iOS 5中使用了AV Foundation框架的應(yīng)用程序可以通過AirPlay將視頻和音頻內(nèi)容轉(zhuǎn)成媒體流,并且AirPlay現(xiàn)在支持通過HTTP live媒體流發(fā)布加密的媒體流內(nèi)容。
八、core image
您可以使用core image在鏡頭和編輯圖片的應(yīng)用程序中創(chuàng)建令人驚嘆的效果。core image是一個(gè)硬件加速的框架,使您可以放松地增強(qiáng)照片和視頻。core image提供了一些內(nèi)置的濾鏡,例如顏色效果,變形和變換等。同時(shí)它還包括一些高級(jí)功能,如自動(dòng)增強(qiáng),消除紅眼,臉部識(shí)別等。
九、Game Center
游戲中心在iOS 5中支持多人游戲中的回合制游戲。在回合制游戲中,玩家可以在方便的時(shí)候才做出游戲動(dòng)作,而游戲中會(huì)管理每一個(gè)回合。游戲中心將自動(dòng)通過通知中心發(fā)送一個(gè)推送通知到下一個(gè)游戲玩家。其他為開發(fā)者提供的功能還包括:添加玩家到現(xiàn)有的多人游戲中,顯示成就通知,每個(gè)排行榜支持不同的圖標(biāo)。
十、OpenGL ES,加了GLKit
十一、IMessage
十二、新的工具
十三、無需pc
十四、模擬位置信息
iOS 6.0
一、地圖拋棄了google map,使用了自家地圖
二、深度社交網(wǎng)絡(luò)集成iOS 5時(shí),深度集成了twitter,iOS6集成了facebook,sina weibo
三、Passbook和passkit
四、gamecenter主要聯(lián)機(jī)對(duì)戰(zhàn)
五、提醒開放了向reminder里添加?xùn)|西和從讀取的API(event kit)和標(biāo)準(zhǔn)用戶界面
六、新的iap,能直接從itunes store購(gòu)買音樂
七、collection views瀑布流布局
八、自動(dòng)布局
iOS 7.0
一、UIKIT全新扁化風(fēng)格
二、UIKIT力學(xué)模型,增加UIDynamicltem委托
三、游戲支持加了自己的精靈系統(tǒng)SpriteKit 2d游戲引擎,xcode還提供創(chuàng)建粒子系統(tǒng)和貼圖工具
四、支持專門游戲硬件
五、點(diǎn)對(duì)點(diǎn)對(duì)接:用來發(fā)現(xiàn)和連接附近的設(shè)備并傳輸數(shù),而這一切不需要有網(wǎng)絡(luò)連接,(所以iOS7的airdrop需要iPhone5或者最新iPad/iPad mini才支持,因?yàn)檫€依賴硬件)
六、store kit:IAP方面采用了新的訂單系統(tǒng),減少內(nèi)購(gòu)買現(xiàn)流程和內(nèi)購(gòu)破解。實(shí)現(xiàn)對(duì)訂單的本機(jī)驗(yàn)證。
七、Inter-APP Audio應(yīng)用間的音頻,同一設(shè)置不同應(yīng)用之間發(fā)送midi指令和傳送音頻能力,比如在一個(gè)應(yīng)用中使用AudioUnit錄音,然后在另一個(gè)應(yīng)用中加以處理。
八、地圖MapKit
MKMapCamara:可以將一個(gè)MKMapCamara對(duì)象加到地圖上,在指明位置,角度和方向后將呈現(xiàn)3D效果
MKDirections
MKGeodesicPolyline
MKMapSnapshotter
改變了overlay對(duì)象的渲染方式
九、多任務(wù)
iOS7之前
后臺(tái)完成某些費(fèi)時(shí)間的特定任務(wù)
后臺(tái)播放音樂
位置服務(wù)
IP電話
newsstand
iOS7
改變了后臺(tái)任務(wù)的運(yùn)行方式除網(wǎng)絡(luò)外的后臺(tái)任務(wù),被分布到不同的應(yīng)用喚醒系統(tǒng)時(shí)執(zhí)行。
網(wǎng)絡(luò)傳輸?shù)膽?yīng)用建議使用NSURLSession創(chuàng)建后臺(tái)的session并進(jìn)行網(wǎng)絡(luò)傳輸。
增加了后臺(tái)獲取background Fetch
應(yīng)用打開前有機(jī)會(huì)執(zhí)行代碼來獲取數(shù)據(jù),刷新UI,省去了網(wǎng)絡(luò)加載過程。
增加了推送喚醒(靜默推送,Slient Remove Notifications)。
增加了后臺(tái)傳輸(Background Transfer service)。
iOS 8.0
一、iOS開發(fā)界面的統(tǒng)一,Size Classes的引入和新的Presentation系統(tǒng)。
二、IB的重大改進(jìn),可提高開發(fā)效率,節(jié)省開發(fā)時(shí)間
三、Cloud Kit的框架的推出
四、Health Kit 和 Home Kit的引入
五、Scene Kit的引入
六、本地通知也需要用戶許可
七、CoreLocation室內(nèi)定位
八、Touch ID API簡(jiǎn)化了PayPal或者支付寶這樣的第三方支付和確認(rèn)的流程的
九、新增加了Photo.framework框架
iOS9新特性
一、 iOS9系統(tǒng)發(fā)送的網(wǎng)絡(luò)請(qǐng)求將統(tǒng)一使用HTTPS,將不再默認(rèn)使用HTTP等不安全的網(wǎng)絡(luò)協(xié)議,而默認(rèn)采用TLS 1.2.服務(wù)器因此需要更新,以解析相關(guān)數(shù)據(jù)。如不更新,可通過在info.plist中聲明,倒退回不安全的網(wǎng)絡(luò)請(qǐng)求。
二、 將允許出現(xiàn)這種場(chǎng)景:同一app中多個(gè)location manager:一些只能在前臺(tái)定位,另一些可在后臺(tái)定位。
三、bitcode的理解應(yīng)該是把程序編譯成的一種過渡代碼,然后蘋果再把這個(gè)過渡代碼編譯成可執(zhí)行的程序。bitcode也允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件,有類似于App瘦身的思想。
四、stackView
五、Multasking:多任務(wù)特性,三種形式
六、臨時(shí)調(diào)出的滑動(dòng)覆蓋:Slider Over
七、視頻播放的畫中畫模式(Picture in Picture)(AVPlayerViewController默認(rèn)支持。MPMoviePlayerViewController被deprecated掉了,不支持)。
八、iPad真正同時(shí)使用兩個(gè)app
九、UI Test:iOS9.0之前加入異步代碼測(cè)試和性能測(cè)試,可以說xcode自帶的測(cè)試框架已經(jīng)能滿足絕大部分單元測(cè)試的需求了,但是這并不夠,因?yàn)殚_發(fā)一個(gè)iOS app從來都是很注重UI和用戶體驗(yàn)的,之前UI測(cè)試使用KIF,Automating,ios 9.0的xcode給出了自帶的UITest的一系列工具,和大多數(shù)UI測(cè)試工具類似,UI使用Accessbility標(biāo)記來確定view,但因?yàn)槭茿pple自家的東西,可以自動(dòng)記錄操作流程,所以只要書寫最后的驗(yàn)證部分就好了,比其他UI測(cè)試工具方便多了。
十、Swift2
十一、APP Thinning:app為了后向兼容,都同時(shí)包含了32bit和64bit,在圖片資源2X和3X的一應(yīng)俱全,下載的時(shí)候只需要當(dāng)前機(jī)型對(duì)應(yīng)的一套資源,但是卻要全部打包下載,現(xiàn)在只需要升級(jí)iOS9,就可以省很多流量。
十二、3D touch
十三、地圖顯示實(shí)時(shí)的交通狀況
十四、人工智能siri更加智能,幾個(gè)大城市的地鐵及火車站入口都有詳細(xì)的標(biāo)識(shí)
十五、手機(jī)電池的低功能設(shè)置
十六、Spootlight,你的設(shè)備會(huì)向推薦最近通話過的聯(lián)系人,使用過的APP以及你可能感興趣的去處,信息呈現(xiàn)更精彩
iOS10新特性
一、SiriKit在iOS10里面開發(fā)者可以使用Siri SDK,這可能是iOS10最重要的新SDK之一。從此開發(fā)者可以使用原生API提供語音搜索,語音轉(zhuǎn)文字消息甚至更多常見語音功能。
二、Proactive Suggestions貌似是一個(gè)和CoreSpotlight有整合的使用建議的東西。
三、Message App Extension在iOS10里面開發(fā)者可以給Message.app提供兩種App Extension,分別是可以提供一個(gè)表情包,和一個(gè)自定義的界面,用于表情搜索等。
四、User Notifications這個(gè)API讓你可以處理本地或遠(yuǎn)程的用戶通知,并且可以基于某個(gè)條件,例如時(shí)間或者地理位置。這個(gè)異常強(qiáng)大,好像可以在通知里包含圖片和視頻了,褒姒可以攔截并替換自己app發(fā)下來payload。
五、Speech Recognition見聞知意,語音識(shí)別API,可以把音頻流實(shí)時(shí)的轉(zhuǎn)換為文本。雖說早期版本已經(jīng)有了TTS語音轉(zhuǎn)文字,但畢竟Siri語義識(shí)別的加入讓機(jī)器對(duì)自然語義的把握更精準(zhǔn),詳見Speech.framework
六、App Search Enhancements對(duì)CoreSpotlight的增強(qiáng),其中我比較感興趣的是Visualization of validation results。
七、Widget Enhancements為了配合iOS10鎖屏下面Widget的體驗(yàn),蘋果提供了widgetPrimaryVibrancyEffect和widgetSecondaryVibrancyEffect用于定制化Widget的界面。
八、CallKit框架,VolP應(yīng)用程序集成與iPhone的通話界面,給用戶一個(gè)很棒的體驗(yàn),鎖屏后VolP網(wǎng)絡(luò)電話可以直接用iPhone系統(tǒng)UI接聽了。
九、APP Extensions其實(shí)上面也有提到,iOS10最重要的開發(fā)特點(diǎn)就是允許第三方應(yīng)用對(duì)自帶基礎(chǔ)APP的拓展關(guān)聯(lián),全新7種App Extension:
Call Directory(VolP回調(diào))
intents(接Siri、Apple map等服務(wù))
intents UI(接Siri、Apple map等服務(wù)的自定義界面)
Messages(iMessage擴(kuò)展)
Notification Content(內(nèi)容通知)
Notification Service(服務(wù)通知)
StickerPack(iMessage表情包)
十、Custom Keyboard對(duì)第三方鍵盤的改進(jìn),通過handleInputModeListFromView:withEvent:可以彈出系統(tǒng)鍵盤列表。同時(shí)使用documentInputMode可以檢測(cè)輸入上下文中的語音,你可以對(duì)輸入方式進(jìn)行一些類似于對(duì)齊方式的調(diào)整。
另外需要注意的是,和以往歷代iOS版本推出一樣,新陳代謝,有新SDK,新API的開放,也會(huì)有舊的API被遺棄,所以好好檢查你的項(xiàng)目,使用了被遺棄的API要盡快修改,以免不兼容!還有個(gè)要注意的問題iOS10對(duì)隱私權(quán)限的管理更為嚴(yán)格,比如訪問攝像頭,麥克風(fēng)等硬件,都需要提前請(qǐng)求應(yīng)用權(quán)限,允許后才可以使用,或者現(xiàn)在要提前聲明,雖然以往要求不嚴(yán)格。
iOS11新特性
一、UIKit Bars的改版
在瀏覽功能上的大標(biāo)題視圖(向上滑動(dòng)后標(biāo)題會(huì)回到原來的UI效果),橫屏狀態(tài)下tab上的文字和icon會(huì)變?yōu)樽笥遗帕小?/p>
二、iOS11導(dǎo)航欄
設(shè)置導(dǎo)航欄大標(biāo)題:navigationBar.preferslargeTitles,顯示的時(shí)機(jī)可以用navigationItem.largeTitleDisplayMode設(shè)置枚舉值。
設(shè)置導(dǎo)航欄搜索控制器
searchController:self.navigationItem.searchController=searchController
三、上面設(shè)置titleView為customView時(shí)出現(xiàn)寬度縮小的問題(這個(gè)網(wǎng)上提到了這個(gè)問題,但是我自定義代碼并沒有出現(xiàn)這個(gè)情況)
四、調(diào)整相冊(cè)權(quán)限的key
NSPhotoLibraryUsageDescription改為NSPhotoLibraryAddUsageDescription.
五、近場(chǎng)通訊
首先也要在info.plist配置NSCReaderUsageDescription
六、無線配備
七、棄用API,scrollView和tableview的改變
iOS11棄用了automaticallyAdjustsScrollViewInsets屬性,新增contentInsetAdjustmentBehavior來替代它。這可能使得一些刷新出現(xiàn)頭部錯(cuò)亂。contentInsetAdjustmentBehavior其實(shí)是一個(gè)枚舉值。用來管理adjustedContentInset
automatic和scrollableAxes一樣,scrollView會(huì)自動(dòng)計(jì)算和適應(yīng)頂部和底部的內(nèi)邊距并且在scrollView不可滾動(dòng)時(shí),也會(huì)設(shè)置內(nèi)邊距。
scrollableAxes自動(dòng)計(jì)算內(nèi)邊距.
never不計(jì)算內(nèi)邊距
always根據(jù)safeAreaInsets計(jì)算內(nèi)邊距
我們這里要設(shè)置為never,所以我們的OC代碼可以這樣寫:
聲明tableView的位置添加如下代碼
if(@available(ios11.0,*)){self.tableView.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;self.tableView.contentInset=UIEdgeInsetsMake(0,0,0,0);self.tableView.scrollIndicatorInsets=_tableView.contentInset;}
在iOS8引入self-Sizeing之后,我們可以通過實(shí)現(xiàn)estimatedRowHeight相關(guān)的屬性來展示動(dòng)態(tài)的內(nèi)容。self-sizing在iOS11下是默認(rèn)開啟的,Headers,Footers,and cells都默認(rèn)開啟self-sizing,所有estimated高度默認(rèn)值從iOS11之前的0改變?yōu)閁ITableViewAutomaticDimension.
如果目前項(xiàng)目中沒有使用estimateRowHeight屬性,在iOS11的環(huán)境下就要注意了,因?yàn)殚_啟self-sizing之后,tableview是使用estimateRowHeight屬性的,就會(huì)可能回使代理方法設(shè)置高度失效。
通過以下方法進(jìn)行關(guān)閉:Table Views:separatorInset擴(kuò)展
iOS7引入separatorInset屬性,用以設(shè)置cell的分割線邊距,在iOS11中對(duì)其進(jìn)行了擴(kuò)展??梢酝ㄟ^新增的UITableViewSeparatorInsetReference枚舉類型的separatorInsetReference屬性來設(shè)置separatorInset屬性的參照值。
typedefNS_ENUM(NSInteger,UITableViewSeparatorInsetReference){UITableViewSeparatorInsetFromCellEdges,//默認(rèn)值,表示separatorInset是從cell的邊緣的偏移量UITableViewSeparatorInsetFromAutomaticInsets//表示separatorInset屬性值是從一個(gè)insets的偏移量)
八、拖放
九、文件管理
十、tableview右滑操作
增加了兩個(gè)代理方法來取代原來的代理方法(tableView:editActionsForRowAtIndexPath:)
//Swipe actions//These methods supersede -editActionsForRowAtIndexPath:if implemented -(nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPah -(nullableUISwipeActionsConfigurationsConfiguration*)tableView:(UITableView*)tableview trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPath
創(chuàng)建UIContextualAction對(duì)象時(shí),UIContextualActionStyle有兩種類型,如果是置頂,已讀等按鈕就使用UIContextualActionStyleNormal類型,delete操作按鈕可使用UIContextualActionStyleDestructive類型,當(dāng)使用該類型時(shí),如果是右滑操作,一直向右滑動(dòng)某個(gè)cell,會(huì)直接執(zhí)行刪除操作,不用再點(diǎn)擊刪除按鈕。
十一、Safe Area
以前做懸?。ㄖЦ?,頭部標(biāo)題等),系統(tǒng)為我們提供了viewController的topLayoutGuide和bottomLayoutGuide方法進(jìn)行約束,但是在iOS11中被廢棄了,引用了一個(gè)新的概念。safeArea,它提供兩種方式:safeAreaInsets或safeAreaLayoutGuide來提供給你safeArea的參照值,即insets或者layout guide.同時(shí)如果改變insets時(shí)會(huì)獲得兩個(gè)回調(diào)UIView.safeAreaInsetsDidChange() UIViewController.viewSafeAreaInsetsDidChange()。這個(gè)iOS的safe Area涉及到的第三方庫有mansory何IQkeyboard所以可能這兩個(gè)庫也會(huì)進(jìn)行一些適配。
十二、UIToolbar and UINavigationBar-layout
在iOS11中,當(dāng)蘋果進(jìn)行所有這些新特性時(shí),也進(jìn)行了其他的優(yōu)化,針對(duì)UIToolbar和UINavigationBar做了新的自動(dòng)布局?jǐn)U展支持,自定義的bar button items,自定義的title都可以通過layout來表示尺寸。需要注意的是,你的constraints需要在view內(nèi)部設(shè)置,所以如果你有一個(gè)自定義的標(biāo)題試圖,你需要確保任何約束只依賴于標(biāo)題試圖及其任何子試圖。當(dāng)你使用自動(dòng)布局,系統(tǒng)假設(shè)你知道你在做什么。
十三、管理margins和insets
基于約束的Auto Layout,使我們搭建能夠動(dòng)態(tài)響應(yīng)內(nèi)部和外部變化的用戶界面。Auto Layout為每一個(gè)view都定義了margin。margin指的是控件顯示內(nèi)容部分的邊緣和控件邊緣的距離??梢杂胠ayoutMargins或者layoutMarginsGuide屬性獲得view的margin,margin是試圖內(nèi)部的一部分。layoutMargins允許獲取或者設(shè)置UIEdgeInsets結(jié)構(gòu)的margin.layoutMarginsGuide則獲取到只讀的UILayoutGuide對(duì)象。
在iOS11新增了一個(gè)屬性:directional layout margins,該屬性是NSDeirectionalEdgeInsets結(jié)構(gòu)體類型的屬性:
typedef struct NSDirectionalEdgeInsets{CGFloat top, leading, bottom, trailing;}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));
layoutMargins是UIEdgeInsets結(jié)構(gòu)體類型的屬性:
typedef struct UIEdgeInsets{CGFloat top, left, bottom,right;}UIEdgeInsets;
從上面兩種結(jié)構(gòu)體的對(duì)比可以看出,NSDirectionalEdgeInsets屬性用leading和traling取代了之前的left和right。
directional layout margins屬性的說明如下:
directionalLayoutMargins.leading is used on the left when the user interface derection is LTR and on the right for RTL.
Vice versa for directionalLayoutMargins.trailing.
例如:當(dāng)你設(shè)置了trailing=30;當(dāng)你一個(gè)right to left語言下trailing的值會(huì)被設(shè)置在view的左邊,可以通過layout margin的left屬性讀出該值。
如下圖所示:
還有其他一些更新。自從引入layout margins,當(dāng)將一個(gè)view添加到viewController時(shí),viewControler會(huì)修復(fù)view的layoutMargins為UIKit定義的一個(gè)值,這些調(diào)整對(duì)外是封閉的。從iOS11開始,這些不再是一個(gè)固定的值,它們實(shí)際是最小值,你可以改變你的view的layoutMargins為任意一個(gè)更大的值。而且,viewController新增了一個(gè)屬性:viewRespectsSystemMinimumLayoutMargins,如果你設(shè)置該屬性為“false”,你就可以改變你的layout margins為任意你想設(shè)置的值,包括0.