iOS開發(fā)各版本發(fā)展史

http://www.itdecent.cn/p/2ca9ecdb07ce

iOS5.0

1:iMessage

2、iCloud

iCloud存儲(chǔ)API使程序可以將用戶文檔和關(guān)鍵數(shù)據(jù)存儲(chǔ)到iCloud中,并同時(shí)將改動(dòng)推送到用戶所有的計(jì)算機(jī)和設(shè)備上這一切都是自動(dòng)的

3、通知中心

4、自動(dòng)引用計(jì)數(shù)(ARC)

5、Storyboard

6、AirPlay

7、Core Image

8、GameCenter

9、OpenGL ES

iOS6.0

1、地圖 拋棄了googlemap 使用了自家地圖

2、新的IAP(應(yīng)用內(nèi)支付)

3、自動(dòng)布局

iOS7.0

1、UIKIT 全新偏化風(fēng)絡(luò)

2、UIKIT 力學(xué)模型,增加UIDynamicItem委托

3、Store Kit:IAP方面采用了新的訂單系統(tǒng),減少內(nèi)購實(shí)現(xiàn)流程和內(nèi)購破解。實(shí)現(xiàn)

對(duì)訂單的本機(jī)驗(yàn)證

4、多任務(wù)

iOS7之前后臺(tái)完成某些費(fèi)時(shí)間的特定任務(wù),后臺(tái)播放音樂,位置服務(wù),ip電話

iOS7 改變了后臺(tái)任務(wù)的運(yùn)行方式除網(wǎng)絡(luò)外的后臺(tái)任務(wù),被分布到不同的應(yīng)用喚醒系統(tǒng)時(shí)執(zhí)行.

網(wǎng)絡(luò)傳輸?shù)膽?yīng)用建議使用NSURLSessioin 創(chuàng)建后臺(tái)的session并進(jìn)行網(wǎng)格傳輸.

增加了后臺(tái)獲取 Background Fetch ?應(yīng)用打開前有機(jī)會(huì)執(zhí)行代碼來獲取數(shù)取,刷新ui,省去了網(wǎng)絡(luò)加載過程

增加了推送喚醒( 靜默推送,Slient Remove Notifications)

增加了后臺(tái)傳輸(Background Transfer service)

ios8.0

1、iOS開發(fā)界面的統(tǒng)一

Size Classes 的引入和新的 Presentation 系統(tǒng)了

2、IB的重大改進(jìn),可提高開發(fā)效率,節(jié)省開發(fā)時(shí)間

3、 Cloud Kit 的框架的推出

4、Health Kit 和 Home Kit的引入

5、本地通知也需要用戶許可

6、CoreLocation 室內(nèi)定位

7、Touch ID API簡化了Paypal 或者支付寶這樣的第三方支付和確認(rèn)的流程的

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)這種場景:同一app中多個(gè)location manager:一些只能在前臺(tái)定位,另一些可在后臺(tái)定位

· bitcode的理解應(yīng)該是把程序編譯成的一種過渡代碼,然后蘋果再把這個(gè)過渡代碼編譯成可執(zhí)行的程序。 ? ? ?bitcode也允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件,有類似于App瘦身的思想。

· stackView

· Multasking:多任務(wù)特性,三種形式

·視頻播放的畫中畫模式(Picture in Picture)(AVPlayerViewController默認(rèn)支持。MPMoviePlayerViewController被deprecated掉了,不支持)?

iPad真正同時(shí)使用兩個(gè)App

· UI Test:iOS9.0之前加入異步代碼測設(shè)和性能測試,可以說Xcode自帶的測試框架已經(jīng)能滿足絕大部分單元測試的需求了,但是這并不夠,因?yàn)殚_發(fā)一個(gè)iOS app從來都是很注重UI和用戶體驗(yàn)的,之前UI測試使用KIF,Automating,iOS9.0的Xcode給出了自帶的XCUITest的一系列工具,和大多數(shù)UI測試工具類似,XCUI使用Accessbility標(biāo)記來確定view,但因?yàn)槭茿pple自家的東西,可以自動(dòng)記錄操作流程,所以只要書寫最后的驗(yàn)證部分就好了,比其他UI測試工具方便多了

