iOS10 新特性

iOS10 新特性

隨著WWDC16的結(jié)束,iOS版本號也跨入了兩位數(shù) 10.0。對于開發(fā)者來說,好消息是iOS10中并沒有加入太多內(nèi)容。相比于開疆?dāng)U土,iOS 10 更專注的是對現(xiàn)有內(nèi)容的改進(jìn),以彌補(bǔ)之前迅速發(fā)展所留下的一些問題,這其實(shí)正是 Apple 當(dāng)下所亟需做的事情。

生態(tài)整合與 Extension 開發(fā)

在 iOS 10 里 Apple 延續(xù)了前幾年的策略,那就是進(jìn)行平臺整合。全世界現(xiàn)在沒有另外一家廠商在掌握了包括桌面,移動到穿戴的一系列硬件設(shè)備的同時,還掌控了相應(yīng)的從操作系統(tǒng),到應(yīng)用軟件,再到軟件商店這樣一套完整的布局。Apple 顯然也非常明白這個優(yōu)勢意味著什么。所以近年來 Apple 一直強(qiáng)調(diào)平臺整合,如果你的應(yīng)用能夠同時在 iOS,watchOS 以及 macOS 上工作的話,毫無疑問將會更容易吸引用戶以及 Apple 的喜愛。

另外一點(diǎn)則是各個應(yīng)用之間的整合和交互。不難發(fā)現(xiàn),隨著近年來 extension 開發(fā)的興起,Apple 逐漸在從 app 是“用戶體驗(yàn)的核心”這個理念中轉(zhuǎn)移,變?yōu)橛脩魬?yīng)該也可以在通知中心,桌面掛件或者手表這樣的地方完成必要交互。而應(yīng)用之間的交互在以前可以說是 iOS 系統(tǒng)的禁區(qū),但是去年隨著 Workflow 的成功,Apple 對于應(yīng)用之間的交互有助于用戶生產(chǎn)力的提升有了清晰的認(rèn)識。今年 SDK 中幾個重大更新其實(shí)都是圍繞這個主題來進(jìn)行的。

1、Extension 是什么?

首先我們得問,Extension 是什么?這里可能會有很多不同的解釋。

一個很明顯的例子是便是使用了相同術(shù)語的 Firefox 和 Chrome 的 Extension,這兩大瀏覽器提供了非常豐富的 Extension 用于游覽器本身以及增強(qiáng) Web 瀏覽體驗(yàn)。確切地說,這里的 Extension 是一種 Plugin。

還有一個是 Android 的 Intent,Intent 使 App 可以實(shí)現(xiàn)相關(guān) Intent,在系統(tǒng)或者一個 App 里,用戶可以自由的選擇另一個 App 去完成特定的任務(wù)。所以,Android 的 Intent 是一種 IPC(應(yīng)用程序間的通訊)。

這里的分類有點(diǎn)極端,畢竟瀏覽器有真正的 Plugin,如 Flash 插件;Android 也有提供 Widget,也更接近系統(tǒng)的 Plugin。在這點(diǎn)上,我可以說 iOS/OS X 的 Extension 也是混合了上面提到的一切:既有 Plugin 的部分(如 Today),也有 IPC 的部分(如 Share、Photo Editing)。

于是讓我們就 Extension 簡單地理解為:增強(qiáng)系統(tǒng)默認(rèn)功能,能讓 App 之間的協(xié)同工作成為可能。

Extension 基礎(chǔ)

2、SiriKit

SiriKit Siri API 的開放自然是 iOS 10 SDK 中最激動人心也是亮眼的特性。SiriKit 為我們提供一全套從語音識別到代碼處理,最后向用戶展示結(jié)果的流程。Apple 加入了一套全新的框架 Intents.framework 來表示 Siri 獲取并解析的結(jié)果。你的應(yīng)用需要提供一些關(guān)鍵字表明可以接受相關(guān)輸入,而 Siri 擴(kuò)展只需要監(jiān)聽系統(tǒng)識別的用戶意圖 (intent),作出合適的響應(yīng),修改以及實(shí)際操作,最后通過 IntentsUI.framework 提供反饋。整個過程非常清晰明了,但是這也意味著開發(fā)者所能擁有的自由度有限。

在 iOS 10 中,我們只能用 SiriKit 來做六類事情,分別是:

語音和視頻通話

發(fā)送消息

發(fā)送或接收付款

