1.原文地址
2.Additional Framework Changes章節(jié)還沒來得及翻譯,之后會出
3.有些不適合翻譯的詞就沒有進行翻譯,大家應該能懂
4.翻譯的不是很完美,希望大家多提意見
iOS 10.0
這篇文章簡述了在iOS10中被引入的開發(fā)者相關的關鍵特性。文章同時也列出了詳細描述這些新特性的相關文檔。
有關最新的新聞和已知問題信息,請查看發(fā)行說明https://developer.apple.com/ios/download/。獲取iOS10中新API的完整列表,請查看iOS 10.0 API Diffs。想了解在新設備上的更多信息,請查閱iOS Device Compatibility Reference。
想了解有關Swift的更新,請查看Swift Language和The Swift Programming Language (Swift 3)
SiriKit
在特定領域提供服務的應用可以利用SiriKit來通過Siri提供這些服務。要想使你的服務可用,需要使用Intents和Intents UI框架創(chuàng)建一個或多個應用擴展(app extensions)。SiriKit支持以下領域的服務:
- 語音和視頻通話(Audio or video calling)
- 發(fā)送消息(Messaging)
- 收款或付款(Sending or receiving payments)
- 照片搜索(Searching photos)
- 約車(Booking a ride)
- 管理健身(Managing workouts)
當用戶的請求涉及你的服務,SiriKit會向你的extension發(fā)送一個intent對象,這個intent對象描述了用戶的請求,并提供請求相關的所有數據。開發(fā)者使用這個intent對象來提供一個適當的響應對象,這個響應需要包含你處理這個請求的詳細操作。一般來說,Siri處理所有的用戶交互,但開發(fā)者也可以用你們的應用中的extension來提供一個整合品牌或附加信息的定制UI。
SiriKit也提供這樣一種機制:你可以告訴系統(tǒng)存在于你應用中的交互和活動。當你告訴系統(tǒng)相關的交互信息,系統(tǒng)可以判斷你的應用是否可以處理用戶目前的請求,如果可以,會傳遞請求到你的應用。此外,intent-SiriKit定義的一個把意圖相關信息和處理步驟結合的交互對象-包含了一些詳細信息,比如該步驟的起始時間和持續(xù)時間。如果你的應用注冊了某種intent的處理能力,那么即使它沒有提供一個intent的應用擴展(app extensions),系統(tǒng)同樣可以啟動它并帶著一個包含這種intent的interaction對象。
Maps和Siri都支持汽車預約,用戶同時也可以使用Maps來進行餐館的預定。你的Intents extension使用同樣的方式處理來自于Map應用的交互或Siri的請求。如果你定制了用戶界面,你的Intents UI extension也可以根據請求的來源-Siri或Maps-來進行差異化的配置。
學習如何支持SiriKit并給用戶提供全新的使用你服務的方式,請閱讀SiriKit Programming Guide。當你準備好實現一個處理各種各樣intents的應用擴展(app extensions),請閱讀Intents Framework Reference和Intents UI Framework Reference。
Proactive Suggestions
iOS10引入了新的方式來提高用戶與你應用的互動:通過在合適的時機向用戶展示你的應用。如果你在iOS9中采用了應用搜索,通過Spotlight和Safari搜索結果、Handoff、Siri建議,你能夠給予用戶更加深層的對活動和內容的訪問能力。在iOS10和未來的版本中,你可以提供“用戶能在你的應用做什么”這樣的信息,這可以幫助系統(tǒng)在更多的地方推薦你的應用,比如鍵盤相關的QuickType建議, Maps和CarPlay,應用切換頁面,Siri交互,(為媒體播放類應用) 鎖屏界面。這些提高和系統(tǒng)集成度的功能被許多技術支持,比如NSUserActivity,Schema.org定義的web標記, 和定義在Core Spotlight、MapKit、UIKit、Media Player 框架中的API。
在iOS10中,NSUserActivity對象包含一個mapItem屬性,它允許你提供一個可以在其它環(huán)境中使用的位置信息。例如,如果你的應用程序顯示酒店評論,你可以使用mapItem屬性來保存用戶正在查看酒店的位置,這樣,當用戶切換到一個旅行規(guī)劃應用,該酒店的位置會被自動提供。如果你支持應用搜索,你可以使用CSSearchableItemAttributeSet中新的基于文本的地址組件屬性,比如thoroughfare和postalCode,來全面地指定用戶可能想去的位置。要注意的是當你使用了mapItem屬性,系統(tǒng)也會自動將其填入contentAttributeSet屬性.
為了和系統(tǒng)分享位置信息,一定要指定latitude和longitude值,并將其加入CSSearchableItemAttributeSet中定義的地址組件屬性。它也建議你為namedLocation屬性提供一個值,以便用戶可以查看到這個位置的名稱。你同樣可以提供值給phoneNumbers屬性,這樣用戶就可以使用Siri來發(fā)起一個基于位置的呼叫。
在iOS9中,為你網頁中的結構化數據添加標記可以豐富用戶在Spotlight和Safari中看到的搜索結果。在iOS10中,你可以使用Schema.org中定義的位置相關的詞表,比如PostalAddress,來進一步提高用戶的體驗。例如,如果用戶在你的網站上看到一個位置說明,那么當用戶使用Maps應用的時候,系統(tǒng)會提示相同的位置。需要注意的是,Safari同時支持Schema.org詞表的JSON-LD和Microdata編碼。
UIKit在UITextInputTraits協(xié)議中引入textContentType屬性,使你可以指定希望用戶在文本區(qū)域中輸入內容的語義。當你提供了這個信息,系統(tǒng)在某種情況下可以自動選擇適當的鍵盤,提高鍵盤的輸入校正,主動整合從其它app和網站獲取的信息。例如,如果你使用UITextContentTypeFullStreetAddress來通知系統(tǒng)你希望用戶在文本輸入區(qū)框中輸入一個完整的地址,系統(tǒng)就可以將用戶最近瀏覽的地址提示給他本人。
如果你的應用是媒體播放器之類的,你可以使用MPPlayableContentManager中相關的API,iOS10可以幫助你在鎖屏的時候實現查看專輯封面和媒體播放的功能。
如果你的ride-sharing應用使用MKDirectionsRequestAPI,那么當用戶有可能叫車的時候,iOS10可以在應用切換界面顯示你的應用。為了注冊成一個乘車分享服務的提供方,你需要在Info.plist文件中將MKDirectionsApplicationSupportedModes關鍵字指定為MKDirectionsModeRideShare。如果你的應用只支持共享乘車,系統(tǒng)將會以“Get a ride to...”這樣開頭的文本來推薦你的應用。如果你的應用同時支持共享乘車和其它交通方式(比如汽車或自行車),系統(tǒng)將會使用“Get directions to...”這樣的文本。需要注意的是,你收到的MKMapItem對象有可能不包括經緯度信息,并且MKMapItem需要地理編碼。
Integrating with the Messages App
在iOS10中,你可以創(chuàng)建一個應用擴展(app extensions)來和Messages應用進行交互,比如讓用戶發(fā)送文本、stickers、媒體文件、交互式消息。你也可以支持交互式的消息,這個更新是每個收件人對消息的響應。你可以創(chuàng)建兩種類型的應用擴展(app extensions):
- Sticker pack給用戶提供了一套可以被加在消息內容上的貼紙。
- iMessage app現在能讓你在其內部提供一個用戶界面,用于在一次會話中創(chuàng)建一個sticker的瀏覽器,這個瀏覽器可以創(chuàng)建、發(fā)送、更新包括文字、stickers、媒體文件在內的交互式信息。
當用戶在iMessage應用中的時候,應用同樣可以幫助用戶搜索保存在和你應用相關聯(lián)的網站中的圖片。
你可以在不寫任何代碼的情況下創(chuàng)建一個Sticker包:簡單的拖拽圖片到Xcode中Stickers asset catalog的Sticker Pack folder就可以了。
你可以使用Messages框架(Messages.framework)中提供的API來開發(fā)一個iMessage應用。想學習有關Messages框架的知識,你可以查看Messages Framework Reference。有關創(chuàng)建應用程序擴展(app extensions)的一般信息,你可以查看App Extension Programming Guide。
如果你的app提供了可以在Messages中分享的圖片,然后你希望用戶可以在不離開Messages應用的情況下通過Spotlight進行通用圖片查找(就是這種,“#images”),那么第一步是創(chuàng)建一個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,它支持連續(xù)的語音識別,可以幫助你實現一個有語音識別并轉換為文字這樣功能的應用。使用Speech框架(Speech.framework)中的API,你可以對實時語音或錄制音頻進行語音轉錄。例如,你可以獲得一個語音識別器,然后像如下代碼一樣開始簡單的語音轉錄:
let recognizer = SFSpeechRecognizer()
let request = SFSpeechURLRecognitionRequest(url: audioFileURL)
recognizer?.recognitionTask(with: request, resultHandler: { (result, error) in
print (result?.bestTranscription.formattedString)
})
正如訪問其它類型受保護的數據,比如日歷數據和相冊數據,執(zhí)行語音識別需要用戶的許可(有關訪問受保護數據類的更多信息,請查看Security and Privacy Enhancements)。對于語音識別來說,獲取權限是必須的,因為考慮到識別精確度,數據會被傳送并臨時性的存儲在蘋果的服務器上。為了獲取用戶的許可,你需要把NSSpeechRecognitionUsageDescription關鍵字添加到你應用的Info.plist文件中。
當你在你的應用中采用語音識別的時候,務必向用戶說明他們的講話應該是能被認可的,而且他們在那個時候不應該有敏感的言論。
Wide Color
大部分圖像框架貫穿整個系統(tǒng),包括Core Graphics,Core Image,Metal,AVFoundation在內的框架極大的改善了對更加廣泛的像素格式和寬色域色彩空間的支持。通過在整個圖形堆棧(graphics stack)擴展這個行為,讓設備支持更廣泛的色彩顯示變的前所未有的簡單。此外,UIKit把使用新的擴展sRGB色彩空間變的標準化,使sRGB顏色和其它顏色的混合變的簡單,更寬的色域顯示沒有顯著的性能損失。
以下是開始使用Wide Color的一些最佳實踐。
- 在iOS10中,UIColor類使用擴展的sRGB色彩空間,它的初始化不再限制組成值在0.0-1.0之間。如果你的應用依賴UIKit來限制組成值(無論你是創(chuàng)建一個顏色還是請求一個顏色的組成值),你需要在適配iOS10的時候改變你應用的行為。
- 當你在iPad Pro(9.7英寸)上執(zhí)行一個UIView的自定義繪圖操作的時候,默認的繪圖環(huán)境是用擴展的sRGB顏色域。
- 如果你的應用渲染自定義的圖像,請使用新的UIGraphicsImageRenderer類來進行管理,無論目標位圖是用擴展值域還是標準值域格式。
- 如果你在一個廣色域設備上使用低級別的API(比如Core Graphics或Metal)來進行圖片加工,你需要使用一個擴展范圍的顏色域和支持16位浮點的像素格式來組成數值。當限制顏色值是必須的,你應該明確這樣做。
- Core Graphics,Core Image,Metal Performance Shaders提供新的簡單的選擇來處理顏色和圖片色彩空間的轉化。
Adapting to the True Tone Display
真色調(True Tone)顯示使用環(huán)境光傳感器,可以做到配合當前環(huán)境的光線條件自動調節(jié)顯示的顏色和強度。為了確保你的應用在真色調(True Tone)提供的標準色改變功能下能正常工作,請?zhí)砑?a target="_blank" rel="nofollow">UIWhitePointAdaptivityStyle關鍵字到你的Info.plist文件下,來描述你應用的原始視覺內容。比如:
- 如果你的應用是照片編輯類,顏色保真度就比自適應環(huán)境中的白點要重要。對于這種情況,你可以使用UIWhitePointAdaptivityStylePhoto類型來減少系統(tǒng)提供的真色調調整的強度。
- 如果你的應用是閱讀類,和環(huán)境中的白點保持一致對用戶來說就是有益的。對于這種情況,你可以使用UIWhitePointAdaptivityStyleReading類型來增加系統(tǒng)提供的真色調調整的強度。
App Search Enhancements
對于應用搜索,iOS10和Core Spotlight框架引入了一些增強功能:
- 應用內搜索
- 搜索延長
- Crowdsourcing deep link popularity with differential privacy
- 確認結果的可視化
新的CSSearchQuery類支持搜索那些你用Core Spotlight API指出的應用內內容。使用這些API可以淘汰你應用中單獨的搜索索引,以及更好的利用Spotlight強大的搜索技術,同時,匹配規(guī)則允許用戶在不離開你應用的條件下搜索內容,就像他們在Mail,Messages和Notes中體驗到的一樣。
在iOS9中,使用搜索API(比如Core Spotlight,NSUserActivity和web markup)在你的應用做內容索引,可以使用戶通過Spotlight和Safari搜索到這些內容。在iOS10中,你可以使用新的Core Spotlight符號來延續(xù)一個用戶的搜索,從Spotlight開始直到用戶打開你的應用。為了支持這個特性,需要向Info.plist文件中添加CoreSpotlightContinuation關鍵字,并把它設置為YES,然后更新你的代碼來處理這種延續(xù)活動的類型CSQueryContinuationActionType。application:continueUserActivity:restorationHandler:方法中收到的NSUserActivity對象中的用戶信息字典里面包括CSSearchQueryString關鍵字,通過這個關鍵字取出來的值是一個包含用戶查詢信息的字符串。
iOS10引入了一種差異化的私有方式來幫助改善應用搜索內容的排名。iOS提交差異化的私有哈希表的子集到蘋果的服務器上,比如用戶使用你的應用,比如一個包含深鏈接URL的NSUserActivity對象,這個對象中eligibleForPublicIndexing屬性會被設為YES,這樣的信息會被提交給iOS。差異化的私有哈希表允許蘋果來計算受歡迎的深鏈接和無法與用戶關聯(lián)起來的鏈接的頻率。
當你使用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在任何背景下都看起來很好,你可以在合適的時候指定widgetPrimaryVibrancyEffect或widgetSecondaryVibrancyEffect(使用這個屬性來替換已經棄用的notificationCenterVibrancyEffect屬性)。此外,widget目前包括顯示模式的概念(以NCWidgetDisplayMode為代表),顯示模式允許你描述多少內容是可用的,并且允許用戶來選擇緊湊的或是擴展的視覺效果。
Apple Pay Enhancements
在iOS10中,用戶可以從網頁上,或通過Siri和地圖的互動來使用Apple Pay進行簡單和安全的支付。對于開發(fā)者來說,iOS10引入了可以同時在iOS和watchOS上使用的新API,支持動態(tài)支付網絡的能力,和新的沙盒測試環(huán)境。
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。具體說來,PKPaymentAuthorizationController和PKPaymentAuthorizationControllerDelegate可用的特性由PKPaymentAuthorizationViewController和它的delegate提供,但這些并不依賴UIKit。雖然新的API只是對于要在watchOS和某些intents下支持Apple Pay才是必須的,但我們還是推薦對于所有的代碼都做適配,這樣你就可以用一個代碼庫提供更廣泛的Apple Pay支持。(要了解更多有關intents和Siri的集成,請查看SiriKit。)
PassKit框架也添加了這種特性,即允許卡片發(fā)行方在他們的應用中展示他們的卡片。具體而言,PKPaymentButtonTypeInStore按鈕類型允許你為一張卡顯示一個Apple Pay按鈕,presentPaymentPass:方法允許你以編程的方式展示一個卡片(presentPaymentPass:方法在PKPassLibrary中定義)。
當一個新的支付網絡變的可用,你的應用可以自動支持新的網絡而不需要你修改或重新編譯你的應用。availableNetworks方法讓你可以在運行時發(fā)現用戶設備上可用的網絡。此外,supportedNetworks屬性得到了擴展,它可以拿到一些支付提供商的名字并把它作為參數。你的應用可以自動的支持任何支付提供商支持的網絡。想了解更多,請查閱https://developer.apple.com/apple-pay/。
iOS10引入一個新的測試環(huán)境,它讓你可以直接在設備上測試卡片。測試環(huán)境會返回加密的測試支付數據。要使用此環(huán)境,請按照以下步驟:
1. 在iTunes Connect中創(chuàng)建一個測試用的iCloud賬戶。
2. 在你的設備上登錄這個賬號。
3. 設置用于測試所需的區(qū)域。
4. 使用https://developer.apple.com/apple-pay/中列出的測試卡片。
注意:當你切換iCloud賬戶,環(huán)境也會自動切換。
你還是必須使用實際卡片在生產環(huán)境中測試付款功能。
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文件中包含適當的目的字符串關鍵字來靜態(tài)的聲明你應用中打算用到的受保護數據類。例如,你必須包含NSCalendarsUsageDescription關鍵字來訪問用戶的日歷數據。如果你不包含明確目的的字符關鍵字,你的應用將會在訪問相關數據的時候退出。
CallKit
CallKit框架(CallKit.framework)使得VoIP應用能與iPhone UI整合到一起,從而給用戶帶來更好的體驗。使用這個框架來讓用戶在鎖屏頁面查看和接聽打來的VoIP電話,并在Phone應用的個人收藏和最近通話視圖中管理來自VoIP通話的聯(lián)系人。
CallKit框架同樣也引入了應用擴展(app extensions),這個擴展可以進行呼叫攔截和來電識別。你可以創(chuàng)建一個應用擴展來將電話號碼和名稱關聯(lián)起來,或是告訴系統(tǒng)什么樣的號碼需要被攔截。
News Publisher Enhancements
News Publisher使用Apple News Format來讓發(fā)表設計精美的新聞、雜志、網頁內容到Apple News變的簡單。從各大雜志或新聞機構這種獨立出版商,到個人博客,任何人都可以注冊。要開始使用或了解更多最新信息,請訪問https://newsresources.apple.com。
Video Subscriber Account
iOS10引入了Video Subscriber Account框架(VideoSubscriberAccount.framework)來幫助應用支持流媒體認證或認證視頻點播(也被稱為TV Everywhere)與他們的有線電視或衛(wèi)星電視供應商認證。對于那些用戶注冊一次就能解鎖流媒體訂閱服務的應用來說,使用這個框架中的API可以幫助你支持單一登錄體驗。
App Extensions
iOS10為那些可以創(chuàng)建應用擴展的人引入了一些新的擴展點,比如:
- Call Directory
- Intents
- Intents UI
- Messages
- Notification Content
- Notification Service
- Sticker Pack
此外,iOS10對于第三方鍵盤擴展應用有如下增強:
- 通過使用UITextDocumentProxy類的documentInputMode屬性,你可以自動檢測文檔的輸入語言,然后改變你的鍵盤擴展來匹配這種序言(如果支持)。如果你使用這種方式檢測輸入語言,你可以做每種語言的鍵盤切換,就像自帶的Messages應用那樣。
- 新的handleInputModeListFromView:withEvent:方法讓鍵盤擴展顯示系統(tǒng)的鍵盤選擇菜單(that is, the globe key menu)。
一個鍵盤擴展應該把全局鍵放在相同的位置,就像系統(tǒng)中對于每個方向上全局鍵的顯示一樣。并且,如果你需要提供一個自定義的按鍵-比如支持鍵盤設置的按鍵-你
應該將這個按鍵放在相同的位置,就像系統(tǒng)鍵盤的聽寫鍵一樣。
要了解更多有關創(chuàng)建應用擴展的一般內容,請查看App Extension Programming Guide。
Additional Framework Changes
未完待續(xù)...