iOS10新特性(What's New in iOS)

weixin_34019929發表於2016-06-21

1.原文地址
2.Additional Framework Changes章節還沒來得及翻譯,之後會出
3.有些不適合翻譯的詞就沒有進行翻譯,大家應該能懂
4.翻譯的不是很完美,希望大家多提意見

iOS 10.0

這篇文章簡述了在iOS10中被引入的開發者相關的關鍵特性。文章同時也列出了詳細描述這些新特性的相關文件。

有關最新的新聞和已知問題資訊,請檢視發行說明https://developer.apple.com/ios/download/。獲取iOS10中新API的完整列表,請檢視iOS 10.0 API Diffs。想了解在新裝置上的更多資訊,請查閱iOS Device Compatibility Reference

想了解有關Swift的更新,請檢視Swift LanguageThe Swift Programming Language (Swift 3)

SiriKit

在特定領域提供服務的應用可以利用SiriKit來通過Siri提供這些服務。要想使你的服務可用,需要使用Intents和Intents UI框架建立一個或多個應用擴充套件(app extensions)。SiriKit支援以下領域的服務:

  • 語音和視訊通話(Audio or video calling)
  • 傳送訊息(Messaging)
  • 收款或付款(Sending or receiving payments)
  • 照片搜尋(Searching photos)
  • 約車(Booking a ride)
  • 管理健身(Managing workouts)

當使用者的請求涉及你的服務,SiriKit會向你的extension傳送一個intent物件,這個intent物件描述了使用者的請求,並提供請求相關的所有資料。開發者使用這個intent物件來提供一個適當的響應物件,這個響應需要包含你處理這個請求的詳細操作。一般來說,Siri處理所有的使用者互動,但開發者也可以用你們的應用中的extension來提供一個整合品牌或附加資訊的定製UI。

SiriKit也提供這樣一種機制:你可以告訴系統存在於你應用中的互動和活動。當你告訴系統相關的互動資訊,系統可以判斷你的應用是否可以處理使用者目前的請求,如果可以,會傳遞請求到你的應用。此外,intent-SiriKit定義的一個把意圖相關資訊和處理步驟結合的互動物件-包含了一些詳細資訊,比如該步驟的起始時間和持續時間。如果你的應用註冊了某種intent的處理能力,那麼即使它沒有提供一個intent的應用擴充套件(app extensions),系統同樣可以啟動它並帶著一個包含這種intent的interaction物件。

Maps和Siri都支援汽車預約,使用者同時也可以使用Maps來進行餐館的預定。你的Intents extension使用同樣的方式處理來自於Map應用的互動或Siri的請求。如果你定製了使用者介面,你的Intents UI extension也可以根據請求的來源-Siri或Maps-來進行差異化的配置。

學習如何支援SiriKit並給使用者提供全新的使用你服務的方式,請閱讀SiriKit Programming Guide。當你準備好實現一個處理各種各樣intents的應用擴充套件(app extensions),請閱讀Intents Framework ReferenceIntents UI Framework Reference

Proactive Suggestions

iOS10引入了新的方式來提高使用者與你應用的互動:通過在合適的時機向使用者展示你的應用。如果你在iOS9中採用了應用搜尋,通過Spotlight和Safari搜尋結果、Handoff、Siri建議,你能夠給予使用者更加深層的對活動和內容的訪問能力。在iOS10和未來的版本中,你可以提供“使用者能在你的應用做什麼”這樣的資訊,這可以幫助系統在更多的地方推薦你的應用,比如鍵盤相關的QuickType建議, Maps和CarPlay,應用切換頁面,Siri互動,(為媒體播放類應用) 鎖屏介面。這些提高和系統整合度的功能被許多技術支援,比如NSUserActivity,Schema.org定義的web標記, 和定義在Core Spotlight、MapKit、UIKit、Media Player 框架中的API。

在iOS10中,NSUserActivity物件包含一個mapItem屬性,它允許你提供一個可以在其它環境中使用的位置資訊。例如,如果你的應用程式顯示酒店評論,你可以使用mapItem屬性來儲存使用者正在檢視酒店的位置,這樣,當使用者切換到一個旅行規劃應用,該酒店的位置會被自動提供。如果你支援應用搜尋,你可以使用CSSearchableItemAttributeSet中新的基於文字的地址元件屬性,比如thoroughfarepostalCode,來全面地指定使用者可能想去的位置。要注意的是當你使用了mapItem屬性,系統也會自動將其填入contentAttributeSet屬性.

為了和系統分享位置資訊,一定要指定latitudelongitude值,並將其加入CSSearchableItemAttributeSet中定義的地址元件屬性。它也建議你為namedLocation屬性提供一個值,以便使用者可以檢視到這個位置的名稱。你同樣可以提供值給phoneNumbers屬性,這樣使用者就可以使用Siri來發起一個基於位置的呼叫。

在iOS9中,為你網頁中的結構化資料新增標記可以豐富使用者在Spotlight和Safari中看到的搜尋結果。在iOS10中,你可以使用Schema.org中定義的位置相關的詞表,比如PostalAddress,來進一步提高使用者的體驗。例如,如果使用者在你的網站上看到一個位置說明,那麼當使用者使用Maps應用的時候,系統會提示相同的位置。需要注意的是,Safari同時支援Schema.org詞表的JSON-LD和Microdata編碼。

UIKit在UITextInputTraits協議中引入textContentType屬性,使你可以指定希望使用者在文字區域中輸入內容的語義。當你提供了這個資訊,系統在某種情況下可以自動選擇適當的鍵盤,提高鍵盤的輸入校正,主動整合從其它app和網站獲取的資訊。例如,如果你使用UITextContentTypeFullStreetAddress來通知系統你希望使用者在文字輸入區框中輸入一個完整的地址,系統就可以將使用者最近瀏覽的地址提示給他本人。

如果你的應用是媒體播放器之類的,你可以使用MPPlayableContentManager中相關的API,iOS10可以幫助你在鎖屏的時候實現檢視專輯封面和媒體播放的功能。

如果你的ride-sharing應用使用MKDirectionsRequestAPI,那麼當使用者有可能叫車的時候,iOS10可以在應用切換介面顯示你的應用。為了註冊成一個乘車分享服務的提供方,你需要在Info.plist檔案中將MKDirectionsApplicationSupportedModes關鍵字指定為MKDirectionsModeRideShare。如果你的應用只支援共享乘車,系統將會以“Get a ride to...”這樣開頭的文字來推薦你的應用。如果你的應用同時支援共享乘車和其它交通方式(比如汽車或自行車),系統將會使用“Get directions to...”這樣的文字。需要注意的是,你收到的MKMapItem物件有可能不包括經緯度資訊,並且MKMapItem需要地理編碼。

Integrating with the Messages App

在iOS10中,你可以建立一個應用擴充套件(app extensions)來和Messages應用進行互動,比如讓使用者傳送文字、stickers、媒體檔案、互動式訊息。你也可以支援互動式的訊息,這個更新是每個收件人對訊息的響應。你可以建立兩種型別的應用擴充套件(app extensions):

  • Sticker pack給使用者提供了一套可以被加在訊息內容上的貼紙。
  • iMessage app現在能讓你在其內部提供一個使用者介面,用於在一次會話中建立一個sticker的瀏覽器,這個瀏覽器可以建立、傳送、更新包括文字、stickers、媒體檔案在內的互動式資訊。

當使用者在iMessage應用中的時候,應用同樣可以幫助使用者搜尋儲存在和你應用相關聯的網站中的圖片。

你可以在不寫任何程式碼的情況下建立一個Sticker包:簡單的拖拽圖片到Xcode中Stickers asset catalog的Sticker Pack folder就可以了。

你可以使用Messages框架(Messages.framework)中提供的API來開發一個iMessage應用。想學習有關Messages框架的知識,你可以檢視Messages Framework Reference。有關建立應用程式擴充套件(app extensions)的一般資訊,你可以檢視App Extension Programming Guide

如果你的app提供了可以在Messages中分享的圖片,然後你希望使用者可以在不離開Messages應用的情況下通過Spotlight進行通用圖片查詢(就是這種,“#images”),那麼第一步是建立一個iMessage應用。之後的步驟如下:

  • 給你應用的entitlements新增com.apple.developer.associated-domains關鍵字。這個關鍵字包含一個你希望使用者搜尋到的web域的列表。對於每個域,指定spotlight-image-search服務。
  • 在你的網站上新增一個apple-app-site-association檔案,檔案中新增一個包含spotlight-image-search的字典,字典中也要包含你的應用ID(app ID),這個應用ID是你的團隊ID(team ID)或者一個appID+bundleID的字串。你可以指定最多500個路徑和模式來幫助Spotlight通用圖片搜尋可以索引到(有關網站路徑的一些例子,可以參考universal links的例子Creating and Uploading the Association File)。
  • 請允許Applebot對資料進行抓取(更多資訊,請檢視About Applebot)。

User Notifications

iOS10引入了User Notification框架(UserNotifications.framework),這個框架支援本地和遠端通知的傳遞和處理。你可以使用這個框架中的類基於一些特殊的條件來交付本地通知,比如時間和地點。當通知交付到使用者裝置的時候,應用和應用擴充套件可以使用這個框架來接收和修改本地或遠端的通知。

同樣是在iOS10被引入的,User Notifications UI框架(UserNotificationsUI.framework)使你可以定製顯示在使用者裝置上的本地和遠端通知樣式。你可以使用這個框架來定義一個應用擴充套件(app extension)來接收通知資料,然後提供相似的視覺效果進行顯示。

Speech Recognition

iOS10引入了一個新的API,它支援連續的語音識別,可以幫助你實現一個有語音識別並轉換為文字這樣功能的應用。使用Speech框架(Speech.framework)中的API,你可以對實時語音或錄製音訊進行語音轉錄。例如,你可以獲得一個語音識別器,然後像如下程式碼一樣開始簡單的語音轉錄:

let recognizer = SFSpeechRecognizer()
let request = SFSpeechURLRecognitionRequest(url: audioFileURL)
  recognizer?.recognitionTask(with: request, resultHandler: {   (result, error) in
  print (result?.bestTranscription.formattedString)
})

正如訪問其它型別受保護的資料,比如日曆資料和相簿資料,執行語音識別需要使用者的許可(有關訪問受保護資料類的更多資訊,請檢視Security and Privacy Enhancements)。對於語音識別來說,獲取許可權是必須的,因為考慮到識別精確度,資料會被傳送並臨時性的儲存在蘋果的伺服器上。為了獲取使用者的許可,你需要把NSSpeechRecognitionUsageDescription關鍵字新增到你應用的Info.plist檔案中。

當你在你的應用中採用語音識別的時候,務必向使用者說明他們的講話應該是能被認可的,而且他們在那個時候不應該有敏感的言論。

Wide Color

大部分影像框架貫穿整個系統,包括Core Graphics,Core Image,Metal,AVFoundation在內的框架極大的改善了對更加廣泛的畫素格式和寬色域色彩空間的支援。通過在整個圖形堆疊(graphics stack)擴充套件這個行為,讓裝置支援更廣泛的色彩顯示變的前所未有的簡單。此外,UIKit把使用新的擴充套件sRGB色彩空間變的標準化,使sRGB顏色和其它顏色的混合變的簡單,更寬的色域顯示沒有顯著的效能損失。

以下是開始使用Wide Color的一些最佳實踐。

  • 在iOS10中,UIColor類使用擴充套件的sRGB色彩空間,它的初始化不再限制組成值在0.0-1.0之間。如果你的應用依賴UIKit來限制組成值(無論你是建立一個顏色還是請求一個顏色的組成值),你需要在適配iOS10的時候改變你應用的行為。
  • 當你在iPad Pro(9.7英寸)上執行一個UIView的自定義繪圖操作的時候,預設的繪圖環境是用擴充套件的sRGB顏色域。
  • 如果你的應用渲染自定義的影像,請使用新的UIGraphicsImageRenderer類來進行管理,無論目標點陣圖是用擴充套件值域還是標準值域格式。
  • 如果你在一個廣色域裝置上使用低階別的API(比如Core Graphics或Metal)來進行圖片加工,你需要使用一個擴充套件範圍的顏色域和支援16位浮點的畫素格式來組成數值。當限制顏色值是必須的,你應該明確這樣做。
  • Core Graphics,Core Image,Metal Performance Shaders提供新的簡單的選擇來處理顏色和圖片色彩空間的轉化。

Adapting to the True Tone Display

真色調(True Tone)顯示使用環境光感測器,可以做到配合當前環境的光線條件自動調節顯示的顏色和強度。為了確保你的應用在真色調(True Tone)提供的標準色改變功能下能正常工作,請新增UIWhitePointAdaptivityStyle關鍵字到你的Info.plist檔案下,來描述你應用的原始視覺內容。比如:

  • 如果你的應用是照片編輯類,顏色保真度就比自適應環境中的白點要重要。對於這種情況,你可以使用UIWhitePointAdaptivityStylePhoto型別來減少系統提供的真色調調整的強度。
  • 如果你的應用是閱讀類,和環境中的白點保持一致對使用者來說就是有益的。對於這種情況,你可以使用UIWhitePointAdaptivityStyleReading型別來增加系統提供的真色調調整的強度。

App Search Enhancements

對於應用搜尋,iOS10和Core Spotlight框架引入了一些增強功能:

  • 應用內搜尋
  • 搜尋延長
  • Crowdsourcing deep link popularity with differential privacy
  • 確認結果的視覺化

新的CSSearchQuery類支援搜尋那些你用Core Spotlight API指出的應用內內容。使用這些API可以淘汰你應用中單獨的搜尋索引,以及更好的利用Spotlight強大的搜尋技術,同時,匹配規則允許使用者在不離開你應用的條件下搜尋內容,就像他們在Mail,Messages和Notes中體驗到的一樣。

在iOS9中,使用搜尋API(比如Core Spotlight,NSUserActivity和web markup)在你的應用做內容索引,可以使使用者通過Spotlight和Safari搜尋到這些內容。在iOS10中,你可以使用新的Core Spotlight符號來延續一個使用者的搜尋,從Spotlight開始直到使用者開啟你的應用。為了支援這個特性,需要向Info.plist檔案中新增CoreSpotlightContinuation關鍵字,並把它設定為YES,然後更新你的程式碼來處理這種延續活動的型別CSQueryContinuationActionTypeapplication:continueUserActivity:restorationHandler:方法中收到的NSUserActivity物件中的使用者資訊字典裡面包括CSSearchQueryString關鍵字,通過這個關鍵字取出來的值是一個包含使用者查詢資訊的字串。

iOS10引入了一種差異化的私有方式來幫助改善應用搜尋內容的排名。iOS提交差異化的私有雜湊表的子集到蘋果的伺服器上,比如使用者使用你的應用,比如一個包含深連結URL的NSUserActivity物件,這個物件中eligibleForPublicIndexing屬性會被設為YES,這樣的資訊會被提交給iOS。差異化的私有雜湊表允許蘋果來計算受歡迎的深連結和無法與使用者關聯起來的連結的頻率。

當你使用App Search API Validation工具測試你的網站的markup和深連結時,它現在可以更直觀的顯示結果。包括支援markup在內,相關的內容被定義在Schema.org。App Search API Validation工具可以幫助你檢視Applebot網路爬蟲都索引了哪些資訊,比如title,description,URL和其他的一些支援的元素。你可以在https://search.developer.apple.com/appsearch-validation-tool這裡訪問到App Search API Validation工具。要了解更多有關深連結支援和新增markup的資訊,請檢視Mark Up Web Content

想了解更多有關如何使你網站中的圖片在Messages應用中是可被搜尋的,請檢視Integrating with the Messages App

Widget Enhancements

iOS10引入了一個新的鎖屏設計,新的鎖屏現在會顯示各種widget。為了確保你的widget在任何背景下都看起來很好,你可以在合適的時候指定widgetPrimaryVibrancyEffectwidgetSecondaryVibrancyEffect(使用這個屬性來替換已經棄用的notificationCenterVibrancyEffect屬性)。此外,widget目前包括顯示模式的概念(以NCWidgetDisplayMode為代表),顯示模式允許你描述多少內容是可用的,並且允許使用者來選擇緊湊的或是擴充套件的視覺效果。

Apple Pay Enhancements

在iOS10中,使用者可以從網頁上,或通過Siri和地圖的互動來使用Apple Pay進行簡單和安全的支付。對於開發者來說,iOS10引入了可以同時在iOS和watchOS上使用的新API,支援動態支付網路的能力,和新的沙盒測試環境。

iOS10引入新的API幫助你整合Apple Pay到你的網站,當你的網站支援Apple Pay,在iOS或OS X上使用Safari進行網頁瀏覽的使用者就能使用他們iPhone或Apple Watch中Apple Pay繫結的卡進行支付。想了解更多,請查閱ApplePay JS Framework Reference

PassKit框架(PassKit.framework)引入的API使你可以在某些UIKit不支援的地方使用Apple Pay。具體說來,PKPaymentAuthorizationControllerPKPaymentAuthorizationControllerDelegate可用的特性由PKPaymentAuthorizationViewController和它的delegate提供,但這些並不依賴UIKit。雖然新的API只是對於要在watchOS和某些intents下支援Apple Pay才是必須的,但我們還是推薦對於所有的程式碼都做適配,這樣你就可以用一個程式碼庫提供更廣泛的Apple Pay支援。(要了解更多有關intents和Siri的整合,請檢視SiriKit。)

PassKit框架也新增了這種特性,即允許卡片發行方在他們的應用中展示他們的卡片。具體而言,PKPaymentButtonTypeInStore按鈕型別允許你為一張卡顯示一個Apple Pay按鈕,presentPaymentPass:方法允許你以程式設計的方式展示一個卡片(presentPaymentPass:方法在PKPassLibrary中定義)。

當一個新的支付網路變的可用,你的應用可以自動支援新的網路而不需要你修改或重新編譯你的應用。availableNetworks方法讓你可以在執行時發現使用者裝置上可用的網路。此外,supportedNetworks屬性得到了擴充套件,它可以拿到一些支付提供商的名字並把它作為引數。你的應用可以自動的支援任何支付提供商支援的網路。想了解更多,請查閱https://developer.apple.com/apple-pay/

iOS10引入一個新的測試環境,它讓你可以直接在裝置上測試卡片。測試環境會返回加密的測試支付資料。要使用此環境,請按照以下步驟:
1. 在iTunes Connect中建立一個測試用的iCloud賬戶。
2. 在你的裝置上登入這個賬號。
3. 設定用於測試所需的區域。
4. 使用https://developer.apple.com/apple-pay/中列出的測試卡片。

注意:當你切換iCloud賬戶,環境也會自動切換。
你還是必須使用實際卡片在生產環境中測試付款功能。

Security and Privacy Enhancements

iOS10引入幾個變化來幫助您提高程式碼的安全和維護使用者資料的隱私性。想了解更多,請查閱https://developer.apple.com/security/

  • Info.plist檔案中新的NSAllowsArbitraryLoadsInWebContent關鍵字為您提供了一個便捷的方式來允許任意Web頁面載入,當為你的應用的其它部分保持ATS 保護。
  • SecKey API包含了對非對稱金鑰生成的改進。使用SecKey API替換棄用的Common Data Security Architecture(CDSA)中的若干API。
  • RC4對稱加密套件現在對於所有SSL/TLS連結都是預設不可用的,Secure Transports API中的SSLv3也不再支援了。推薦你儘快停止使用SHA-1和3DES加密演算法。
  • UIPasteboard類支援Clipboard功能,這個功能允許使用者在裝置間進行拷貝和貼上操作。你可以使用其中的API來為一個特定的裝置限定一個剪貼簿,並設定一個過期時間,在此時間之後,剪貼簿將被清空。此外,named pasteboards不再是持久化的-作為代替,你應當使用shared containers- 同時“Find” pasteboard(就是說,pasteboard被UIPasteboardNameFindconstant識別)是不可用的。
  • 你必須通過在Info.plist檔案中包含適當的目的字串關鍵字來靜態的宣告你應用中打算用到的受保護資料類。例如,你必須包含NSCalendarsUsageDescription關鍵字來訪問使用者的日曆資料。如果你不包含明確目的的字元關鍵字,你的應用將會在訪問相關資料的時候退出。

CallKit

CallKit框架(CallKit.framework)使得VoIP應用能與iPhone UI整合到一起,從而給使用者帶來更好的體驗。使用這個框架來讓使用者在鎖屏頁面檢視和接聽打來的VoIP電話,並在Phone應用的個人收藏和最近通話檢視中管理來自VoIP通話的聯絡人。

CallKit框架同樣也引入了應用擴充套件(app extensions),這個擴充套件可以進行呼叫攔截和來電識別。你可以建立一個應用擴充套件來將電話號碼和名稱關聯起來,或是告訴系統什麼樣的號碼需要被攔截。

News Publisher Enhancements

News Publisher使用Apple News Format來讓發表設計精美的新聞、雜誌、網頁內容到Apple News變的簡單。從各大雜誌或新聞機構這種獨立出版商,到個人部落格,任何人都可以註冊。要開始使用或瞭解更多最新資訊,請訪問https://newsresources.apple.com

Video Subscriber Account

iOS10引入了Video Subscriber Account框架(VideoSubscriberAccount.framework)來幫助應用支援流媒體認證或認證視訊點播(也被稱為TV Everywhere)與他們的有線電視或衛星電視供應商認證。對於那些使用者註冊一次就能解鎖流媒體訂閱服務的應用來說,使用這個框架中的API可以幫助你支援單一登入體驗。

App Extensions

iOS10為那些可以建立應用擴充套件的人引入了一些新的擴充套件點,比如:

  • Call Directory
  • Intents
  • Intents UI
  • Messages
  • Notification Content
  • Notification Service
  • Sticker Pack

此外,iOS10對於第三方鍵盤擴充套件應用有如下增強:

  • 通過使用UITextDocumentProxy類的documentInputMode屬性,你可以自動檢測文件的輸入語言,然後改變你的鍵盤擴充套件來匹配這種序言(如果支援)。如果你使用這種方式檢測輸入語言,你可以做每種語言的鍵盤切換,就像自帶的Messages應用那樣。
  • 新的handleInputModeListFromView:withEvent:方法讓鍵盤擴充套件顯示系統的鍵盤選擇選單(that is, the globe key menu)。

一個鍵盤擴充套件應該把全域性鍵放在相同的位置,就像系統中對於每個方向上全域性鍵的顯示一樣。並且,如果你需要提供一個自定義的按鍵-比如支援鍵盤設定的按鍵-你
應該將這個按鍵放在相同的位置,就像系統鍵盤的聽寫鍵一樣。

要了解更多有關建立應用擴充套件的一般內容,請檢視App Extension Programming Guide

Additional Framework Changes

未完待續...

相關文章