搜索照片

約車

管理健身

如果你的應(yīng)用恰好正在處理這些領(lǐng)域的問題的話,添加 Intents Extension 的支持會是很棒的選擇。它將提高用戶使用你的應(yīng)用的可能性,也能讓用戶在其他像是地圖這樣的系統(tǒng)級應(yīng)用中使用你的服務(wù)。

Siri和Maps通過Intents extension的擴(kuò)展方式和我們的應(yīng)用進(jìn)行交互,其中,類型為INExtension的對象扮演著Intents extension擴(kuò)展中直接協(xié)同Siri對象共同響應(yīng)用戶請求的關(guān)鍵角色。當(dāng)我們實(shí)現(xiàn)了Intents extension擴(kuò)展并產(chǎn)生了一個Siri請求事件時,一個典型的Intent事件的處理過程中總共有這三個步驟Resolve、Confirm和Handle:

Resolve階段。在Siri獲取到用戶的語音輸入之后,生成一個INIntent對象,將語音中的關(guān)鍵信息提取出來并且填充對應(yīng)的屬性。這個對象在稍后會傳遞給我們設(shè)置好的INExtension子類對象進(jìn)行處理,根據(jù)子類遵循的不同服務(wù)protocol來選擇不同的解決方案

Confirm階段。在上一個階段通過handler(for intent:)返回了處理intent的對象,此階段會依次調(diào)用confirm打頭的實(shí)例方法來判斷Siri填充的信息是否完成。匹配的判斷結(jié)果包括Exactly one match、Two or more matches以及No match三種情況。這個過程中可以讓Siri向用戶征求更具體的參數(shù)信息

在confirm方法執(zhí)行完成之后,Siri進(jìn)行最后的處理階段,生成答復(fù)對象,并且向此intent對象確認(rèn)處理結(jié)果然后執(zhí)顯示結(jié)果給用戶看

資料

3、iMessage Apps

Message 應(yīng)用大概是 Apple 在宣傳 iOS 10 時著力最多的部分了。雖然新的貼紙包,自動轉(zhuǎn)換顏文字,發(fā)送全屏效果等功能都很酷炫,但是對于程序開發(fā)者來說,可能還是對 iMessage Apps 更感興趣。Xcode 8 中,Apple 在 iOS Application 模板中添加了一類新的項(xiàng)目類型,Messages Application。同時,模擬器甚至還開發(fā)了新的雙人對話模式,以供開發(fā)者調(diào)試這類 app。

雖然名義上是獨(dú)立 app,但實(shí)際上工作的依然是一個 extension。在該擴(kuò)展中,Messages.framework 將承擔(dān)與系統(tǒng)的 message 界面交互的主要職責(zé)。你通過提供一個自定義的 View Controller,來獲取用戶在使用你的 message app 時進(jìn)行對話的上下文,以及發(fā)送接收等操作,并做出合適的響應(yīng)。這個擴(kuò)展在用來進(jìn)行直接在 Message 應(yīng)用中一些自定義共享會很好玩。但是鑒于 Apple 暫時沒有打算將 Message.app 跨平臺的原因,可能也注定了這只會是一種補(bǔ)充,而無法成為主流。

資料

4、User Notifications

通知中心向來是 iOS 上的兵家必爭之地。如何提供適時有效的通知,往往決定了用戶活躍和留存的可能性。在 iOS 10 上,Apple 對通知進(jìn)行了加強(qiáng)和革新。現(xiàn)在,為了更好地處理和管理通知,和本地及推送通知相關(guān)的 API 被封裝到了全新的框架 UserNotifications.framework 中。在 iOS 10 中,開發(fā)者的服務(wù)器有機(jī)會在本地或者遠(yuǎn)程通知發(fā)送給用戶之前再進(jìn)行修改。

另外,在之前加入了 notification action 以及 text input 的基礎(chǔ)上,iOS 10 又新增了為通知添加音頻,圖片,甚至視頻的功能。現(xiàn)在,你的通知不僅僅是提醒用戶回到應(yīng)用的入口,更成為了一個展示應(yīng)用內(nèi)容,向用戶傳遞多媒體信息的窗口。

之后會詳解。

IDE 和工具改進(jìn)

Xcode 8

