iOS9已經發布一段時間了,我也在最近升級了Xcdoe 7.0正式版,升級後才發現又有了很多奇妙的變化,於是查看官方文檔的一些解釋,順便做了一些翻譯,和大家分享一下(轉載請注明出處)。
iOS9增強了對iPad用戶的多任務處理如滑動(Slide Over),拆分視圖(Split View)和畫中畫(Picture in Picture)的體驗。該滑過功能允許用戶選擇一個次要的App並快速地與之交互。拆分視圖功能讓用戶能夠同時並排開啟兩個App。畫中畫功能(也稱為PiP)允許用戶觀看視頻的一個窗口上面浮動其他屏幕上的App。
你沒有辦法幫助用戶決定他們什麼時候想在屏幕的同時顯示兩個App,因為這一切都是用戶行為你無法控制。盡管如此,我們還需要做一下幾件事,來確保用戶有一個完美的多任務處理的體驗。
1. 非常重要的是,你的App必須合理地利用的系統資源,以便他可以有效地運行一個App的同時,還可以與正常的運行另一個App。根據內存壓力,系統預先退出消耗最大內存的App。有關應用能耗的一些問題,請參閱iOS App能耗指南。
2. 如果你還沒有准備擁抱iOS 9所帶來的變化,那麼一定要采用SizeClasses,使你的App在分屏視圖下看起來不錯。
想了解更多關於你的App應當如何響應用戶的拆分視圖與滑動,請參考iPad多任務增強。
與拆分視圖,滑動一樣,用戶控制他們是否在看視頻的同時以畫中畫的形式啟動另一個應用程序來運行。如果視頻播放不是你的應用程序的主要功能,那麼請支持畫中畫。
當用戶選擇畫中畫,使用AVKit或者AV Foundation的API。視頻播放類中定義的不支持畫中畫的媒體播放器框架在iOS9中將會被棄用。要了解如何准備畫中畫視頻播放的應用程序,請參看畫中畫快速指南。
3D Touch給用戶帶來了更多的交互維度。在支持的3D Touch設備上,用戶可以從主屏幕上按壓App圖標可以快速選擇App特定的操作。在一個應用程序,人們可以使用按壓操作來獲得一個項目的預覽,在一個單獨的視圖中打開該項目,並響應相應的操作。
iOS9提供了以下的3D Touch的API:
1. 主屏幕快速響應API提供了添加快捷方式到你的應用程序圖標,預測用戶行為並提供更加快捷的人機交互(參看 UIApplicationShortcut * API,例如UIApplicationShortcutItem)。
2. UIKit中的peek和pop API讓你能夠輕松地獲得額外的內容在你的App(參看UIViewControllerPreviewing,UIViewControllerPreviewingDelegate以及UIViewController中新的方法)。使用peek快速響應API中提供一個press-enabled替換應用程序的touch-and-hold方法(參看 UIPreview * API,例如UIPreviewAction和UIPreviewActionItem)。
3. Web視圖peek和pop API,可以啟用的HTML鏈接的預覽信息(參看 WKWebView)。
4.UITouch中的force屬性允許你添加自定義的force-based到你的App的用戶交互中。
不管你采用哪些API,你的App必須在runtime時檢查3D Touch的可用性。要了解更多關於支持3D Touch,參看在iPhone上使用3D Touch。對於你的應用程序中使用3D Touch API的例子,參看ApplicationShortcuts中使用UIApplicationShortcutItem和ViewControllerPreviews中使用的UIViewController previewing API。
搜索(Search)在iOS 9中賦予了用戶更加出色的方式來訪問你的App內部信息,即使它沒有安裝(Installed)。當你的內容是可搜索狀態時,用戶可以通過Spotlight,Safari,Siri在你的App裡訪問活動(Activities)及其深度內容(Content Deep)。使用搜索的相關API,決定內容索引(Indexed)情況,即在搜索結果中顯示什麼信息,用戶從你的App或者網站獲得重定向後的結果。
在iOS 9中整合搜索內容其實很簡單:你在執行搜索時不需要任何之前的經驗,並且大多數開發者發現,只需要幾個小時,使他們的內容可以普遍的成為可搜索的狀態。要了解如何讓你的應用App和網站內容的可搜索,參看App搜索編程指南。
在iOS 9中使用搜索時,隱私是一個重要的特性。給用戶最好的搜索體驗的同時,也保護他們的隱私數據,iOS 9提供了以下可用索引:
1. 私有的設備索引(A private on-device index)。每個設備包含一個私有索引,該信息不會與Apple設備間共享或同步。當你創建一個項目可以在用戶的設備索引時,保證只有該用戶可以查看搜索結果。
2. Apple的服務器端索引(Apple’s server-side index)。服務器端的索引只存儲你已經適當地在網站上標明的公開數據。
iOS 9提供了以下API來幫助你進行內容搜索:
1.NSUserActivity類包括新的方法和屬性,可以幫助你構建項目索引等用戶執行的活動內容,例如訪問一個導航點或創建和查看內容。幾乎每一個App可以利用NSUserActivity API,提供有用的內容給用戶。
2. Core Spotlight framework(CoreSpotlight.framework)提供的API,可以幫你添加App的特定內容到設備上的索引,並啟用深層鏈接到你的App。要了解更多關於Core Spotlight framework API,參看Core Spotlight framework參考。
3. Web markup可以讓你相關的網頁內容成為可搜索狀態,並幫助你豐富用戶的搜索體驗。要了解如何標記你的網站,參看標記網頁內容。
此外,加入了Smart App Banners為用戶提供了一種簡單的方法,直接鏈接到你的應用程序(了解如何使用Smart App Banners,參看App與Smart App Banners)。
4. 通用鏈接(Universal Links),讓你使用標准的HTTP或HTTPS鏈接替換自定義URL方案。通用鏈接適用於所有用戶:如果用戶已經安裝了你App,鏈接直接帶他們到你的App;如果他們沒有安裝您的App,鏈接將會在Safari中打開你的網站。要了解更多關於通用鏈接,參看通用鏈接。
iOS 9包括一些技術改進,使它更容易實現你的游戲圖形和音頻功能。充分利用高層框架易於開發、或使用新的底層增強功能利用GPU的性能。
GameplayKit framework(GameplayKit.framework)提供了基礎技術用於構建游戲。使用GameplayKit機制開發游戲,並配合任何一個高級圖形引擎,如SceneKit或SpriteKit,建立一個完整的游戲。該框架提供構建模塊,用於創建游戲的模塊化架構,其中包括:
1. 隨機工具(Randomization Tool)用於添加一個不可預測的但又不影響調試的游戲。
2. 實體-組件(Entity-Componen)架構設計的游戲代碼重用性更好。
3. 狀態機(State Machine)在游戲系統中可以避免復雜的程序代碼。
GameplayKit還包括常見的游戲算法的標准實現,這樣你就可以花更少的時間閱讀官方文檔,花更多的時間去研究你的游戲機制,而不是把時間浪費到其他重復的工作上。在GameplayKit中幾個標准算法的實現列表如下。
1. 回合制人工智能對抗游戲中的上下限(Minmax)。
2. 代理模擬(Agent simulation),讓你描述的高層次目標的條件運動行為進行自動跟隨。
3. 規則系統用於構建數據驅動(data-driven)游戲的邏輯、模糊推理以及自發行為。
想了解更多關於 GameplayKit, 參看 GameplayKit編程指南和GameplayKit Framework參考,以及GameplayKit示例代碼:
1.FourInARow: Using the GameplayKit Minmax Strategist for Opponent AI.
2. AgentsCatalog: Using the Agents System in GameplayKit.
3. DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit.
Model I/O framework(ModelIO.framework)提供了一個系統級的3D Model Assets和相關資源。可以使用此框架處理幾種類型的任務,如:
1. 從流行的編輯軟件和游戲引擎所使用的文件格式中導入網格數據(Mesh Data)、材料描述(Material Descriptions)、照明(Lighting)和相機設置(Camera Setting)以及其他場景信息。
2. 處理或產生這樣的數據, 例如,烘培(Bake)照明信息成網狀,或創建程序天空的紋理。
3. 將MetalKit,GLKit,SceneKit的API,有效裝載資產數據到GPU的緩沖區一起進行渲染。
4. 以任何一種文件格式導出處理或產生的資產數據。
要想了解更多關於 Model I/O,參看Model I/O Framework參考。
MetalKit framework(MetalKit.framework)提供了一組實用方法和類,減少創建Metal App所需的工作。 MetalKit提供了三個關鍵領域開發支持:
1. 紋理加載幫助你的App輕松且異步加載各種來源的紋理。支持常見的文件格式如PNG和JPEG,以及特定的紋理格式如KTX和PVR。
2. Model的處理提供了Metal-Specific功能,可以很容易與Model I/O資源對接。使用這些高度優化的功能和對象在Model I/O網格和Metal緩沖區之間高效地傳輸數據。
3. View Management提供了Metal View標准的實現,這大幅的降低了創建一個圖形渲染App所需的代碼量。
想了解更多關於MetalKit的API,參看MetalKit Framework參考,更多關於Metal的基本信息,參看Metal編程指南,Metal Framework參考,Metal著色指南
Metal Performance Shaders framework(MetalPerformanceShaders.framework)提供了高度優化的計算和圖形著色器,輕松高效地集成到你的Metal App上。這些數據並行著色器(Data-Parallel Shaders)進行了專門調整,以充分利用每一個Metal支持的iOS GPU獨特的硬件優勢。
使用Metal Performance Shader類,可以實現對所有支持的硬件發揮最佳的性能,而無需針對特定的iOS GPU更新你的著色器代碼。 MetalPerformanceShader對象完美融入你的Metal的App,並可以使用Metal resource對象,例如緩沖區和紋理使用。
常見的Metal Performance Shaders framework包括:
1. 高斯模糊(Gaussian blur)——MPSImageGaussianBlur。
2. 圖像直方圖(Image histogram)——MPSImageHistogram。
3. Sobel邊緣檢測(Sobel edge detection)——MPSImageSobel。
Metal framework(Metal.framework)增加了新的功能,使你的圖形渲染的App看起來更棒,且擁有更高性能。這些功能包括:
1. 改進了Metal著色語言和Metal標准庫。
2. 計算著色器現在可以寫更廣泛的像素格式。
3. 加入私人和深度模板紋理,以配合OS X。
4. 增加Depth Clamping以及獨立的正面和背面模板參考值以改善陰影質量。
SceneKit framework(SceneKit.framework)在iOS9中的新特性包括:
1. Metal渲染的支持。參看SCNView和SCNSceneRenderer類在支持的設備上實現Metal高性能的渲染。
2. Xcode中新場景編輯器。在Xcode新場景編輯器下以更少的代碼,更短的時間構建游戲和交互式3D App(相關示例代碼下載 Fox: Building a SceneKit Game with the Xcode Scene Editor)。
3. 定位音頻。參看SCNAudioPlayer和SCNNode類,該類可以自動跟蹤場景中的聽眾位置,以增加空間的音頻效果。
更多的細節和新功能,參看SceneKit Framework參考。
SpriteKit framework(SpriteKit.framework)在iOS9中的新特性包括:
1.Metal渲染的支持。在支持Metal設備自動使用Metal渲染,即使你使用自定義的OpenGL ES著色器。
2.改進場景編輯器,並在Xcode中加入新的動作編輯器。以更少的代碼,更短的時間構建游戲和交互式2D App(相關示例代碼下載 DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit)。
3.攝像機節點(即SKCameraNode對象),使其更容易創建scrolling games。簡單地將相機節點放入你的場景中並設置攝像頭的屬性。
4.定位音頻。了解如何添加空間音頻效果且自動跟蹤場景中的聽眾位置,參看SKAudioNode類參考。
更多的細節和新功能,參看SpriteKit Framework參考。
應用瘦身幫助你開發不同的平台的App提供一個優化的自動安裝。應用瘦身包括以下內容:
1. Slicing。納入資產目錄,並為平台標記一個只允許App Store提供安裝的標記。
2. 按需加載資源(On-Demand Resources)。主機允許附加內容存儲在iTunes App Store庫中的App獲取所需的資源使用異步下載和安裝。更多地了解這項技術,參看 按需加載資源指南。
3. Bitcode。當我們提交程序到App store上時,Xcode會將程序編譯為一個中間表現形式(bitcode)。然後App store會再將這個botcode編譯為可執行的64位或32位程序。
要了解更多有關應用瘦身,參看 應用瘦身(iOS, watchOS)。
iOS的9帶來了從右到左的語言全面的支持,這使得它更容易為你提供一個翻轉的用戶界面。 例如:
1. 標准UIKit的控件右到左的上下文自動翻轉。
2.UIView定義語義內容屬性允許你指定在從右到左的上下文中特定的視圖應該如何出現。
3.UIImage添加imageFlippedForRightToLeftLayoutDirection方法,該方法可以很容易地在適當時候以編程方式的翻轉圖像。
要了解更多關於翻轉的用戶接口,參看支持從右到左(RTL)語言。
強制使用應用安全傳輸(ATS)是應用程序和後端之間的安全連接的最佳做法。 ATS防止意外洩露,提供安全的默認行為,並且容易被采納。這也是iOS 9和OS X v10.11中默認開啟的。不管你正在創建一個新的App或者正在更新現有的App,你都應當盡快采用ATS。
如果你正在開發一個新的應用程序,你應當考慮只使用更安全的HTTPS協議。如果你有一個現有的App,從現在開始你應該盡可能多使用HTTPS協議,盡快給應用剩余部分制定遷移計劃。此外,通過高級API的通信需要使用TLS 1.2與前向保密(forward secrecy)。如果你不這樣做,則會報錯。如果你的應用程序需要請求不安全的域名,那麼你必須在Info.plist文件中指定這一域名。
iOS 9引入了一些新的擴展點(一個擴展點定義了使用規則和提供api來使用當您創建一個應用程序擴展區域)。具體做法是:
1. 使用包隧道提供者(Packet Tunnel Provider)擴展點來實現客戶端定制的VPN隧道協議。
2. 使用這個應用程序代理提供者(App Proxy Provider)擴展點來實現一個自定義的客戶端透明的網絡代理協議。
3. 使用過濾數據提供者(Filter Data Provider)和過濾器控制提供者(Filter Control Provider)擴展點來實現動態、設備內置網絡內容過濾。
每個網絡的擴展點都需要從Apple獲得特別許可。
1. 使用共享的鏈接擴展點,使用戶能夠看到在Safari共享鏈接的內容。
2. 使用內容阻止擴展點給 Safari 阻止列表,描述你希望在用戶在浏覽網頁阻止的內容。
索引維護(Index Maintenance)擴展點來支持應用數據的編制索引,而無需啟動App。
音頻單元擴展點讓你的App提供的樂器,聲音效果,聲音發生器,這些更多的使用在像GarageBand,Logic,以及其他音頻單位(Audio Units)App。擴展點也為iOS帶來了一個完整的音頻插件模型,讓你在App Store上銷售的自己的音頻單位(Audio Units)。
像了解更多關於創建應用程序擴展,參看 App擴展編程指南。
iOS 9引入了聯系人和聯系人UI framework(Contacts.framework和ContactsUI.framework),它提供了現代的面向對象化的替代地址簿(Address Book)和地址簿UI framework。要了解更多信息,參看Contacts Framework參考和ContactsUI Framework參考。
Watch Connectivity framework(WatchConnectivity.framework)提供了iPhone和配對Apple Watch之間的雙向通信。該框架用於你的iOS應用和相對應的Watch應用之間的協調活動。該框架支持App在運行、後台以及其他情況下的即時通訊(immediate messaging)。要了解更多信息,請參看Watch Connectivity Framework參考。
鑰匙串(Keychain)提供了更多的項目保護選項和一個新型Secure Enclave的加密密鑰。具體做法是:
1.新的訪問控制列表約束,允許創建約束只有Touch ID或只有密碼。
2.新的Touch ID無效的鑰匙串項目約束,當指紋被添加或刪除時。
3.支持App-Provided Entropy 密鑰鏈項加密使用App密碼訪問控制列表的選項。
4.支持身份驗證上下文(Context),允許你分開調用身份驗證SecItem Calls。
5.支持密鑰生成和使用中Secure Enclave的kSecAttrTokenIDSecureEnclave屬性。需要注意的是獲得這些密鑰可以通過訪問控制列表支持的所有限制進行控制。
想了解更多Swift的新功能,參看Swift Language.
除了上述的大的變化,iOS 9包括許多其他的改進。
AV Foundation Framework(AVFoundation.framework)增加了新的AVSpeechSynthesisVoice API,它使你可以通過標識指定的聲音,而不是按語言。您也可以使用name和quality屬性來獲取語音信息。
AVKit Framework(AVKit.framework)引入了AVPictureInPictureController和AVPlayerViewController類,這有助於你參加畫中畫。有關畫中畫的更多信息,向前參看 iPad多任務增強。
如果你有CloudKit App,你可以使用CloudKit web服務或CloudKit JS JavaScript庫,為用戶提供一個web界面訪問你的App相同的數據。你必須有已經創建的數據庫使用web界面來實現取回(Fetch),創建(Create)、更新(Update)和刪除記錄(Delete Records),區域(Zones),和訂閱(Subscriptions)。有關更多信息,請參看JavaScriptReference/index.html" target="_blank">CloudKit JS參考,CloudKit Web服務,CloudKit介紹。
Foundation框架(Foundation.framework)包括以下增強功能:
1. API,用於按需加載(On-Demand)的一個NSBundle資源。
2.字符串文件支持上下文相關(Context-Dependent)的可變寬字符串。
3. NSProcessInfo API,用於電源和散熱管理。
HealthKit Framework(HealthKit.framework)包括以下增強功能:
1.新的Tracking Areas支持生殖健康和紫外線照射等領域。學習新的常數描述特征(Describe Characteristics)、數量(Quantities)、和其他項目,參看HealthKit常量參考。
2.支持新的批量刪除(Bulk-Deleting)條目與Tracking刪除條目。想了解更多信息,請參看HKHealthStore類中HKDeletedObject、HKAnchoredObjectQuery、deleteObjects:withCompletion:,deleteObjectsOfType:predicate:withCompletion:和deleteObjectsOfType:predicate:withCompletion:方法。
Local Authentication Framework(LocalAuthentication.framework)包括以下增強功能:
1.得到當前的一組登記的指紋,當手指被登記或刪除時,應用程序可以改變行為。
2.支持從代碼取消用戶提示。
3.支持評估鑰匙串訪問控制列表,並在鑰匙串調用中使用的認證上下文(Authentication Context)。
4.支持可重用的Touch ID匹配。一個之前的手機解鎖匹配可以使用evaluateaccesscontrol:和evaluatePolicy:localizedReason:reply:方法。
MapKit Framework(MapKit.framework)包括一些補充,可以幫助你提供更豐富的用戶體驗。具體做法是:
1. MapKit支持公交查詢並在Map上顯示公交線路。
2.地圖視圖(Map View)支持了3D Flyover模式。
3.注釋(Annotations)可以完全定制。
4.搜索MapKit和CLGeocoder結果可以提供的相應時區。
PassKit Framework(PassKit.framework)包括一些關於增強Apple Pay的補充,具體做法是:
1.在iOS 9中,Apple Pay支持查詢存儲借記卡(Store Debit)和信用卡(Credit Cards)。想了解更多信息,參看PKPaymentRequest 類參考中的"Payment Networks"。
2.發卡機構和支付網絡可以直接在他們的App中向Apple Pay添加卡。想了解更多信息,參看PKAddPaymentPassViewController類參考。
Safari Services Framework(SafariServices.framework)包括以下增強功能。
FSafariViewController可以用來在你的App中顯示網頁內容。它與Safari浏覽器共享Cookie和其他網站數據,並擁有許多的Safari浏覽器的強大功能,如Safari自動填充(AutoFill)和Safari閱讀器(Reader)。不同於Safari浏覽器是,SFSafariViewController的UI是專為顯示一個頁面,采用了完成按鈕讓用戶可以回到App中去。
如果你的App僅僅是顯示網頁內容,但不自定義內容,可以考慮將你的WKWebView或基於浏覽器的UIWebView更換為SFSafariViewController。
UIKit Framework(UIKit.framework)包括許多增強功能,比如:
1. UIStackView類,幫助你在堆棧上管理一組子視圖(Subviews),可以水平或垂直排列。
2. 在新的UIView中布局錨點(Layout Anchors)(如leadingAnchor 和 widthAnchor),以及NSLayoutAnchor和NSLayoutDimension,所有這一切都使布局更加的簡單。
3. 新的布局指南,幫助你在一個視圖(View)應該畫的內容(Content)中采用可讀的內容邊緣(Content Margins)和定義(Define)。有關更多信息,請參看UILayoutGuide。
4. 新UIApplicationDelegate方法可以用來打開一個文檔(Document)並修改它,而不是使用文檔的一個副本。支持open-in-place功能,也在App中的 info.plist 文件中加入了一個鍵為LSSupportsOpeningDocumentsInPlace和值為YES的字段。
5. UITextInputAssistantItem類,幫助你在快捷鍵欄(Shortcuts Bar)中布置按鈕組(Bar Button Groups)。
6. 增強Touch事件,例如能夠獲得上次刷新顯示後可能發生的中間觸摸(Intermediate Touches)和觸摸預測(Touch Prediction)。
7. 增強UIKit動力學,比如支持不規則的碰撞邊界,以及新的 UIFieldBehavior 類,支持不同的可定制字段類型,並且在UIAttachmentBehavior中附加附件類型。
8. UIUserNotificationAction新特性,它可以讓你在用戶通知中進行文本輸入。
9. 新的NSDataAsset類,很容易獲取內容調整使適應你的設備的內存和圖形處理能力。
10. 所有標准UIKit Controls翻轉支持從右到左的語言。此外,導航(Navigation),手勢(Gestures),集合視圖(Collection Views)和表格單元布局(Table Cell Layouts)也能相應地翻轉。
以下API將被棄用:
1. 地址簿(Address Book)和地址簿UI框架(Address Book UI frameworks)將使用聯系人(Contacts)和聯系人UI框架(Contacts UI frameworks)來代替。
2. Foundation框架中的NSURLConnection將使用NSURLSession代替。
對於完整的特有API棄用列表,參看iOS 9.0 API Diffs。
本文主要基於蘋果iOS9官方文檔進行參考翻譯,詳細可參考
1.iOS9發布說明;
2.iOS 8.3與iOS 9.0 API變化;
3.iOS設備兼容性參考。