iOS 5
icloud ?通知中心 ARC ?Stroyboard airplay
iOS 6
自動布局 IAP
iOS 7?
全新扁化風格 力學模型
iOS8
Health Kit 和 Home Kit
iOS9
3Dtouch ? swift ?https?手機電池的低功耗設置
iOS 10
SiriKit ?Widget Enhancements?
iOS不同版本升級的新特性:
iOS5.0
2、iCloud
iCloud存儲API使程序可以將用戶文檔和關鍵數據存儲到iCloud中,并同時將改動推送到用戶所有的計算機和設備上這一切都是自動的
3、通知中心
4、自動引用計數(ARC)
5、Storyboard
6、AirPlay
7、Core Image
8、GameCenter
9、OpenGL ES
iOS6.0
1、地圖 拋棄了googlemap 使用了自家地圖
2、新的IAP(應用內支付)
3、自動布局
iOS7.0
1、UIKIT 全新偏化風絡
2、UIKIT 力學模型,增加UIDynamicItem委托
3、Store Kit:IAP方面采用了新的訂單系統,減少內購實現流程和內購破解。實現
對訂單的本機驗證
4、多任務
iOS7之前后臺完成某些費時間的特定任務,后臺播放音樂,位置服務,ip電話
iOS7 改變了后臺任務的運行方式除網絡外的后臺任務,被分布到不同的應用喚醒系統時執行.
網絡傳輸的應用建議使用NSURLSessioin 創建后臺的session并進行網格傳輸.
增加了后臺獲取 Background Fetch ?應用打開前有機會執行代碼來獲取數取,刷新ui,省去了網絡加載過程
增加了推送喚醒( 靜默推送,Slient Remove Notifications)
增加了后臺傳輸(Background Transfer service)
ios8.0
1、iOS開發界面的統一
Size Classes 的引入和新的 Presentation 系統了
2、IB的重大改進,可提高開發效率,節省開發時間
3、 Cloud Kit 的框架的推出
4、Health Kit 和 Home Kit的引入
5、本地通知也需要用戶許可
6、CoreLocation 室內定位
7、Touch ID API簡化了Paypal 或者支付寶這樣的第三方支付和確認的流程的
iOS9
iOS9系統發送的網絡請求將統一使用HTTPs,將不再默認使用HTTP等不安全的網絡協議,而默認采用TLS 1.2。服務器因此需要更新,以解析相關數據。如不更新,可通過在 info.plist 中聲明,倒退回不安全的網絡請求。
· 將允許出現這種場景:同一app中多個location manager:一些只能在前臺定位,另一些可在后臺定位
· bitcode的理解應該是把程序編譯成的一種過渡代碼,然后蘋果再把這個過渡代碼編譯成可執行的程序。 ? ? ?bitcode也允許蘋果在后期重新優化我們程序的二進制文件,有類似于App瘦身的思想。
· stackView
· Multasking:多任務特性,三種形式
·視頻播放的畫中畫模式(Picture in Picture)(AVPlayerViewController默認支持。MPMoviePlayerViewController被deprecated掉了,不支持)?
iPad真正同時使用兩個App
· UI Test:iOS9.0之前加入異步代碼測設和性能測試,可以說Xcode自帶的測試框架已經能滿足絕大部分單元測試的需求了,但是這并不夠,因為開發一個iOS app從來都是很注重UI和用戶體驗的,之前UI測試使用KIF,Automating,iOS9.0的Xcode給出了自帶的XCUITest的一系列工具,和大多數UI測試工具類似,XCUI使用Accessbility標記來確定view,但因為是Apple自家的東西,可以自動記錄操作流程,所以只要書寫最后的驗證部分就好了,比其他UI測試工具方便多了
· Swift2
· APP Thinning:app為了后向兼容,都同時包含了32bit和64bit,在圖片資源2X和3X的一應俱全,下載的時候只需要當前機型對應的一套資源,但是卻要全部打包下載,現在只需要升級iOS9,就可以省很多流量
· 3D touch
· 地圖顯示實時的交通狀況
· 人工智能siri更加智能,幾個大城市的地鐵及火車站入口都有詳細的標識
· 手機電池的低功耗設置
· Spootlight,你的設備會向推薦最近通話過的聯系人,使用過的APP以及你可能感興趣的去處、信息呈現更精彩
iOS10
· SiriKit 在 iOS 10 里面開發者可以使用 Siri SDK,這可能是 iOS 10 最重要的新 SDK之一。從此開發者可以使用原生API提供語音搜索、語音轉文字消息甚至更多常見語音功能。
· Proactive Suggestions 貌似是一個和 CoreSpotlight 有整合的使用建議的東西。
· Message App Extension 在 iOS 10 里面開發者可以給 Message.app 提供兩種 App Extension,分別是可以提供一個表情包,和一個自定義的界面,用于表情搜索等。
· User Notifications 這個 API 讓你可以處理本地或遠程的用戶通知,并且可以基于某個條件,例如時間或者地理位置。這個異常強大,好像可以在通知里包含圖片和視頻了,貌似可以攔截并替換自己 app 發下來的 payload。
· Speech Recognition 見聞知意,語音識別 API,可以把音頻流實時的轉換為文本。雖說早期版本已經有了TTS語音轉文字,但畢竟Siri語義識別的加入讓機器對自然語義的把握更精準,詳見Speech.framework
· App Search Enhancements 對 CoreSpotlight 的增強,其中我比較感興趣的是 Visualization of validation results。
· Widget Enhancements 為了配合 iOS 10 鎖屏下面 Widget 的體驗,蘋果提供了 widgetPrimaryVibrancyEffect 和 widgetSecondaryVibrancyEffect 用于定制化 Widget 的界面。
· CallKit callkit框架 VoIP應用程序集成與iPhone的通話界面,給用戶一個很棒的體驗,鎖屏后VoIP網絡電話可以直接用iPhone系統UI接聽了。
· App Extensions 其實上面也有提到,iOS 10最重要的開發特點就是允許第三方應用對自帶基礎app的拓展關聯, 全新 7 種 App Extension:?
Call Directory(VoIP回調)
Intents(接Siri、Apple map等服務)
Intents UI(接Siri、Apple map等服務的自定義界面)
Messages(iMessage拓展)
Notification Content(內容通知)
Notification Service (服務通知)
StickerPack(iMessage表情包)
· Custom Keyboard 對第三方鍵盤的改進 通過 handleInputModeListFromView:withEvent: 可以彈出系統鍵盤列表。同時使用 documentInputMode 可以檢測輸入上下文中的語言,你可以對輸入方式進行一些類似于對齊方式的調整。
另外需要注意的是,和以往歷代iOS版本推出一樣,新陳代謝,有新SDK、新API的開放,也會有舊的API被遺棄,所以好好檢查你的項目,使用了被遺棄的API要盡快修改,以免不兼容!還有個要注意的問題 iOS10 對隱私權限的管理更為嚴格 ,比如訪問的攝像頭、麥克風等硬件,都需要提前請求應用權限、允許后才可以使用,或者現在要提前聲明,雖然以往要求不嚴格。
ios11新特性
1.UIKit Bars的改版
1.在瀏覽功能上的大標題視圖(向上滑動后標題會回到原來的UI效果)、橫屏狀態下tab上的文字和icon會變為左右排列。
橫屏.png
當然,如果圖標和文字覺得太小了,可以長按item進行放大操作。具體只需要添加代碼
放大.png
2. iOS11導航欄
設置導航欄大標題:navigationBar.prefersLargeTitles,顯示的時機可以用navigationItem.largeTitleDisplayMode設置枚舉值。
設置導航欄搜索控制器
searchController? :self.navigationItem.searchController = searchController
3.上面設置titleView為customView時出現寬度縮小的問題 (這個網上提到了這個問題,但是我自定義代碼并沒有出現這個情況)
3.調整相冊權限的key
NSPhotoLibraryUsageDescription改為NSPhotoLibraryAddUsageDescription
。(beta版本好像又改過來了,我現在沒有調整key也是可以訪問相冊的)
4.近場通訊
首先也要在info.plist配置NFCReaderUsageDescription
5.無線配備
6. 棄用API,scrollview和tableview的改變
iOS11棄用了automaticallyAdjustsScrollViewInsets
屬性,新增contentInsetAdjustmentBehavior
來替代它。這可能使得一些刷新出現頭部錯亂。contentInsetAdjustmentBehavior其實是一個枚舉值。用來管理adjustedContentInset
-automatic和scrollableAxes一樣,scrollView會自動計算和適應頂部和底部的內邊距并且在scrollView不可滾動時,也會設置內邊距.
-scrollableAxes自動計算內邊距.
-never不計算內邊距
-always根據safeAreaInsets計算內邊距
我們這里要設置為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-Sizing之后,我們可以通過實現estimatedRowHeight相關的屬性來展示動態的內容。Self-Sizing在iOS11下是默認開啟的,Headers,Footers, and cells都默認開啟Self-Sizing,所有estimated高度默認值從iOS11之前的 0 改變為UITableViewAutomaticDimension.
如果目前項目中沒有使用estimateRowHeight屬性,在iOS11的環境下就要注意了,因為開啟Self-Sizing之后,tableView是使用estimateRowHeight屬性的,就會可能會使代理方法設置高度失效.
通過以下方法進行關閉:
Table Views:separatorInset 擴展
iOS 7 引入separatorInset屬性,用以設置 cell 的分割線邊距,在 iOS 11 中對其進行了擴展。可以通過新增的UITableViewSeparatorInsetReference枚舉類型的separatorInsetReference屬性來設置separatorInset屬性的參照值。
typedefNS_ENUM(NSInteger,UITableViewSeparatorInsetReference) {UITableViewSeparatorInsetFromCellEdges,//默認值,表示separatorInset是從cell的邊緣的偏移量UITableViewSeparatorInsetFromAutomaticInsets//表示separatorInset屬性值是從一個insets的偏移量}
7.拖放
8.文件管理
9.tableView右滑操作
增加了兩個代理方法來取代原來的代理方法(tableView: editActionsForRowAtIndexPath:)
// Swipe actions// These methods supersede -editActionsForRowAtIndexPath: if implemented- (nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPath- (nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPath
創建UIContextualAction對象時,UIContextualActionStyle有兩種類型,如果是置頂、已讀等按鈕就使用UIContextualActionStyleNormal類型,delete操作按鈕可使用UIContextualActionStyleDestructive類型,當使用該類型時,如果是右滑操作,一直向右滑動某個cell,會直接執行刪除操作,不用再點擊刪除按鈕。
10.Safe Area
以前做懸浮(支付,頭部標題等),系統為我們提供了viewController的topLayoutGuide和bottomLayoutGuide方法進行約束,但是在iOS11中被廢棄了,引用了一個新的概念。safeArea,它提供兩種方式:safeAreaInsets或safeAreaLayoutGuide來提供給你safeArea的參照值,即insets或者layout guide。同時如果改變Insets時會獲得兩個回調
UIView.safeAreaInsetsDidChange()UIViewController.viewSafeAreaInsetsDidChange()
這個iOS的safe Area涉及到的第三方庫有mansory和IQkeyboard所以可能這兩個庫也會進行一些適配
11.UIToolbar and UINavigationBar— Layout
在 iOS 11 中,當蘋果進行所有這些新特性時,也進行了其他的優化,針對 UIToolbar 和 UINavigaBar 做了新的自動布局擴展支持,自定義的bar button items、自定義的title都可以通過layout來表示尺寸。 需要注意的是,你的constraints需要在view內部設置,所以如果你有一個自定義的標題視圖,你需要確保任何約束只依賴于標題視圖及其任何子視圖。當你使用自動布局,系統假設你知道你在做什么。
12. 管理margins 和 insets
基于約束的Auto Layout,使我們搭建能夠動態響應內部和外部變化的用戶界面。Auto Layout為每一個view都定義了margin。margin指的是控件顯示內容部分的邊緣和控件邊緣的距離。 可以用layoutMargins或者layoutMarginsGuide屬性獲得view的margin,margin是視圖內部的一部分。layoutMargins允許獲取或者設置UIEdgeInsets結構的margin。layoutMarginsGuide則獲取到只讀的UILayoutGuide對象。
在iOS11新增了一個屬性:directional layout margins,該屬性是NSDirectionalEdgeInsets結構體類型的屬性:
typedefstructNSDirectionalEdgeInsets{CGFloattop, leading, bottom, trailing;}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));
layoutMargins是UIEdgeInsets結構體類型的屬性:
typedefstructUIEdgeInsets{CGFloattop, left, bottom, right;}UIEdgeInsets;
從上面兩種結構體的對比可以看出,NSDirectionalEdgeInsets屬性用leading 和 trailing 取代了之前的 left 和 right。
directional layout margins屬性的說明如下:
directionalLayoutMargins.leading is used on the left when the user interface direction is LTR and on the right for RTL.
Vice versa for directionalLayoutMargins.trailing.
例子:當你設置了trailing = 30;當在一個right to left 語言下trailing的值會被設置在view的左邊,可以通過layout margins的left屬性讀出該值。
如下圖所示:
還有其他一些更新。自從引入layout margins,當將一個view添加到viewController時,viewController會修復view的layoutMargins為UIKit定義的一個值,這些調整對外是封閉的。從iOS11開始,這些不再是一個固定的值,它們實際是最小值,你可以改變你的view的layoutMargins為任意一個更大的值。而且,viewController新增了一個屬性:viewRespectsSystemMinimumLayoutMargins,如果你設置該屬性為”false”,你就可以改變你的layout margins為任意你想設置的值,包括0。