· 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 在 iOS 10 里面開發(fā)者可以使用 Siri SDK,這可能是 iOS 10 最重要的新 SDK之一。從此開發(fā)者可以使用原生API提供語音搜索、語音轉(zhuǎn)文字消息甚至更多常見語音功能。

· Proactive Suggestions 貌似是一個(gè)和 CoreSpotlight 有整合的使用建議的東西。

· Message App Extension 在 iOS 10 里面開發(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 為了配合 iOS 10 鎖屏下面 Widget 的體驗(yàn),蘋果提供了 widgetPrimaryVibrancyEffect 和 widgetSecondaryVibrancyEffect 用于定制化 Widget 的界面。

· CallKit callkit框架 VoIP應(yīng)用程序集成與iPhone的通話界面,給用戶一個(gè)很棒的體驗(yàn),鎖屏后VoIP網(wǎng)絡(luò)電話可以直接用iPhone系統(tǒng)UI接聽了。

· App Extensions 其實(shí)上面也有提到,iOS 10最重要的開發(fā)特點(diǎn)就是允許第三方應(yīng)用對(duì)自帶基礎(chǔ)app的拓展關(guān)聯(lián), 全新 7 種 App Extension:?

Call Directory(VoIP回調(diào))

Intents(接Siri、Apple map等服務(wù))

Intents UI(接Siri、Apple map等服務(wù)的自定義界面)

Messages(iMessage拓展)

Notification Content(內(nèi)容通知)

Notification Service (服務(wù)通知)

StickerPack(iMessage表情包)

· Custom Keyboard 對(duì)第三方鍵盤的改進(jìn) 通過 handleInputModeListFromView:withEvent: 可以彈出系統(tǒng)鍵盤列表。同時(shí)使用 documentInputMode 可以檢測輸入上下文中的語言,你可以對(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新特性

1.UIKit Bars的改版

1.在瀏覽功能上的大標(biāo)題視圖(向上滑動(dòng)后標(biāo)題會(huì)回到原來的UI效果)、橫屏狀態(tài)下tab上的文字和icon會(huì)變?yōu)樽笥遗帕小?/p>

橫屏.png

當(dāng)然,如果圖標(biāo)和文字覺得太小了,可以長按item進(jìn)行放大操作。具體只需要添加代碼

放大.png

2. iOS11導(dǎo)航欄

設(shè)置導(dǎo)航欄大標(biāo)題:navigationBar.prefersLargeTitles,顯示的時(shí)機(jī)可以用navigationItem.largeTitleDisplayMode設(shè)置枚舉值。

設(shè)置導(dǎo)航欄搜索控制器

searchController? :self.navigationItem.searchController = searchController

3.上面設(shè)置titleView為customView時(shí)出現(xiàn)寬度縮小的問題 (這個(gè)網(wǎng)上提到了這個(gè)問題,但是我自定義代碼并沒有出現(xiàn)這個(gè)情況)

3.調(diào)整相冊權(quán)限的key

NSPhotoLibraryUsageDescription改為NSPhotoLibraryAddUsageDescription

。(beta版本好像又改過來了,我現(xiàn)在沒有調(diào)整key也是可以訪問相冊的)

4.近場通訊

首先也要在info.plist配置NFCReaderUsageDescription

5.無線配備

6. 棄用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-Sizing之后,我們可以通過實(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ì)可能會(huì)使代理方法設(shè)置高度失效.

通過以下方法進(jìn)行關(guān)閉:

Table Views:separatorInset 擴(kuò)展

iOS 7 引入separatorInset屬性,用以設(shè)置 cell 的分割線邊距,在 iOS 11 中對(duì)其進(jìn)行了擴(kuò)展。可以通過新增的UITableViewSeparatorInsetReference枚舉類型的separatorInsetReference屬性來設(shè)置separatorInset屬性的參照值。

typedefNS_ENUM(NSInteger,UITableViewSeparatorInsetReference) {UITableViewSeparatorInsetFromCellEdges,//默認(rèn)值,表示separatorInset是從cell的邊緣的偏移量UITableViewSeparatorInsetFromAutomaticInsets//表示separatorInset屬性值是從一個(gè)insets的偏移量}

7.拖放

8.文件管理

9.tableView右滑操作

增加了兩個(gè)代理方法來取代原來的代理方法(tableView: editActionsForRowAtIndexPath:)

// Swipe actions// These methods supersede -editActionsForRowAtIndexPath: if implemented- (nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPath- (nullableUISwipeActionsConfiguration*)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)擊刪除按鈕。

10.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)行一些適配

11.UIToolbar and UINavigationBar— Layout

在 iOS 11 中,當(dāng)蘋果進(jìn)行所有這些新特性時(shí),也進(jìn)行了其他的優(yōu)化,針對(duì) UIToolbar 和 UINavigaBar 做了新的自動(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è)你知道你在做什么。

12. 管理margins 和 insets

基于約束的Auto Layout,使我們搭建能夠動(dòng)態(tài)響應(yīng)內(nèi)部和外部變化的用戶界面。Auto Layout為每一個(gè)view都定義了margin。margin指的是控件顯示內(nèi)容部分的邊緣和控件邊緣的距離。 可以用layoutMargins或者layoutMarginsGuide屬性獲得view的margin,margin是視圖內(nèi)部的一部分。layoutMargins允許獲取或者設(shè)置UIEdgeInsets結(jié)構(gòu)的margin。layoutMarginsGuide則獲取到只讀的UILayoutGuide對(duì)象。

在iOS11新增了一個(gè)屬性:directional layout margins,該屬性是NSDirectionalEdgeInsets結(jié)構(gòu)體類型的屬性:

typedefstructNSDirectionalEdgeInsets{CGFloattop, leading, bottom, trailing;}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));

