iOS 版本更新摘要(四)iOS 9.x

来源:http://www.cnblogs.com/akforsure/archive/2017/12/05/7988191.html
-Advertisement-
Play Games

[What's New in iOS 9.x](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP400161 ...


 [What's New in iOS 9.x](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW11 "What's New in iOS 9")

 

####iOS 9.0

#Multitasking Enhancements for iPad

 

  iOS 9 在 Slide Over, Split View, and Picture in Picture 這幾個方面對 iPad 進行了多任務處理的加強。Slide Over (分割)屬性可以讓你選到次要 app ,並且快速的與它交互。 Split View (分屏)屬性讓你可以在 iPad Air 2 的一個屏幕上同時操作兩個 app。Picture in Picture (畫中畫)屬性可以讓你在一個全局的懸浮框中看視頻,懸浮於別的 app 頁面上層。

    

  用戶自己決定什麼時候使用分屏工作,而你一無所知。儘管如此,你還是要做很多事情來給用戶更好的體驗:

    1. 你的 app 需要有效的運行,更好的和其他運行的 app 分享系統資源。記憶體有壓力時,系統會優先殺掉消耗記憶體較多的。至於如何開發出高效的 iOS Apps 你可以看 [*Energy Efficiency Guide for iOS Apps*](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/index.html#//apple_ref/doc/uid/TP40015243)

    2. 如果你的 app 還沒做好準備,那你最少要適配一下 Size Classes ,讓你的 app 在分屏時好看一些

 

  更多關於如何應對 Slide Over 和 Split View 的內容請看 [*Adopting Multitasking Enhancements on iPad*](https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145)

 

  和 Slide Over 和 Split View 一樣,用戶隨時都能根據自己的喜好去操作 PiP 中的視頻。這時,如果你有播放視頻功能,你啥都不用改,但是如果你有的話,你需要適配 PiP。你可以用 AVKit 或者 AV Foundation APIs,因為 Media Player framework 裡面回放的 API 在 iOS 9 中不支持 PiP,而且還被廢棄了。 更多請參考 [* Picture in Picture Quick Start *](https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForPictureInPicture.html#//apple_ref/doc/uid/TP40015145-CH14)

 

#3D Touch

  

  3D Touch 給了 iOS 9 用戶提供了一個新維度的交互方式。在支持該功能的設備上,你可以在手機主頁面的 app icon 上按壓觸髮指定的功能。用戶可以用不同的壓力來預覽一個條目的內容、打開一個單獨的頁面併進行相關操作。

  iOS 9 提供了以下的 3D Touch 的 API:

  1. 主屏上的快速操作 API 用來給你的 app 添加用戶可能或確定使用的快捷方式。(UIApplicationShortcut 的 API)

  2. UIKit 的 Peek 和 Pop API 讓你可以輕鬆的給用戶提供更多額外的內容(參考 UIViewControllerPreviewing, UIViewControllerPreviewingDelegate, 和 UIViewController 中新的 APIs)。使用 peek API 你可以提供一個壓力操作替換原有的點擊方式

  3. WebView 也支持 peek & pop API,你可以用它預覽 HTML 內容(WKWebView)

  4. UITouch 裡面的 force 屬性讓你可以自定義基於 force touch 的交互

 

  不管你是否用了 3D Touch 的 API,你都要在運行時判斷是否支持 3D Touch。API:[*Adopting 3D Touch on iPhone*](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/uid/TP40016543)demo:[*ApplicationShortcuts: Using UIApplicationShortcutItem*](https://developer.apple.com/library/content/samplecode/ApplicationShortcuts/Introduction/Intro.html#//apple_ref/doc/uid/TP40016545),[*ViewControllerPreviews: Using the UIViewController previewing APIs*](https://developer.apple.com/library/content/samplecode/ViewControllerPreviews/Introduction/Intro.html#//apple_ref/doc/uid/TP40016546)。

 

#Serach

 

  iOS 9 的搜索給用戶提供了全新的獲取 app 內部信息的途徑,即使他還沒安裝 app。當你將你的內容設置為可以搜索,用戶可以直通過 SpotLight、Safari 的搜索結果、Handoff 以及 Siri 建議應用這些渠道,直接訪問你 app 深處的內容。使用搜索相關的 API ,你可以決定在哪些內容上加索引、哪些信息可以放在搜索結果里以及用戶點擊搜索結果(from app or website)後可以重定向到哪裡。

 

  集成 iOS 9 的搜索是比較簡單的:你不需要任何搜索相關的經驗;很多開發者發現只要幾個小時就能配置好。想知道如何配置搜索的話,參考[*App Search Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/index.html#//apple_ref/doc/uid/TP40016308)。

 

  隱私是搜索功能一個重要的屬性。為了給用戶很好的搜索體驗時,保護他們的隱私,iOS 9 給出瞭如下的索引方式:

  1. 一個私有的基於設備的索引:每個設備都有一個私有的索引庫,這些信息不會給 Apple ,也不會同步給其他設備。當你標記一個用戶的私有設備索引時,只有這個用戶才能在搜索結果中見到他

  2. Apple 服務端的索引:服務端的索引僅僅存儲你在網站上標記的公開數據

 

  iOS 9 提供了一下的 APIs 幫助你設置搜索:

  1. 當用戶操作 app 查看或創建內容時,NSUserActivity 包含了很多新的方法和屬性來幫助你設置索引。每個 app 都可以使用 NSUserActivity APIs 來給用戶提供可用的信息

  2. CoreSpotlight.framework 提供了用於添加基於設備的 app 特定內容索引以及設置深度 app 內容鏈接的 API。[*Core Spotlight Framework Reference*](https://developer.apple.com/documentation/corespotlight)

  3. Web 的標記讓你可以關聯網站的內容到搜索中,以豐富搜索結果。[*Mark Up Web Content*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/WebContent.html#//apple_ref/doc/uid/TP40016308-CH8) 

  除此之外,添加一個 Smart App Banner,可以讓用戶更容易的鏈接到你的 app [*Promoting Apps with Smart App Banners*](https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html#//apple_ref/doc/uid/TP40002051-CH6)

  4. 通用鏈接使用標準的 https/http 鏈接代替 URLs schmes。這個鏈接在用戶安裝 app 時會直接進入 app;沒有安裝時會用 Safari 打開你的網頁。參考[*Support Universal Links*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12)

 

#Gaming

  

  iOS 9 包含了很多新的技術,幫你提升游戲的畫質和音效。不管是 frameworks 裡面的 APIs 還是 底層的 APIs,都可以用來釋放 GPU 的力量。

 

###GameplayKit

 

  GameplayKit.framework 提供了很多構建游戲的基礎技術。使用 GameplayKit 開發一些游戲機制,然後用任意一個上層引擎去合併它,構成一個完整的游戲。這個 framework 提供了構建游戲的模塊化基礎組建,包括:

  1. 隨機工具,用於增加游戲的不可預知性且不影響測試

  2. 實體系統,使游戲代碼復用性更好

  3. 狀態機,用於拆解複雜的代碼

 

  GameplayKit 也包含了一些基本的演算法。所以你會省讀書學習的時間,使用這些時間去做好你獨有的游戲。下麵列出一些標準的演算法介面:

  1. 一種小型的人工智慧,用於敵對的回合制游戲

  2. 一個代理模型,描述高級目標的自動移動行為(尋路功能咯)

  3. 規則系統用於,建立數據驅動的游戲邏輯、模糊推理和緊急行為

 

  參考[*GameplayKit Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/index.html#//apple_ref/doc/uid/TP40015172),[*GameplayKit Framework Reference*](https://developer.apple.com/documentation/gameplaykit)。

 

###Model I/O

 

  ModelIO.framework 提供了一個系統級別的 3D 模型的素材和依賴資源庫。你可以用用它來完成以下的任務:

  1. 導入網格數據、材質描述、光影、相機效果,以及來源於主流軟體和引擎其他場景相關信息

  2. 處理生成這些數據:烘焙一個網格或創建一個天空紋理

  3. 與 MetalKit, GLKit, 或者 SceneKit APIs 一起,有效的將資源文件載入到 GPU 緩衝區進行渲染

  4. 導出處理的或者生成的資源數據為任意一種文件格式

 

  參考[*ModelIO Framework Reference*](https://developer.apple.com/documentation/modelio)。

 

###MetalKit

 

  MetalKit.framework 提供了一系列實用的方法和類,用來減少開發一個 Metal app 的工作量。MetalKit 在這兩個方面給了開發支持:

  1. 紋理載入方面:幫助你的 app 輕鬆做到非同步載入紋理。不僅支持普通的 PNG、JPEG,特殊的紋理格式也支持,例如 KTX 和 PVR

  2. 模型處理方面:提供了 Metal 特有的方法,讓你可以更好的使用 Model I/O 的介面。使用高度優化的方法和對象在 Model I/O 網格 和 Metal 緩衝區之間傳輸數據

  3. 頁面管理方面:頁面管理器給了一個標準的 Metal view 的實現。這大大減少了圖形渲染 app 的開發時間

 

  參考[*MetalKit Framework Reference*](https://developer.apple.com/documentation/metalkit),[*Metal Programming Guide*](https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014221)。

 

###Metal Performance Shaders

 

  MetalPerformanceShaders.framework 提供了高度優化的計算和圖形著色器,這些都為高效集成到你的 app 中而設計。這些同步數據著色器都根據支持 Metal 的 iOS 設備進行了調整。

 

  使用 MetalPerformanceShaders.framework 中的了類,構建支持所有設備的性能最優的著色器,而不需要針對特定 iOS 設備改動你的代碼。MetalPerformanceShader 對象可以無縫的適配你的 app,包括可以被任何使用 Metal 資源的對象(比如緩衝區和紋理)。

 

  通用的 MetalPerformanceShaders.framework 提供的著色器如下:

  1. Gaussian blur(高斯模糊) - MPSImageGaussianBlur

  2. Image histogram(圖像直方圖) - MPSImageHistogram

  3. Sobel edge detection(索貝爾邊緣檢測) - MPSImageSobel

 

###New Features in Metal

 

  Metal.framework 加入了一些新的特性,是你的圖形渲染 app 看上去更好,運行也更有效。如下:

  1. 改進了 Metal Shading Language 和 Metal Standard Library

  2. 計算著色器現在可以寫入到更大的像素格式

  3. 新增了一些私有的、深度的模版材質與 OS X 保持一致

  4. 為改善陰影質量,增加了深度夾緊和前、後向的模板參考值

 

###New Features in SceneKit

 

  SceneKit.framework 為 iOS 9 增加了以下特性:

  1. Metal 渲染的支持:[SCNView](https://developer.apple.com/documentation/scenekit/scnview),[SCNSceneRenderer](https://developer.apple.com/documentation/scenekit/scnscenerenderer)支持對應機型高性能的 Metal 渲染

  2. Xcode 新增了一種場景編輯器:使用 Xcode 可以使用很少的代碼和時間來創建游戲和支持 3D 交互 app。demo [*Fox: Building a SceneKit Game with the Xcode Scene Editor*](https://developer.apple.com/library/content/samplecode/Fox/Introduction/Intro.html#//apple_ref/doc/uid/TP40016154)

  3. 位置音效:使用[SCNAudioPlayer](https://developer.apple.com/documentation/scenekit/scnaudioplayer),[SCNNode](https://developer.apple.com/documentation/scenekit/scnnode)可以添加空間音效,並跟蹤聽者的位置自動調整

 

###New Features in SpriteKit

 

  SpriteKit.framework 在 iOS 9 增加了以下功能:

  1. Metal 渲染的支持:在有 Metal 設備上,支持對應機型高性能的 Metal 渲染,即使你用的是自定義的 OpenGL ES 的著色器

  2. Xcode 的場景編輯器進行了提升,順帶家了一個新的動作編輯器。可以用更少的代碼和時間來構建游戲和 2D App [*DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit*](https://developer.apple.com/library/content/samplecode/DemoBots/Introduction/Intro.html#//apple_ref/doc/uid/TP40015179)

  3. 相機節點:使用這個可以輕易的做出滾動類的游戲。僅需將一個相機節點加入到場景的屬性中就好了[*SKCameraNode*](https://developer.apple.com/documentation/spritekit/skcameranode)

  4. 位置音效:可以給場景添加空間音效,並跟蹤聽者的位置自動調整 [*SKAudioNode Class Reference*](https://developer.apple.com/documentation/spritekit/skaudionode)

 

#App Thinning

 

  app 瘦身讓你可以開發目標平臺的 app 並且在安裝的時候自動給用戶一個最合適的包。這個優化包括以下方面:

  1. 碎片化:app 內的插圖與資源文件都可以按照對應的平臺進行提供,前提是 App Store app

  2. 按需載入:app 可以不一次性下載全部的內容。iTunes App Store 會部署主機,用來放置你按需載入的內容。這個載入安裝支持非同步(ps:如果是企業版的可以放在自己的 https 的伺服器下)

  3. bitcode:使用 bitcode 編譯後 ,App Store 會對你上傳的包再次編譯,使之生成 32 位和 64 位的兩套,以供對應的設備下載

 

  參考[*App Thinning*](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35)

 

#Support for Right-to-Left Languages

 

  iOS 9 全面支持從右到左佈局。這讓你更容易的提供一個反向的界面:

  1. UIKit 標準庫的控制項自動支持反向內容佈局

  2. UIView 定義了對應的特殊化的語義,你可以自行控制哪些 view 的內容支持反轉

  3. UIImage 新增了 imageFlippedForRightToLeftLayoutDirection 方法,用於在代碼中適配反向的內容

  

##App Transport Security

 

  ATS 這個是用於保證 app 與後端交互的安全的。ATS 防止意外的信息暴露,提供基礎的安全服務,適配也很簡單(iOS 9 and OS X v10.11 +)

 

  如果你正在開發 app 你需要使用HTTPS,如果你的 app 已經發佈了。你需要儘快制定一個計劃來支持HTTPS。此外,你與上層 API 交互時,需要使用 TLS 1.2 進行加密。如果你還沒打算處理 ATS,你需要在你的 info.plist 給你的請求加入白名單。

 

##Extension Points

 

  iOS 9 新增了一系列擴展點(擴展點是用來給 app 的擴展應用提供使用協議和相關 APIs 的)

  1. Network extension points

    1.1 包隧道工具擴展點:可以用它定義 VPN 客戶端的隧道協議

    1.2 app 代理工具擴展點:可以用它自定義透明的客戶端網路代理協議

    1.3 數據過濾和數據控制工具擴展點:可以用它動態的在設備上過濾內容

  2. Safari extension points

    2.1 Safari 分享鏈接擴展點:允許用戶在 Safari 分享鏈接中看到你的內容

    2.2 Safari 內容屏蔽擴展點:你可以給 Safari 一個屏蔽掉列表,當用戶訪問列表內的內容時,將會被屏蔽

  3. Index Maintenance extension point 支持在不打開 app 的情況下維護 app 的數據索引

  4. Audio Unit extension point 允許你的 app 提供樂器、音效、聲場以及更多的供其他 app(Audio Unit app)使用功能。這個擴展點也提供了一個完整的插件模型,讓你的 Audio Units 可以在 App Store 上售賣

 

  [*App Extension Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/index.html#//apple_ref/doc/uid/TP40014214)

 

#Contacts and Contacts UI

   

  iOS 9 加入了 Contacts.framework 和 ContactsUI.framework,這兩個用於替換現有的 Address Book 和 Address Book UI frameworks。[*Contacts Framework Reference*](https://developer.apple.com/documentation/contacts)

 

#Watch Connectivity

 

  WatchConnectivity.framework 提供了兩種方式用於 iPhone 與其配套的 Watch 上的對應 app 進行通訊。這個 framework 支持兩種方式,前臺即時通訊和後臺非同步通訊。[*Watch Connectivity Framework Reference*](https://developer.apple.com/documentation/watchconnectivity)

 

#Keychain

 

  鑰匙串提供了更多保護選項和一種新的獨立持有的加密密鑰。以下:

  1. 新的訪問許可權名單,讓你可以創建僅僅基於 Touch ID 或密碼的訪問限制

  2. 新的 Touch ID 訪問許可權可以通過在鑰匙串中加入或刪除指紋來控制

  3. 支持 app 使用訪問許可權中的 Application Password 的選項,自主提供加密熵

  4. 支持上下文認證,也就是說你可以單獨從保密條目中調起一個認證

  5. 支持使用 kSecAttrTokenIDSecureEnclave 屬性進行密鑰生成和獨立加密熵生成。註意,這些密鑰可以被訪問許可權名單所支持的限制進行控制

 

##Swift Enhancements

 

  學習新的 Swift,參考[*Swift Language*](https://developer.apple.com/library/content/documentation/Xcode/Conceptual/WhatsNewXcode-Archive/Articles/xcode_7_0.html#//apple_ref/doc/uid/TP40015242-SW2)

 

#Additional Framework Changes

 

  iOS 9 在以下 frameworks 中有了很多提升:

 

###AV Foundation Framework

 

  AVFoundation.framework 新增了 AVSpeechSynthesisVoice 的 API,可以讓你通過 id 判斷音頻,而不是語言。你也可以使用 name 和 quality 兩個屬性來獲得音頻的信息。

 

###AVKit Framework

 

  AVKit.framework 加入了 AVPictureInPictureController 和 AVPlayerViewController,用於幫助你實現畫中畫功能。

 

###CloudKit Framework

 

  如果你有 CloudKit 的 app,你可以使用 CloudKit 的 web 服務或者 CloudKit JS(一個 js 的庫)提供一個網頁版的界面,使用戶在你的 app 中訪問 Cloud 中同樣的數據。你必須為你的資料庫設置 schema,給已經創建的網頁界面提供獲取數據、創建數據、更新數據和刪除記錄、空間和訂閱功能。[*CloudKit JS Reference*](https://developer.apple.com/documentation/cloudkitjs),[*CloudKit Web Services Reference*](https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/index.html#//apple_ref/doc/uid/TP40015240),[*CloudKit Catalog: An Introduction to CloudKit (Cocoa and JavaScript)*](https://developer.apple.com/library/content/samplecode/CloudAtlas/Introduction/Intro.html#//apple_ref/doc/uid/TP40014599)

 

###Foundation Framework

 

  Foundation.framework 有了以下的加強:

  1. 按需下載的 APIs

  2. 字元文件對上下文可變寬字元串的支持

  3. NSProcessInfo 用於電源和熱量管理的 APIs

 

###HealthKit Framework

 

  HealthKit.framework 有以下的增強:

  1. 新增對生殖健康和紫外線繫數的追蹤選項

  2. 支持刪除條目和已刪除條目的跟蹤,參考 HKDeletedObject, HKAnchoredObjectQuery, and the deleteObjects:withCompletion: and deleteObjectsOfType:predicate:withCompletion: methods in [HKHealthStore Class Reference](https://developer.apple.com/documentation/healthkit/hkhealthstore)

 

###Local Authentication Framework

 

  LocalAuthentication.framework 新增了一下內容:

  1. 可以獲得當前登記的指紋;因此,指紋的增刪對 app 的動作會有一些影響

  2. 支持在代碼層取消用戶提示

  3. 支持對鑰匙串許可權名單以及上下文許可權的接入

  4. 支持 Touch ID 匹配的復用;用於手機解鎖的指紋可以在 evaluateAccessControl: 和 evaluatePolicy:localizedReason:reply: 中使用

 

###MapKit Framework

 

  MapKit.framework 新增了以下功能以提供更好的用戶體驗:

  1. 支持查詢ETA信息(預計到達、離開時間)以及在地圖加入相應的標註

  2. 支持 3D 城市觀光模式

  3. 動畫可以完全自定義

  4. MapKit 和 CLGeocoder 的搜索結果可以根據時區篩選

 

###PassKit Framework

 

  PassKit.framework 加入了很多用戶增強 Apple Pay 的支持。特別是

  1. 在 iOS 9 中 Apple Pay 支持發現卡、商店借記卡和其他信用卡[*PKPaymentRequest Class Reference*](https://developer.apple.com/documentation/passkit/pkpaymentrequest)

  2. 卡的發行機構和支付公司可以在它們自己的 app 中將卡直接添加到 Apple Pay[*PKAddPaymentPassViewController Class Reference*](https://developer.apple.com/documentation/passkit/pkaddpaymentpassviewcontroller)

 

###Safari Services Framework

 

  SafariServices.framework 有了以下的更新:

  SFSafariViewController 可以在你 app 中用於展示 web 內容。它和 Safari 共用 cookie 和站點數據,也有 Safari 的其他優秀屬性(Safari AutoFill and Safari Reader)。和 Safari 不一樣,SFSafariViewController 的 UI 就是為了展示單頁的,上面有個完成按鈕,用於點擊返回你的 app。

 

  如果你的 app 需要展示 web 內容,並且不需要自定義。你可以用 SFSafariViewController 替換 WKWebView 或者 UIWebView 的頁面。

 

###UIKit Framework

 

  UIKit.framework 包括了以下的更新內容:

  1. UIStackView 用於維護當前頁面的子頁面,控制它們的垂直或水平佈局

  2. 新的約束方式支持錨點佈局,UIView 的 (leadingAnchor & widthAnchor)以及 NSLayoutAnchor & NSLayoutDimension,都讓你更容易的佈局

  3. 你的佈局指導,讓你更容易的適配好頁面內容。參考[*UILayoutGuide*](https://developer.apple.com/documentation/uikit/uilayoutguide)

  4. AppDelegate 裡面新增了文件打開和修改(針對的是其他 app 共用的文件)直接操作方法,而不是操作備份。這個可以在 plist 裡面設置 LSSupportsOpeningDocumentsInPlace 屬性來開關

  5. UITextInputAssistantItem 讓你可以直接拖一個 barbutton 組在快捷欄上

  6. 對 touch 事件的強化: 例如可以預估上次刷新頁面到這次之間點擊事件的能力

  7. 對 UIKit 動力學增強,例如支持非矩形邊界的碰撞;新增 UIFieldBehavior,支持多種欄位類型(包括自定義的),以及 UIAttachmentBehavior 中的其他附件類型

  8. UIUserNotificationAction 中新加了動作屬性 behavior,讓用戶可以在通知處理時輸入文本

  9. NSDataAsset 讓你可以更容易的根據設備的硬體去獲取資源

  10. UIKit 的控制項全面支持從左到右佈局

 

#Deprecated APIs

 

  以下 APIs 被廢棄:

  1. Address Book 和 Address Book UI 被新的 Contacts 和 Contacts UI 替換

  2. NSURLConnection APIs 被 NSURLSession APIs所替換

 

####iOS 9.1

 

iOS 9.1 只加了2個東西,Live Photos 和 Apple Pencil 的支持

 

#Live Photos

 

  Live Photos 讓用戶可以捕捉和重現一些快樂的時刻,它提供了比傳統照片更豐富的內容。當用戶按下快門的時候,這個特性會讓你的鏡頭捕捉到更多的內容:更多的圖片幀數,音頻信息等。當你回放這些動態的照片時,可以看到更多的信息。

 

  iOS 9.1 提供了相關的 APIs,允許 app 播放、導出和分享 Live Photos。Photos framework 新增的 PHLivePhoto 對象,它可以從 PHImageManager 中提取給你 Live Photos 的數據。當然你需要使用 PhotosUI framework 中的 PHLivePhotoView 來展示對應的內容。PHLivePhotoView 提供了完整的展示、交互以及視覺處理。

 

  你可以使用 PHAssetResource 從 PHLivePhoto 裡面獲取數據用於分享。你可以通過  PHImageManager or UIImagePickerController 在相冊中請求 LivePhotos 的資源。如果你的 app 有分享的擴展點,你還可以通過 NSItemProvider 來獲取 LivePhotos。在接受端你可以使用 PHLivePhoto 來存放分享者提供的數據。

 

  Live Photos 導出的數據是 PHAssetResource 類型的對象。上傳這一堆數據時,你必須當成一個整體去對待。當你在服務端重新打包這段數據時,需要進行來源驗證,不同來源的不能進行載入。

 

#Support for Apple Pencil

 

  iOS 9.1 引入了一些 APIs,在 Apple Pencil 支持的設備上,允許用戶進行對應的操作。為此,UITouch 做了以下改動:

  1. preciseLocationInView: 和 precisePreviousLocationInView: 這兩個方法,會在可用的情況下給你提供 touch 的坐標

  2. altitudeAngle 屬性和 azimuthAngleInView: 和 azimuthUnitVectorInView: 方法會為你確定筆尖的高度和方向

  3. estimatedProperties 和 estimatedPropertiesExpectingUpdates 對象會幫你做好刷新 touches 前的預估準備

  4. UITouchTypeStylus 會表徵從筆尖收到的 touch

 

####iOS 9.2

 

iOS 9.2 對 CloudKit Framework 和 WatchKit Framework 進行了優化。

 

#CloudKit Framework

 

  CKFetchWebAuthTokenOperation 提供了一個對象讓你提供給 web 對象 API token 時,可以獲得它的 token。

 

#WatchKit Framework

 

  WKInterfaceDevice 支持從右到左佈局,它會提供 layout 的方向參數(WKInterfaceLayoutDirection)以及內容展示用的控制項信息(WKInterfaceSemanticContentAttribute)

 

####iOS 9.3

 

#Accessing the Music Library

 

  Media Player 和 StoreKit frameworks 提供了新的 API,讓你可以將  Apple Music 的音軌加入到 Music Library 並播放它。首先,使用 SKCloudServiceController API 去看一下當前的設備是否允許你這麼做。然後,使用 MPMediaLibrary 的 addItemWithProductID:completionHandler: 方法去添加一個音軌到音樂庫中,並且使用 MPMusicPlayerController 的 setQueueWithStoreIDs: 方法去播放它。

 

#CloudKit Framework

 

  CloudKit.framework 支持長操作,即使你退出了也可以在操作。例如大型文件的後臺下載,或者用戶操作的持久化同步。

 

  如果你將一個 CKModifyRecordsOperation 標記為長操作,記住你的操作因為不會立刻結束,所以這會增加操作衝突的風險。為了防患於未然,你需要:

  1. 創建一個 journal 記錄,單次寫入的記錄(沒有衝突的話),然後在讀取的使用協調一下這個記錄

  2. 當你解決了衝突後,下次啟動 app 時從新操作一次

 

#HealthKit Framework

 

  在 HealthKit.framework 中的 HKActivitySummary 對象給了用戶當天數據的集合。包括當天的運動量、能量消耗以及站了多久。 Apple Watch 會將數據存在 HealthKit store 中。你可以創建自己的數據集合(例如在你的 iPhone app 中展示 HKActivityRingView),但是這些數據不會被放在 HealthKit store 中。你可以用 HKActivitySummaryQuery 去讀取 HealthKit store 中的 HKActivitySummary 數據。

 

#HealthKitUI Framework

 

  iOS 9.3 新增了 HealthKitUI.framework,其中的 HKActivityRingView 可以用來展示 HKActivitySummary 的數據。(移動距離-紅色;鍛煉-藍色;站立-綠色)

 

##Watch Connectivity Framework

 

  WatchConnectivity.framework 有了 iPhone 連接多個 Watch 的功能。所以,如果你的 app 是要與 Watch 版通訊的,你需要適配一下。使用新的界面管理 Watch 會話。新的界面提供了更多的信息,如配對的狀態和發起配對的提示。所以你如果不適配的話,出現多個 Watch 的時候,你的 app 就可能跪了。

 

####iOS 9.x end

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、關係數據操作 假設我們有兩張表。Table A 是左邊的表。Table B 是右邊的表。其各有四條記錄,其中有兩條記錄name是相同的,如下所示:讓我們看看不同JOIN的不同。 ...
  • 一、深入學習 group by group by ,分組,顧名思義,把數據按什麼來分組,每一組都有什麼特點。 1、我們先從最簡單的開始: select count(*) from tb1 group by tb1.sex; 查詢所有數據的條數,按性別來分組。這樣查詢到的結果集只有一列count(*) ...
  • 1、創建和查看索引 所謂普通索引,就是在創建索引時,不附加任何限制條件(唯一、非空等限制)。該類型的索引可以創建在任何數據類型的欄位上。 (1)創建表時,創建普通索引 語法: 例子: (2)在已經存在的表上創建普通索引 語法: 例子: 2、創建和查看唯一索引 (1)創建表時創建唯一索引 語法: 例子 ...
  • (1) 語句解析時的執行順序創建測試用的 函數create or replace function F1(v_in in varchar2) return varchar2 IS v_out varchar2(20);begin v_out := v_in; dbms_output.put_line ...
  • 1,create like: use a table to create another same table .ex: CREATE TABLE IF NOT EXISTS tb_test4 LIKE tb_test3; 2,event: CREATE EVENT event_test ON SC ...
  • 一.簡介 MongoDB 是一個基於分散式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 mongoDB mongoDB MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支持的數據結構非常鬆散, ...
  • 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自 "【趙彥軍的博客】" 一:Gradle 是什麼 Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化構建工具。 它使用一種基於 ...
  • 一:問題描述 在已經root過的android設備下,app執行一個linux命令,app需要獲取su許可權,在某些android主板下會出現異常, Command: [su] Working Directory: null Environment: null,代碼如下: 由於確認設備已經root,並 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...