在 app 簽名方面,Apple 終于意識到了他們在 Xcode 7 中所犯得錯誤。我想可能不止一個人被證書和描述文件出問題時的 "Fix Issue" 按鈕坑過。這個按鈕不僅不會修正問題,反而會直接注銷現(xiàn)有的開發(fā)者證書,然后“自作主張”地重新申請。大多數(shù)情況下,這讓事情變得更加糟糕。特別是對于新加入的開發(fā)者,他們并不理解 Apple 的證書系統(tǒng),錯誤的操作和處置,往往讓開發(fā)環(huán)境變得不可挽回。Xcode 8 中,同一個開發(fā)者帳號現(xiàn)在允許多個開發(fā)證書,而完全重做的 app 簽名系統(tǒng)也足夠好用,并且避免了誤操作的可能性。在兼顧自動配置的基礎(chǔ)上,也為大型項(xiàng)目和復(fù)雜的 CI 環(huán)境提供了足夠靈活的配置空間,這絕對值得點(diǎn)贊。

另外 Xcode 終于提供了進(jìn)行代碼編輯器擴(kuò)展的能力。現(xiàn)在開發(fā)者可以創(chuàng)建 XCSourceEditorExtension 來對 Xcode 的功能進(jìn)行擴(kuò)展了,在沒有文檔幫助和官方支持的情況下摸索著為 Xcode 制作插件的歷史也即將結(jié)束。

另外開放了Runtime Issues的使用。在開發(fā)過程中,因?yàn)檎Z法或明顯的代碼錯誤(例如Retain Cycle),編譯器可以發(fā)現(xiàn)并報黃色或紅色警告。但是一些因?yàn)榇a邏輯導(dǎo)致的錯誤,編譯器并沒有辦法找到。這時候可以通過Xcode8提供的Runtime Issues新特性,查找到運(yùn)行過程中出現(xiàn)的問題,并通過Graph的方式將問題可視化的展現(xiàn)給開發(fā)者。

Thread Sanitizer spots:新的線程污點(diǎn)清理器, 解決多線程情況下的資源競爭條件,數(shù)據(jù)的變化和其它相關(guān)線程的bug

View Debugger:使用更新的帶有更大的保真度和視覺精度檢查UI約束問題的視圖調(diào)試器

Memory Debugger:可以用新的內(nèi)存調(diào)試跟蹤器跟蹤發(fā)出的內(nèi)存泄漏警報。

資料

Swift 3

Swift 開源已經(jīng)過去半年時間。在 Swift 2.2 中我們已經(jīng)看到了開源的社區(qū)力量對語言產(chǎn)生的深刻影響,而在 Swift 3 中這一影響的效果將更加明顯。

最大的變化在于 Foundation 框架的重新導(dǎo)入,可能過一段時間再回頭看的話,這將標(biāo)志著 Swift 與 Objective-C 徹底分家。Foundation 框架中的 API 現(xiàn)在以更符合 Swift 的方式被導(dǎo)入到語言中。大體來說,這些變化包括去除NS前綴,將絕大部分 class 轉(zhuǎn)換為 struct (雖然底層還是 copy-on-write 的引用實(shí)現(xiàn),可以參看ReferenceConvertible協(xié)議的內(nèi)容),去掉 API 中重復(fù)的語義等。如果在當(dāng)前你還能看出 Swift 和 Objective-C 在使用 Foundation 或者說開發(fā) app 時同根同源的話,Swift 3 正式發(fā)布后可能情況會大不相同。

由于引用類型向值類型的轉(zhuǎn)換,也將導(dǎo)致我們在使用 Swift 開發(fā)時的思考方式發(fā)生變化。以往的 Foundation 框架中類型的可變性是由不可變類型和它的可變類型版本 (比如NSData和NSMutableData) 來進(jìn)行區(qū)分的。而在 Swift 3 中,一般來說將只有作為結(jié)構(gòu)體的不可變類型 (比如Data),對于這類結(jié)構(gòu)體的改變,將會是更安全的基于寫時復(fù)制的行為,而不再是原來可變對象那樣的危險的內(nèi)存操作。這在很多時候除了保證數(shù)據(jù)共享時的安全性以外,內(nèi)部的引用特性也保證了調(diào)用速度。實(shí)際上,因?yàn)闇p少了不必要的復(fù)制 (比如根據(jù)一個不可變對象創(chuàng)建相應(yīng)的可變對象),實(shí)際上通過 Swift 3 的 API 使用 Foundation 的速度將比原來更快!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內(nèi)容