layoutMargins是UIEdgeInsets結(jié)構(gòu)體類型的屬性:

typedefstructUIEdgeInsets{CGFloattop, left, bottom, right;}UIEdgeInsets;

從上面兩種結(jié)構(gòu)體的對(duì)比可以看出,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.

例子:當(dāng)你設(shè)置了trailing = 30;當(dāng)在一個(gè)right to left 語言下trailing的值會(huì)被設(shè)置在view的左邊,可以通過layout margins的left屬性讀出該值。

如下圖所示:

還有其他一些更新。自從引入layout margins,當(dāng)將一個(gè)view添加到viewController時(shí),viewController會(huì)修復(fù)view的layoutMargins為UIKit定義的一個(gè)值,這些調(diào)整對(duì)外是封閉的。從iOS11開始,這些不再是一個(gè)固定的值,它們實(shí)際是最小值,你可以改變你的view的layoutMargins為任意一個(gè)更大的值。而且,viewController新增了一個(gè)屬性:viewRespectsSystemMinimumLayoutMargins,如果你設(shè)置該屬性為”false”,你就可以改變你的layout margins為任意你想設(shè)置的值,包括0。

0人點(diǎn)贊

iOS

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 來源:iOS各個(gè)版本的特性和差別 - CSDN博客 iOS 5 icloud 通知中心 ARC Stroyboar...
    一代驕馬閱讀 3,889評(píng)論 0 0
  • iOS 3.0 一、點(diǎn)對(duì)點(diǎn)藍(lán)牙連接 二、遠(yuǎn)程瀏覽內(nèi)容 三、連接周邊產(chǎn)品(硬件) 四、其它應(yīng)用可以使用maps 五、...
    maTianHong閱讀 4,856評(píng)論 3 8
  • iOS7新特性 · 在iOS7當(dāng)中,使用麥克風(fēng)也需要取得用戶同意了。如果用戶不允許app使用麥克風(fēng)的話,那么需要使...
    AlvinCrash閱讀 7,705評(píng)論 0 13
  • 本文為作者原創(chuàng),未經(jīng)作者允許不得轉(zhuǎn)載。該文同時(shí)發(fā)表在騰訊bugly公眾號(hào):https://mp.weixin.qq...
    sonialiu閱讀 101,905評(píng)論 74 283
  • 序言 一個(gè)人有多不正經(jīng),就有多深情。一個(gè)程序員有多悶,就代表ta有多騷。我不等山無棱,不等夏雨雪,不等天地合。因?yàn)?..
    _小迷糊_997閱讀 1,725評(píng)論 2 45

友情鏈接更多精彩內(nèi)容