春風又綠加州岸,物是人非又一年。WWDC 2013 keynote落下帷幕,新的iOS開發旅程也由此開啟。在iOS7界面重大變革的背後,開發者們需要知道的又有哪些呢。同去年一樣,我會先簡單縱覽地介紹iOS7中我個人認為開發者需要著重關注和學習的內容,之後再陸續對自己感興趣章節進行探索。計劃繼承類似WWDC2012的筆記的形式,希望對國內開發者有所幫助。
相關筆記整理如下:
iOS7最大的變化莫過於UI設計,也許你會說UI設計“這是設計師大大們應該關注的事情,不關開發者的事,我們只需要替換圖片就行了”。那你就錯了。UI的變化必然帶來使用習慣和方式的轉變,如何運用iOS7的UI,如何是自己的應用更切合新的系統,都是需要考慮的事情。另外值得注意的是,使用iOS7 SDK(現在只有Xcode5預覽版提供)打包的應用在iOS7上運行時將會自動使用iOS7的新界面,所以原有應用可能需要對新界面進行重大調整。具體的iOS7中所使用的UI元素的人際交互界面文檔,可以從這裡找到(應該是需要開發者賬號才能看)。
簡單總結來說,以現在上手體驗看來新的UI變化改進有如下幾點:
自己實驗了幾個現有的AppStore應用在iOS7上的運行情況:
這次UI大改可以說是一次對敏捷開發的檢驗,原來的應用(特別是擬物化用得比較重的應用)雖然也能運行,但是很多UI自定義的地方需要更改不說,還容易讓用戶產生一種“來到了另一個世界”的感覺,同時可以看到也有部分應用無法運行。而對於蘋果的封閉系統和只升不降的特性,開發者以及其應用必須要盡快適應這個新系統,這對於迭代快速,還在繼續維護的應用來說會是一個機會。相信誰先能適應新的UI,誰就將在iOS7上占到先機。
新增了UIDynamicItem
委托,用來為UIView制定動態行為,當然其他任何對象都能通過實現這組接口來定義動態行為,只不過在UIKit中可能應用最多。所謂動態行為,是指將現實世界的行為或者特性引入到UI中,比如重力等。通過實現UIDynamicItem,UIKit現在支持如下行為:
如果有開發游戲的童鞋可能會覺得這些很多都是做游戲時候的需求,一種box2d之類的2D物理引擎的既視感躍然而出。沒錯的親,動態UI,加上之後要介紹的Sprite Kit,極大的擴展了使用UIKit進行游戲開發的可能性。另外要注意UIDynamicItem不僅適用於UIKit,任何對象都可以實現接口來獲得動態物體的一些特性,所以說用來做一些3D的事情也不是沒有可能。如果覺得Cocos2D+box2d這樣的組合使用起來不方便的話,現在動態UIKit+SpriteKit給出了新的選擇。
iOS7 SDK極大加強了直接使用iOS SDK制作和分發游戲的體驗,最主要的是引入了專門的游戲制作框架。
這是個人認為iOS7 SDK最大的亮點,也是最重要的部分,iOS SDK終於有自己的精靈系統了。Sprite Kit Framework使用硬件加速的動畫系統來表現2D和2.5D的游戲,它提供了制作游戲所需要的大部分的工具,包括圖像渲染,動畫系統,聲音播放以及圖像模擬的物理引擎。可以說這個框架是iOS SDK自帶了一個較完備的2D游戲引擎,力圖讓開發者專注於更高層的實現和內容。和大多數游戲引擎一樣,Sprite Kit內的內容都按照場景(Scene)來分開組織,一個場景可以包括貼圖對象,視頻,形狀,粒子效果甚至是CoreImage濾鏡等等。相對於現有的2D引擎來說,由於Sprite Kit是在系統層級進行的優化,渲染時間等都由框架決定,因此應該會有比較高的效率。
另外,Xcode還提供了創建粒子系統和貼圖Atlas的工具。使用Xcode來管理粒子效果和貼圖atlas,可以迅速在Sprite Kit中反應出來。
為Made-for-iPhone/iPod/iPad (MFi) game controller設計的硬件的對應的框架,可以讓用戶用來連接和控制專門的游戲硬件。參考WWDC 2013開場視頻中開始的賽車演示。現在想到的是,也許這貨不僅可以用於游戲…或者蘋果之後會擴展其應用,因為使用普及率很高的iPhone作為物聯網的入口,似乎會是很有前途的事情。
GameCenter一直是蘋果的敗筆…雖然每年都在改進,但是一直沒看到大的起色。今年也不例外,都是些小改動,不提也罷。
UIBackgroundModes
為fetch
來實現後台下載內容了,需要在AppDelegate裡實現setMinimumBackgroundFetchInterval:
以及application:performFetchWithCompletionHandler:
來處理完成的下載,這個為後台運行代碼提供了又一種選擇。不過考慮到Apple如果繼續嚴格審核的話,可能只有雜志報刊類應用能夠取得這個權限吧。另外需要注意開發者僅只能指定一個最小間隔,最後下沒下估計就得看系統娘的心情了。application:didReceiveRemoteNotification:fetchCompletionHandler:
為後台下載,開發者必須使用一個新的類NSURLSession
,其實就是在NSURLConnection上加了個後台處理,使用類似,API十分簡單,不再贅述。
這個是iOS7的重頭新功能,用戶可以用它來分享照片,文檔,鏈接,或者其他數據給附近的設備。但是不需要特別的實現,被集成在了標准的UIActivityViewController裡,並沒有單獨的API提供。數據的話,可以通過實現UIActivityItemSource接口後進行發送。大概蘋果也不願意看到超出他們控制的文件分享功能吧,畢竟這和iOS設計的初衷不一樣。如果你不使用UIActivityViewController的話,可能是無法在應用裡實裝AirDrop功能了。
Apple在繼續在地圖應用上的探索,MapKit的改進也乏善可陳。我一直相信地圖類應用的瓶頸一定在於數據,但是對於數據源的建立並不是一年兩年能夠完成的。Google在這一塊憑借自己的搜索引擎有著得天獨厚的優勢,蘋果還差的很遠很遠。看看有哪些新東西吧:
AudioUnit框架中加入了在同一台設備不同應用之間發送MIDI指令和傳送音頻的能力。比如在一個應用中使用AudioUnit錄音,然後在另一個應用中打開以處理等。在音源應用中聲明一個AURemoteIO實例來標為Inter-App可用,在目標應用中使用新的發現接口來發現並獲取音頻。 想法很好,也算是在應用內共享邁出了一步,不過我對現在使用AudioUnit這樣的低層級框架的應用數量表示不樂觀。也許今後會有一些為更高層級設計的共享API提供給開發者使用。畢竟要從AudioUnit開始處理音頻對於大多數開發者來說並不是一件很容易的事情。
可以看成是AirDrop不能直接使用的補償,代價是需要自己實現。MultipeerConnectivity框架可以用來發現和連接附近的設備,並傳輸數據,而這一切並不需要有網絡連接。可以看到Apple逐漸在文件共享方面一步步放開限制,但是當然所有這些都還是被限制在sandbox裡的。
Store Kit在內購方面采用了新的訂單系統,這將可以實現對訂單的本機驗證。這是一次對應內購破解和有可能驗證失敗導致內購失敗的更新,蘋果希望藉此減少內購的實現流程,減少出錯,同時遏制內購破解泛濫。前者可能沒有問題,但是後者的話,因為objc的動態特性,決定了只要有越獄存在,內購破解也是早晚的事情。不過這一點確實方便了沒有能力架設驗證服務器的小開發者,這方面來說還是很好的。
當然還有一些其他小改動,包括MessageUI裡添加了附件按鈕,Xcode開始支持模塊了等等。完整的iOS7新特性列表可以在這裡找到(暫時應該也需要開發者賬號)。最後一個好消息是,蘋果放慢了廢棄API的速度,這個版本並沒有特別重要的API被標為Deprecated,Cheers。
- See more at: http://onevcat.com/2013/06/developer-should-know-about-ios7/#sthash.rWMKWACE.dpuf