從這一篇開始,我會把iOS 7.0 到最新版本的更新摘要都整理出來,時間跨度可能會很久。這是每一個 iOS SDK(Release Version)發佈時,同步發佈的 “What's New in iOS x.x” 的摘要(說摘要可能更好一點,畢竟我有許多不熟悉的模塊,說翻譯要被打腫臉的。。。)。 ...
從這一篇開始,我會把iOS 7.0 到最新版本的更新摘要都整理出來,時間跨度可能會很久。這是每一個 iOS SDK(Release Version)發佈時,同步發佈的 “What's New in iOS x.x” 的摘要(說摘要可能更好一點,畢竟我有許多不熟悉的模塊,說翻譯要被打腫臉的。。。)。
做這件事有幾個原因:
1、讓自己更加明確 iOS 每個版本的改動。這樣的話,我就有很多東西要去學習、完善與修複了;
2、提升用戶體驗。因為 iOS 8 一定會比 iOS 7 更好用。如果我的 target 是 iOS 7.0 的話,那我也要做 iOS 8 特有的適配,這讓用戶覺得 app 細節到位,UI/UE設計與時俱進;
3、讓比我懶的人可以快速瞭解更新內容。
下麵是我閱讀的摘要,推薦配合官網原文查看。如果發現我曲解的地方,請留言回覆,萬分感謝。
iOS7.0 更新摘要 (What's New in iOS 7.0) 官網原文:https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#//apple_ref/doc/uid/TP40013162-SW1 一、UI改變 重做UI iOS7最直觀的改動是UI。從這個版本開始,UI進入扁平化設計,放棄了擬物化的交互界面。扁平化有諸多優點,最直接的就是簡單粗暴,層層深入直達目的。符合信息時代,高效的數據挖掘思路。 頁面(views)支持動態特性 UIDynamic 只要遵守UIDynamicItem 的 protocol 就可以現實view的動態效果。UIKit支持下麵這幾種行為: 1、 UIAttachmentBehavior 聯動效果,兩個items的依附 2、 UICollisionBehavior 碰撞效果,對象具有實際體積就可以 3、 UIGravityBehavior 重力效果,字面意思,不過可以設置方向 4、 UIPushBehavior 推動效果,可以是一次性動力,也可以是持續的動力 5、 UISnapBehavior 快速動作,給出一個坐標後,快速響應到那裡 UIDynamicAnimator,這是一個動力對象的處理者,它提供處理所需的context。 ps:UIDynamic + CA 各種炫酷效果就出來了。。。 Text Kit 這是CoreText的簡化版,圖文混排從此不再複雜。要玩轉它,你要瞭解這幾個類: 1、 NSAttributedString 這是必須要會的,支持各種新增特性。從此文本框可以炫起來。 4、 NSTextStorage 為啥要寫成423呢?因為按照層級,NSTextStorage(NSAttributedString的子類),存放文本,可以對文本進行各類操作 2、 NSLayoutManager 這個Manager用來管理文字內容的排版 3、 NSTextContainer 這是整個放置排版好的文本的容器 二、支持64位 從這個版本開始,iOS SDK內的framework和libraries都相容了32位和64位。配合上重新編譯後的64位runtime,app可以更快,64位的處理器自然會給出更多的資源。iOS會運行在LP64模式下,代碼移植出錯的幾率將會降低。(OS X 和其他的 UNIX 都是運行在LP64下的。在 LP64 模型中,long 和 pointer 類型都以64位為單位進行對齊。) 三、多任務加強 新增兩種後臺運行(UIBackgroundModes)的任務類型: 1、fetch 這是用來在後臺定期獲取數據的。 在info.plist 裡面勾選它就會生效 setMinimumBackgroundFetchInterval: 這個方法可以設置獲取的頻率 application:performFetchWithCompletionHandler: 這個方法用來獲取並處理數據。 2、remote-notification 遠程喚醒推送。因為可以喚醒app,所以頻率有限制。 在info.plist裡面勾選它並且在aps的payload裡面加上這個欄位content-available就好了。 application:didReceiveRemoteNotification:fetchCompletionHandler: 這個方法用來處理推送信息 *** 除此以外的幾種分別為: 1、audio 播放音樂 iOS 4.0+ 2、location 後臺定位 iOS 4.0+ 3、voip VoIP:ip語音服務 iOS 4.0+ 4、newsstand-content 蘋果自己的NewsStand服務 iOS 5.0+ 5、external-accessory 定期向'設備'傳輸data iOS 5.0+ 6、bluetooth-central (CoreBluetooth)藍牙交互 iOS 5.0+ 7、bluetooth-peripheral 藍牙交互:外設模式交互 iOS 6.0+ *** 共7種 四、游戲 iOS7 加強了對游戲的支持 Sprite Kit Framework 為 2D 和 2.5D 提供了一個圖形硬體加速動畫系統。並且提供了大多數游戲所需的基礎支持:圖像渲染、後臺音頻播放、還有一個模擬物理引擎。更多的介紹可以去看 SpriteKit Programming Guide Game Controller Framework 這個Framework 可以用來連接為iOS設備製作的MFi設備,比如游戲手柄。 Game Center Improvements 游戲中心的提升。 1、新增Exchanges 游戲玩家間的社交功能 2、優化per-app leaderboards 排行榜由25人,加到100人。如果用了 GKLeaderboardSet 設置的話,上限500 3、優化Challenges 增加了設置挑戰約束的功能,如可以限制使用同一個道具完成任務 4、加強prevent cheating 加強了游戲認證以及防作弊的措施 五、地圖 MapKit.framework 的改動,包括了許多的提升與新特性的加入。旨在讓app能夠獲取更多地圖相關的基本信息。當然3D也開始支持了,並且可以控制視角。Maps Kit還有以下的加強: 1、覆蓋物可以放置在不同的層,也就是你可以自由切換顯示的東西了。 2、可以放一個 MKMapCamera 的實例在地圖裡面。它可以設置很多參數:位置,傾斜度,標題信息,來提供一個3D的視角。 3、這個類 MKDirections 可以讓你從 Apple 獲得方向性的信息。你可以依據這些信息設置覆蓋物。 4、這個類 MKGeodesicPolyline 可以讓你依據地表弧度創建一個線性的覆蓋物。 5、這個類 MKMapSnapshotter 可以讓你在地圖上截圖。 6、這個類 MKOverlayRenderer 提供了更好,更便捷的渲染方式用呈現可視化的覆蓋物。 7、這兩個類 MKTileOverlay MKTileOverlayRenderer 可以改地圖的網格切片。 六、AirDrop OS X 10.7(Lion)開始支持 AirDrop,而iOS到iOS7才可以使用。(ps: AirDrop 是通過無線進行文件傳輸的,不過需要開啟藍牙用於發現設備。) AirDrop 在iOS7上僅在這個類 UIActivityViewController 裡面可以配置。這個類展示了各種分享app內容的方案。如果你還沒使用過這個類,你可以考慮在你的app裡面試一下。實現以下兩步你就可以接受 AirDrop 傳輸的文件了: 1、在 Info.plist 裡面配置這個請求; 2、在app 的delegate中 實現這個 application:openURL:sourceApplication:annotation: 方法,當你接受到文件時,這個方法會被調用。 你接受到的文件會被放在 home 目錄下的 Documents/Inbox 裡面。不過如果你想改動這些文件的話,你要先移動出來再改動。(The system allows your app to read and delete files in this directory only. 也就是說這個目錄只能讀和刪。)這個目錄下的文件是有加密保護的,所以你要讓你的文件在設備鎖定時無法被訪問。 七、APP間的音頻 Inter-App Audio:這個功能依賴於 AudioUnit.framework 新增的特性,它使得同一臺設備上的APPs相互發送 MIDI 命令和音頻流。使用這個特性,你可以在當前 app 錄製音頻,然後發送給別的 app 去處理。 想要傳輸數據給別人處理的話,你要發佈一個 別的app可以發現的 音頻I/O單元(AURemoteIO)。 想要發現別人分享出來的數據的話,你可以使用 Audio 組件下的發現功能介面。 八、端對端通訊 Peer-to-Peer Connectivity:端對端通訊的 MultipeerConnectivity.framework 支持發現附近的設備,和直接發起通訊(可以不需要聯網)。這個 framework 讓我們可以輕易建立多點會話,並且可以可靠的按序傳輸數據以及實時傳輸數據。依靠它,我們可以和附近的設備進行無縫的數據傳輸。 這個 framework 還提供了相關的界面,讓我們發現和管理附近的設備與網路。APPs 可以通過集成這個類 MCBrowserViewController 來展示附近的設備,並且進行選擇。當然,你也可以用這個類 MCNearbyServiceBrowser 通過編程來查找和管理端設備。 下麵是這裡更新的梳理:(帶 * 的建議關註一下) 一、新增的Frameworks 1、GameController.framework,主要是給了游戲外設的支持 2、SpriteKit.framework,提供了基於精靈(sprite)的動畫和圖像渲染的API 3、MultipeerConnectivity.framework,提供了端對端設備交互的API * 4、JavaScriptCore.framework,這個就厲害了,可以直接抓取 webview 運行時的 JS。也就是可以用 js “直接”調用 native 了 5、MediaAccessibility.framework,提供了展示 app 內媒體文件的隱藏信息API 6、SafariServices.framework,可以用它把 URL 加入到系統 Safari 的閱讀列表中去 二、現有Frameworks的增強 UIKit Framework 1、所有的UI都改成了iOS7風格。 2、UIKit Dynamics 可以 mimic(模擬)現實世界的動力效果。 * 3、Text Kit 提供了更精細的文本編輯和展示功能。 4、UIView 有了以下提升: 可以使用 tintColor 可以設置 keyframe(關鍵幀)動畫和‘出場’動畫 5、UIViewController 有了以下提升: 可以定義 transitions(轉場) 可以控制 status bar(狀態欄)樣式和可見性 6、UIMotionEffect 定義了基本的運動視覺效果(其實並不明顯) 7、Collection views,加強了自定義layout的支持。用 Dynamics 還可以給每個 items 加動效 * 8、UIImage imageNamed: 這個方法現在支持調用 asset 裡面的資源了,也就是 @1x,@2x(以及@3x)的可以放在一起了 * 9、UIView and UIScreen 可以自己進行 snapshots,新的截圖生成方式明顯比渲染頁面進行截圖要來的快 10、基於動力的手勢可以確保,添加一個新的時,舊的已經失效 11、UIKeyCommand 可以響應硬體鍵盤的 evens,這些 events 可以傳給 app 處理 12、UIFontDescriptor 這個實例可以保存字體 attributes 的信息。這個 UIFontDescriptor 可以與其它平臺交互(互通) 13、UIFont and UIFontDescriptor 提供了文本大小的動態支持,這讓 app 的可讀性更好。因為這可以更好的控制字體,所以每個 app 都應該使用 14、UIActivity 支持了許多新特性:使用 Air Drop 傳輸文件,向 Safari 的閱讀列表加 URLs,向 Flickr, Tencent Weibo, and Vimeo 發送內容 * 15、UIApplicationDelegate 添加了後臺獲取數據(fetch )的 API 16、UIKit支持了 guided-access 模式下的運行,這個模式可以保護 app 的內容不被修改。就是可以限制他人的使用 17、狀態存貯,現在支持 any object 了。只要你的 object 實現 UIStateRestoring 的協議,你的 object 的狀態就可以在 app 進入後臺時寫入,在下次返回前臺時保持住狀態 18、Table view 現在支持了 cell 高度和別的參數的預估計,這讓滾動的體驗更好了 19、你現在可以更容易的將 UISearchDisplayController 和 UINavigationBar 協同工作 Store Kit Framework SK框架 遷入到了一個新的回執系統,也就是你可以自己通過設備或者伺服器查看 iap 的訂單回執。 Pass Kit Framework PassKit.framework 新增了許多 APIs,包括一次添加多個通行證。新增的特性如下: 1、列舉通行證(pass)的過期時間的新鍵值 2、你可以根據附近特殊的 iBeacons,列舉對應的 pass 3、新的特性可以控制每個 pass 的展示。可以配置文本,時間樣式等等 4、你可以給每個 pass 關聯一些額外的信息。這些信息可以與你 app 相關,但是用戶不可見 5、你可以自定義 pass 的展示區域內,展示的載體 OpenGL ES iOS7 新增了對 OpenGL ES 3.0 的支持,並且給 OpenGL ES 2.0 添加的很多新特性。 OpenGL ES 3.0 (被加入) 在 iOS 中3.0被作為2.0 帶有許多新特性的核心功能的擴展。但是 3.0 新增了紋理特性相關的API和一個從來沒有在手機上能被使用的核心功能:包括多重渲染目標(MRT)技術與變換反饋技術。 在設備上創建一個 3.0 的上下文,傳遞這個常量 kEAGLRenderingAPIOpenGLES3 到 initWithAPI: 方法。 OpenGL ES 2.0 (新增特性) 1、EXT_sRGB 的擴展,增加了對幀緩衝器(frame buffer)的 sRGB 的支持 2、GL_EXT_pvrtc_sRGB 的擴展,增加了對存放在 PVRTC 中的壓縮格式的紋理的sRGB支持(同樣手用與3.0) 3、GL_EXT_draw_instanced 和 GL_EXT_instanced_arrays 的擴展,提升了多個相同 objects 的渲染操作。你可以用單個調用來 draw 出相同的 objects Textures 2.0 和 3.0都支持了紋理的頂點作色。查詢這個特性 MAX_VERTEX_TEXTURE_IMAGE_UNITS 你可以瞭解到你需要的紋理的參數(數值類型)。老的版本裡面這個參數一直是 0 Message UI Framework 這個類:MFMessageComposeViewController 新增了簡訊附件的支持。 Media Player Framework 這個類:MPVolumeView 提供了用來獲取到用戶選擇了的,無線設備的 route 信息(AirPlay 和 藍牙)的功能。而且你還能知道這裡的 route 現在是不是活躍的。 *** 相關變數如下: 有沒有可用的AirPlay以及是否被選中: areWirelessRoutesAvailable isWirelessRouteActive 這兩個是變更時的通知: MPVolumeViewWirelessRoutesAvailableDidChangeNotification MPVolumeViewWirelessRouteActiveDidChangeNotification *** 、 Map Kit Framework 這個的變化,在第五點地圖裡面說了。 Image I/O Framework 現在提供了 UI 界面,用來獲取和設置圖片的元數據(metadata)。 iAd Framework iAd.framework 為別的 frameworks 新增了兩個擴展,使他們更容易植入廣告。 1、給這個類 MPMoviePlayerController 加了兩個方法,讓你可以在播放視頻前放一段廣告(用播放器的,可以嗶汪冷靜一下,2333333) 2、給我們的 UIViewController 擴展了一下,讓你可以在顯示真實頁面前放一段廣告 Game Kit Framework 這個有很大的變化,見第四點-游戲中的 - Game Center Improvements。 Foundation Framework Foundation.framework 有以下的增強: 1、NSData 支持了 Base64 encoding 2、NSURLSession 被推出用來替代 NSURLConnection 和 NSURLDownload 以及上述兩個的代理 3、NSURLComponents 這個類 可以用來解析 URL 裡面的相關內容。解析支持的協議標準為 (rfc3986/STD66) 4、NSNetService 和 NSNetServiceBrowser 支持的端對端基於 Wi-Fi 和 Blueteeth 的數據傳輸 5、NSURLCredential 和 NSURLCredentialStorage 提供了讓你創建一個同步協議的證書的API,並且也給出了從 iCloud 中使用同步協議移除這個證書的API 6、NSURLCache, NSURLCredentialStorage 和 NSHTTPCookieStorage 現在支持非同步處理請求的存儲 7、NSCalendar 支持新的日曆樣式 8、NSProgress 給出了通用的API,來監視進度和提供進度數據給 app 中需要的地方 Core Telephony Framework CoreTelephony.framework 讓你獲得設備上語音通話相關的信息。app 開發時結合了載體的話,就可以依據載體驗證是不是一個特定用戶。 Core Motion Framework CoreMotion.framework 新增了計步和運動跟蹤功能。使用計步功能,這個 framework 可以依據用戶的運動,發現移動信息,並記錄步數。因為是系統幫你記錄,所以你的 app 沒有運行一樣有數據。同時,這個 framework 可以區分運動的類型,包括各種運動的反饋,步行、跑步或者騎車。導航類的 app 可以使用這個特性獲得的數據,來告訴用戶方位。 Core Location Framework CoreLocation.framework 支持區域監控和藍牙定位。前者讓你知道你(的設備)到了一個特殊區域,後者讓你知道與附近的藍牙設備的相對位置。舉個例子:一個藝術博物館可以通過區域監控知道參觀者在哪一個畫廊,然後設置相應的 iBeacons 在附近的作品上。然後 參觀者走進站在作品前面時,作品信息就出現在他的手機上。 這個 framework 還提供了設置定位間隔和定位精度的方法。 Core Foundation Framework CoreFoundation.framework現在允許你安排線程隊列中的流對象。 Core Bluetooth Framework CoreBluetooth.framework 包括以下增強: 1、這個 framework 支持保存中央和周圍的對象的狀態,並且在 app 啟動的時候載入回來。使用這個特性,可以支持與藍牙相關設備的長期交互 2、中央和周圍的類對象,現在統一用 NSUUID 來設置存儲唯一標識符 3、你現在可以通過內部管理對象,同步恢復外部對象 AV Foundation Framework AVFoundation.framework 有了以下加強: 1、AVAudioSession 支持了下麵的新特性: - 選擇喜好的音頻輸入,包括內置的麥克風 - 多聲道的輸入輸出 2、AVVideoCompositing 協議和相關類,讓你可以自定義視頻的合成排版 3、AVSpeechSynthesizer 及其相關類,讓你可以進行語音合成 4、攝像功能有了改動: - 掃描功能的格式和幀速度 - 高速(高fps)攝像 - 靜態拍攝的穩定性 - video 的畫面大小 - 實時掃描支持機器可讀數據源(二維碼的識別) - 自動對焦的限制 - 攝像時平滑的自動對焦 - 拍攝時共用app的音頻(拍攝時可以加BGM) - 接入時鐘 - 調用攝像頭和麥克風需要用戶授權 - 給出數據輸出和 AVAssetWriter 的推薦設置 5、新的元數據 keys 支持 ISO 標準的格式,如 MPEG-4 和 3GPP。並且提升了轉換元數據對象到輸出文件時的過濾能力(使用 AVAssetExportSession) 6、AVAssetWriter 提供了格式化輸出的配置,並且是最新的 H.264 標準 7、AVPlayerLayer 新增了 videoRect 屬性,這個屬性可以用來獲取視頻圖片的大小和位置 8、AVPlayerItem 有了以下改變: - 當 AVPlayerItem 對象在後臺就緒時,Asset裡面的屬性成員可以自動載入到裡面了 - 當你的 app 接入 iOS 7 SDK時,許多參數都會有預設的返回值了,這和之前的 SDK 版本都不一樣。也即是 AVPlayerItem 不會 block 住你的 app 了。當你的播放對象狀態轉為 AVPlayerItemStatusReadyToPlay 時,getter 會映射到媒體資源實際的數值。如果你用了 KVO,他會收到這些屬性改變的通知的 9、AVPlayerItemLegibleOutput 可以處理媒體文件的字幕 10、AVAssetResourceLoaderDelegate 協議現在支持從媒體文件中載入任意段落數據 Accelerate Framework Accelerate.framework 包括以下加強: 1、可以操縱 Core Graphics 的數據類型 2、支持1、2、4 ppi 的灰度圖像 3、為圖片間的格式轉化以及內容轉化,定義了新的規則 4、支持雙二階濾波器(IIR數字濾波器)操作 三、Objective-C OC 現在支持了模塊化,這使得編譯和項目索引更快速。Xcode 5 支持所有項目的模塊化,已經存在的項目,你要去修改它的可模塊化配置,已保證它可以支持。 四、棄用的API (這裡的都比較關鍵) 有時,Apple 會給一些 API 加上棄用的巨集,用來說明這些 API 以後將不在開發中使用了。當然,這個巨集,並不代表這些 API 會立刻失效,而是我們會有更好的選擇來替換這些 API。因為某些歷史因素和很多已經發佈的程式,這些棄用的 API 依舊是有效的。不過,新的 app 建議使用新的 API,因為新的 API 變化不大,只是修複高危 bugs 和增加安全補丁而已。棄用的 APIs,會在將來的操作系統中被徹底移出。 作為一個開發者,儘量避免在你的 code 中使用棄用 APIs 是非常重要的。 至少,你新的 code 絕不應該用棄用的 API,已經寫好的 code 就去 update 一下。所幸,Xcode 的編譯器會在你使用到棄用 API 的地方,給你一個警告,而你可以按照這個警告的提示來更新代碼。 這一個發佈版的棄用 APIs,包括一下幾個技術區域: 1、Map Kit framework 中使用了 MKOverlayRenderer 類來代替原有的 MKOverlayView 和它的子類 2、Audio Session API 中 AudioToolbox.framework 被 AVFoundation.framework 中的 AVAudioSession 類所替換 3、Core Location framework 中的 CLRegion 類被 CLCircularRegion 替換了。但是這個類被當做抽象基類,用來支持地理信息(geo)和 信標區域(beacon region) * 4、CBCentral 類中的 UUID 被棄用了。設備的唯一標識,可以使用設備的 identifier 屬性 5、Game Kit framework 包含了給種各樣的描述,意在清空已有的 API,對新特性提供更好的支持 6、UIKit.framework 有以下動作: - UIViewController 的 wantsFullScreenLayout 屬性被棄用,從iOS 7 開始這個屬性預設支持 - UIColor 對象不再像早期 iOS 版本一樣;現在不支持背景紋理了 - 許多 NSString 類的 draw 選項都被棄用了,因為出了新的變體方法 7、libsyscall 庫中的 gethostuuid 方法被棄用了 * 8、從iOS 7 開始,如果你嘗試獲得設備的 MAC 地址的話,會永遠返回 02:00:00:00:00:00 。如果你需要使用唯一標識符,你可以用 UIDevice 的 identifierForVendor 屬性;如果你需要做廣告的話,必須使用 ASIdentifierManager 的 advertisingIdentifier 屬性。