iOS 3.0
一乔宿、點對點藍(lán)牙連接
二、遠(yuǎn)程瀏覽內(nèi)容
三唯蝶、連接周邊產(chǎn)品(硬件)
四九秀、其它應(yīng)用可以使用maps
五、定位軟件
六粘我、推送功能
七鼓蜒、網(wǎng)絡(luò)電話
八、錄音
九征字、播放音樂
十都弹、增強(qiáng)了 App Store
ios 4.0
一、點對點藍(lán)牙連接
二匙姜、遠(yuǎn)程瀏覽內(nèi)容
三畅厢、連接周邊產(chǎn)品(硬件)
四、其它應(yīng)用可以使用maps
五氮昧、定位軟件
六框杜、推送功能
七、網(wǎng)絡(luò)電話(voip)
八袖肥、錄音
九咪辱、播放音樂
十、增強(qiáng)了app store
iOS 5.0
一椎组、iCloud
iCloud存儲API使程序可以將用戶文檔和關(guān)鍵數(shù)據(jù)存儲到iCloud中油狂,并同時將改動推送到用戶所有的計算機(jī)和設(shè)備上這一切都是自動的
二、通知中心
三庐杨、新聞綜述选调,使用 News standkit
四、自動引用計數(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)用程序會自動支持這一功能。您也可以調(diào)用額外的API從而在每個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是一個硬件加速的框架聂受,使您可以放松地增強(qiáng)照片和視頻。core image提供了一些內(nèi)置的濾鏡烤镐,例如顏色效果蛋济,變形和變換等。同時它還包括一些高級功能炮叶,如自動增強(qiáng)碗旅,消除紅眼,臉部識別等镜悉。
九祟辟、Game Center
游戲中心在iOS 5中支持多人游戲中的回合制游戲。在回合制游戲中侣肄,玩家可以在方便的時候才做出游戲動作川尖,而游戲中會管理每一個回合。游戲中心將自動通過通知中心發(fā)送一個推送通知到下一個游戲玩家茫孔。其他為開發(fā)者提供的功能還包括:添加玩家到現(xiàn)有的多人游戲中,顯示成就通知被芳,每個排行榜支持不同的圖標(biāo)缰贝。
十、OpenGL ES畔濒,加了GLKit
十一剩晴、IMessage
十二、新的工具
十三侵状、無需pc
十四赞弥、模擬位置信息
iOS 6.0
一、地圖拋棄了google map趣兄,使用了自家地圖
二绽左、深度社交網(wǎng)絡(luò)集成iOS 5時,深度集成了twitter艇潭,iOS6集成了facebook拼窥,sina weibo
三、Passbook和passkit
四蹋凝、gamecenter主要聯(lián)機(jī)對戰(zhàn)
五鲁纠、提醒開放了向reminder里添加?xùn)|西和從讀取的API(event kit)和標(biāo)準(zhǔn)用戶界面
六、新的iap,能直接從itunes store購買音樂
七鳍寂、collection views瀑布流布局
八改含、自動布局
iOS 7.0
一、UIKIT全新扁化風(fēng)格
二迄汛、UIKIT力學(xué)模型捍壤,增加UIDynamicltem委托
三骤视、游戲支持加了自己的精靈系統(tǒng)SpriteKit 2d游戲引擎,xcode還提供創(chuàng)建粒子系統(tǒng)和貼圖工具
四白群、支持專門游戲硬件
五尚胞、點對點對接:用來發(fā)現(xiàn)和連接附近的設(shè)備并傳輸數(shù),而這一切不需要有網(wǎng)絡(luò)連接帜慢,(所以iOS7的airdrop需要iPhone5或者最新iPad/iPad mini才支持笼裳,因為還依賴硬件)
六、store kit:IAP方面采用了新的訂單系統(tǒng)粱玲,減少內(nèi)購買現(xiàn)流程和內(nèi)購破解躬柬。實現(xiàn)對訂單的本機(jī)驗證。
七抽减、Inter-APP Audio應(yīng)用間的音頻允青,同一設(shè)置不同應(yīng)用之間發(fā)送midi指令和傳送音頻能力,比如在一個應(yīng)用中使用AudioUnit錄音卵沉,然后在另一個應(yīng)用中加以處理颠锉。
八、地圖MapKit
MKMapCamara:可以將一個MKMapCamara對象加到地圖上史汗,在指明位置琼掠,角度和方向后將呈現(xiàn)3D效果
MKDirections
MKGeodesicPolyline
MKMapSnapshotter
改變了overlay對象的渲染方式
九、多任務(wù)
iOS7之前
后臺完成某些費時間的特定任務(wù)
后臺播放音樂
位置服務(wù)
IP電話
newsstand
iOS7
改變了后臺任務(wù)的運行方式除網(wǎng)絡(luò)外的后臺任務(wù)停撞,被分布到不同的應(yīng)用喚醒系統(tǒng)時執(zhí)行瓷蛙。
網(wǎng)絡(luò)傳輸?shù)膽?yīng)用建議使用NSURLSession創(chuàng)建后臺的session并進(jìn)行網(wǎng)絡(luò)傳輸。
增加了后臺獲取background Fetch
應(yīng)用打開前有機(jī)會執(zhí)行代碼來獲取數(shù)據(jù)戈毒,刷新UI艰猬,省去了網(wǎng)絡(luò)加載過程。
增加了推送喚醒(靜默推送埋市,Slient Remove Notifications)冠桃。
增加了后臺傳輸(Background Transfer service)。
iOS 8.0
一恐疲、iOS開發(fā)界面的統(tǒng)一腊满,Size Classes的引入和新的Presentation系統(tǒng)。
二培己、IB的重大改進(jìn)碳蛋,可提高開發(fā)效率,節(jié)省開發(fā)時間
三省咨、Cloud Kit的框架的推出
四肃弟、Health Kit 和 Home Kit的引入
五、Scene Kit的引入
六、本地通知也需要用戶許可
七笤受、CoreLocation室內(nèi)定位
八穷缤、Touch ID API簡化了PayPal或者支付寶這樣的第三方支付和確認(rèn)的流程的
九、新增加了Photo.framework框架
iOS9新特性
一箩兽、 iOS9系統(tǒng)發(fā)送的網(wǎng)絡(luò)請求將統(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ò)請求部蛇。
二、 將允許出現(xiàn)這種場景:同一app中多個location manager:一些只能在前臺定位咐蝇,另一些可在后臺定位涯鲁。
三、bitcode的理解應(yīng)該是把程序編譯成的一種過渡代碼有序,然后蘋果再把這個過渡代碼編譯成可執(zhí)行的程序抹腿。bitcode也允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件,有類似于App瘦身的思想旭寿。
四幢踏、stackView
五、Multasking:多任務(wù)特性许师,三種形式
六、臨時調(diào)出的滑動覆蓋:Slider Over
七僚匆、視頻播放的畫中畫模式(Picture in Picture)(AVPlayerViewController默認(rèn)支持微渠。MPMoviePlayerViewController被deprecated掉了,不支持)咧擂。
八逞盆、iPad真正同時使用兩個app
九、UI Test:iOS9.0之前加入異步代碼測試和性能測試松申,可以說xcode自帶的測試框架已經(jīng)能滿足絕大部分單元測試的需求了云芦,但是這并不夠,因為開發(fā)一個iOS app從來都是很注重UI和用戶體驗的贸桶,之前UI測試使用KIF舅逸,Automating,ios 9.0的xcode給出了自帶的UITest的一系列工具,和大多數(shù)UI測試工具類似皇筛,UI使用Accessbility標(biāo)記來確定view琉历,但因為是Apple自家的東西,可以自動記錄操作流程,所以只要書寫最后的驗證部分就好了旗笔,比其他UI測試工具方便多了彪置。
十、Swift2
十一蝇恶、APP Thinning:app為了后向兼容拳魁,都同時包含了32bit和64bit,在圖片資源2X和3X的一應(yīng)俱全,下載的時候只需要當(dāng)前機(jī)型對應(yīng)的一套資源撮弧,但是卻要全部打包下載潘懊,現(xiàn)在只需要升級iOS9,就可以省很多流量想虎。
十二卦尊、3D touch
十三、地圖顯示實時的交通狀況
十四舌厨、人工智能siri更加智能岂却,幾個大城市的地鐵及火車站入口都有詳細(xì)的標(biāo)識
十五、手機(jī)電池的低功能設(shè)置
十六裙椭、Spootlight,你的設(shè)備會向推薦最近通話過的聯(lián)系人躏哩,使用過的APP以及你可能感興趣的去處,信息呈現(xiàn)更精彩
iOS10新特性
一揉燃、SiriKit在iOS10里面開發(fā)者可以使用Siri SDK扫尺,這可能是iOS10最重要的新SDK之一。從此開發(fā)者可以使用原生API提供語音搜索炊汤,語音轉(zhuǎn)文字消息甚至更多常見語音功能正驻。
二、Proactive Suggestions貌似是一個和CoreSpotlight有整合的使用建議的東西抢腐。
三姑曙、Message App Extension在iOS10里面開發(fā)者可以給Message.app提供兩種App Extension,分別是可以提供一個表情包,和一個自定義的界面迈倍,用于表情搜索等伤靠。
四、User Notifications這個API讓你可以處理本地或遠(yuǎn)程的用戶通知啼染,并且可以基于某個條件宴合,例如時間或者地理位置。這個異常強(qiáng)大迹鹅,好像可以在通知里包含圖片和視頻了卦洽,褒姒可以攔截并替換自己app發(fā)下來payload。
五斜棚、Speech Recognition見聞知意逐样,語音識別API,可以把音頻流實時的轉(zhuǎn)換為文本。雖說早期版本已經(jīng)有了TTS語音轉(zhuǎn)文字脂新,但畢竟Siri語義識別的加入讓機(jī)器對自然語義的把握更精準(zhǔn)挪捕,詳見Speech.framework
六、App Search Enhancements對CoreSpotlight的增強(qiáng)争便,其中我比較感興趣的是Visualization of validation results级零。
七、Widget Enhancements為了配合iOS10鎖屏下面Widget的體驗滞乙,蘋果提供了widgetPrimaryVibrancyEffect和widgetSecondaryVibrancyEffect用于定制化Widget的界面奏纪。
八、CallKit框架斩启,VolP應(yīng)用程序集成與iPhone的通話界面序调,給用戶一個很棒的體驗,鎖屏后VolP網(wǎng)絡(luò)電話可以直接用iPhone系統(tǒng)UI接聽了兔簇。
九发绢、APP Extensions其實上面也有提到,iOS10最重要的開發(fā)特點就是允許第三方應(yīng)用對自帶基礎(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對第三方鍵盤的改進(jìn)墩朦,通過handleInputModeListFromView:withEvent:可以彈出系統(tǒng)鍵盤列表。同時使用documentInputMode可以檢測輸入上下文中的語音翻擒,你可以對輸入方式進(jìn)行一些類似于對齊方式的調(diào)整氓涣。
另外需要注意的是,和以往歷代iOS版本推出一樣陋气,新陳代謝春哨,有新SDK,新API的開放恩伺,也會有舊的API被遺棄,所以好好檢查你的項目椰拒,使用了被遺棄的API要盡快修改晶渠,以免不兼容!還有個要注意的問題iOS10對隱私權(quán)限的管理更為嚴(yán)格燃观,比如訪問攝像頭褒脯,麥克風(fēng)等硬件,都需要提前請求應(yīng)用權(quán)限缆毁,允許后才可以使用番川,或者現(xiàn)在要提前聲明,雖然以往要求不嚴(yán)格。
iOS11新特性
一颁督、UIKit Bars的改版
在瀏覽功能上的大標(biāo)題視圖(向上滑動后標(biāo)題會回到原來的UI效果)践啄,橫屏狀態(tài)下tab上的文字和icon會變?yōu)樽笥遗帕小?/p>
二、iOS11導(dǎo)航欄
設(shè)置導(dǎo)航欄大標(biāo)題:navigationBar.preferslargeTitles,顯示的時機(jī)可以用navigationItem.largeTitleDisplayMode設(shè)置枚舉值沉御。
設(shè)置導(dǎo)航欄搜索控制器
searchController:self.navigationItem.searchController=searchController
三屿讽、上面設(shè)置titleView為customView時出現(xiàn)寬度縮小的問題(這個網(wǎng)上提到了這個問題,但是我自定義代碼并沒有出現(xiàn)這個情況)
四吠裆、調(diào)整相冊權(quán)限的key
NSPhotoLibraryUsageDescription改為NSPhotoLibraryAddUsageDescription.
五伐谈、近場通訊
首先也要在info.plist配置NSCReaderUsageDescription
六、無線配備
七试疙、棄用API诵棵,scrollView和tableview的改變
iOS11棄用了automaticallyAdjustsScrollViewInsets屬性,新增contentInsetAdjustmentBehavior來替代它祝旷。這可能使得一些刷新出現(xiàn)頭部錯亂履澳。contentInsetAdjustmentBehavior其實是一個枚舉值。用來管理adjustedContentInset
automatic和scrollableAxes一樣缓屠,scrollView會自動計算和適應(yīng)頂部和底部的內(nèi)邊距并且在scrollView不可滾動時奇昙,也會設(shè)置內(nèi)邊距。
scrollableAxes自動計算內(nèi)邊距.
never不計算內(nèi)邊距
always根據(jù)safeAreaInsets計算內(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之后敌完,我們可以通過實現(xiàn)estimatedRowHeight相關(guān)的屬性來展示動態(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.
如果目前項目中沒有使用estimateRowHeight屬性滨溉,在iOS11的環(huán)境下就要注意了什湘,因為開啟self-sizing之后,tableview是使用estimateRowHeight屬性的晦攒,就會可能回使代理方法設(shè)置高度失效闽撤。
通過以下方法進(jìn)行關(guān)閉:Table Views:separatorInset擴(kuò)展
iOS7引入separatorInset屬性,用以設(shè)置cell的分割線邊距脯颜,在iOS11中對其進(jìn)行了擴(kuò)展哟旗。可以通過新增的UITableViewSeparatorInsetReference枚舉類型的separatorInsetReference屬性來設(shè)置separatorInset屬性的參照值栋操。
typedefNS_ENUM(NSInteger,UITableViewSeparatorInsetReference){UITableViewSeparatorInsetFromCellEdges,//默認(rèn)值闸餐,表示separatorInset是從cell的邊緣的偏移量UITableViewSeparatorInsetFromAutomaticInsets//表示separatorInset屬性值是從一個insets的偏移量)
八、拖放
九矾芙、文件管理
十舍沙、tableview右滑操作
增加了兩個代理方法來取代原來的代理方法(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對象時,UIContextualActionStyle有兩種類型剔宪,如果是置頂拂铡,已讀等按鈕就使用UIContextualActionStyleNormal類型壹无,delete操作按鈕可使用UIContextualActionStyleDestructive類型,當(dāng)使用該類型時感帅,如果是右滑操作斗锭,一直向右滑動某個cell,會直接執(zhí)行刪除操作留瞳,不用再點擊刪除按鈕拒迅。
十一、Safe Area
以前做懸杆取(支付璧微,頭部標(biāo)題等),系統(tǒng)為我們提供了viewController的topLayoutGuide和bottomLayoutGuide方法進(jìn)行約束硬梁,但是在iOS11中被廢棄了前硫,引用了一個新的概念。safeArea,它提供兩種方式:safeAreaInsets或safeAreaLayoutGuide來提供給你safeArea的參照值荧止,即insets或者layout guide.同時如果改變insets時會獲得兩個回調(diào)UIView.safeAreaInsetsDidChange() UIViewController.viewSafeAreaInsetsDidChange()屹电。這個iOS的safe Area涉及到的第三方庫有mansory何IQkeyboard所以可能這兩個庫也會進(jìn)行一些適配。
十二跃巡、UIToolbar and UINavigationBar-layout
在iOS11中危号,當(dāng)蘋果進(jìn)行所有這些新特性時,也進(jìn)行了其他的優(yōu)化素邪,針對UIToolbar和UINavigationBar做了新的自動布局?jǐn)U展支持外莲,自定義的bar button items,自定義的title都可以通過layout來表示尺寸。需要注意的是兔朦,你的constraints需要在view內(nèi)部設(shè)置偷线,所以如果你有一個自定義的標(biāo)題試圖,你需要確保任何約束只依賴于標(biāo)題試圖及其任何子試圖沽甥。當(dāng)你使用自動布局声邦,系統(tǒng)假設(shè)你知道你在做什么。
十三摆舟、管理margins和insets
基于約束的Auto Layout亥曹,使我們搭建能夠動態(tài)響應(yīng)內(nèi)部和外部變化的用戶界面。Auto Layout為每一個view都定義了margin恨诱。margin指的是控件顯示內(nèi)容部分的邊緣和控件邊緣的距離媳瞪。可以用layoutMargins或者layoutMarginsGuide屬性獲得view的margin,margin是試圖內(nèi)部的一部分胡野。layoutMargins允許獲取或者設(shè)置UIEdgeInsets結(jié)構(gòu)的margin.layoutMarginsGuide則獲取到只讀的UILayoutGuide對象。
在iOS11新增了一個屬性: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)體的對比可以看出痕鳍,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)你一個right to left語言下trailing的值會被設(shè)置在view的左邊龙巨,可以通過layout margin的left屬性讀出該值。
如下圖所示:
還有其他一些更新熊响。自從引入layout margins,當(dāng)將一個view添加到viewController時旨别,viewControler會修復(fù)view的layoutMargins為UIKit定義的一個值,這些調(diào)整對外是封閉的汗茄。從iOS11開始秸弛,這些不再是一個固定的值,它們實際是最小值洪碳,你可以改變你的view的layoutMargins為任意一個更大的值递览。而且,viewController新增了一個屬性:viewRespectsSystemMinimumLayoutMargins,如果你設(shè)置該屬性為“false”,你就可以改變你的layout margins為任意你想設(shè)置的值瞳腌,包括0.