iOS應用擴展的歷史
很久很久以前,我們在談論iOS應用的時候,指的是桌面上那個圖標,點擊圖標後打開的界面,就是iOS應用的全部(以下簡稱主應用)。對iOS工程師而言,開發iOS應用也就是開發這樣一個部分,那個時候的iOS應用結構十分單純,一直到iOS 7都是這樣。
當然簡單的架構必然有其局限性,早期iOS應用要想和系統有更深的交互可謂捉襟見肘。從iOS 8開始,蘋果開放了iOS的應用擴展系統(App Extensions),這從根本上改變了上述的狀況,iOS應用變得不再僅僅是主應用。
在第一批開放的擴展中,最被我們熟知的應該是Today Extension(通知中心小部件)和Custom Keyboard Extension(第三方鍵盤)。iOS 8之後這兩類擴展猶如雨後春筍般茁壯成長,無數類似於快捷啟動器和第三方輸入法的應用撲向了我們,當然它們的成長並不順利。
到今年iOS 10發布,應用擴展已經磕磕絆絆地走過了三個年頭,可使用的擴展類型也有六七種變成了現在的19種,這其中有一些革命性的進步,甚至可以說從根本上改變了iOS應用的交互方式。
應用擴展的局限性
iOS應用擴展的局限性是非常多的,這裡談談作為開發者而言,碰到最多的問題。
首先是學習的成本比較高,不管是通知中心小部件還是第三方鍵盤,甚至是分享面板的擴展,沒有一種擴展是可以零設置就讓用戶上手的。
這導致一個非常尴尬的局面,開發者不得不為用戶建立一些使用向導。要知道,iOS 8之後通知中心小部件多如牛毛,可是直到現在,我還是會經常看到有用戶不會添加通知中心小部件。學習成本的增加導致了一些小白用戶根本就無法使用到iOS的擴展。
其次,部分擴展的入口太深,使其在事實上成為了雞肋。
比如照片擴展這個東西,它的本意是非常好的,可以讓第三方應用給系統的照片提供照片編輯的功能。但是,用戶用起它來是不太容易的。
首先要讓照片進入編輯狀態,然後點一個看起來是更多的按鈕,會出現一排擴展。如果沒有你想要的你還要繼續點‘更多’,把它給添加進來,我想到這幾步就很頭疼,我干嘛不到主應用裡面去用呢?
在iOS 10,通知中心小部件的入口進一步加深了,下拉通知中心默認展示的不是小部件的頁面,必須要滑一下才可以用到。這一點可以說是對快捷啟動類應用的重創。
擴展是無法獨立存在的,這在iOS 8剛出來時被很多人吐槽過,你要想安裝一個通知中心日歷,就必須下載一個主應用,它的通知中心小部件就是這個日歷。當然這不是特別大的問題,大部分的應用還是需要一個設置頁面的,這個主應用長期以來就是充當了這個角色。這導致一個非常奇葩的現象:一個以擴展為主的應用,用戶最先看到的是最不重要的設置界面,然後這個設置界面要教會用戶怎麼樣使用到該應用的擴展。
擴展有一個最大的問題,一般用戶可能意識不到,但是開發者對其是深有體會。那就是擴展的性能和穩定性其實是很差的。iOS分配給擴展運行的內存比主應用要少很多,導致擴展崩潰是非常頻繁的事情。反映到用戶層面,就是頻繁地出現‘通知中心擴展白掉了’、‘鍵盤消失了’等事情。早期第三方鍵盤的穩定性非常差,頻頻出現切換到改鍵盤後無法彈出來的情況。
蘋果在開發者文檔明確地提到,在開發擴展的時候必須非常謹慎地使用內存,否則擴展會很容易被系統回收掉,導致擴展的崩潰和消失。
另外一個方面,iOS擴展的調試一直是開發者的一個心病,開發工具調試iOS擴展的穩定性很差。
過去巨大的進步
從iOS 8到iOS 10,擴展系統還是發生了不少變化,其中有一些變化是非常喜人的。
iOS 9引入的Network Extension,讓iOS上面的網絡調試成為可能,同時也孕育了目前最強大的網絡工具Surge,而Content Blocker Extension則為AdBlocks一類的廣告屏蔽擴展提供了技術基礎。
在iOS 9的變化中,iOS擴展這一方面最重要的進步就是網絡相關的擴展。這讓現在的iOS應用可以徹底掌控網絡,方便地對其進行調試、過濾、代理等工作。
iOS 10的革命
作為一個開發者,以我個人的角度來看,iOS 10中最大的變化就是對擴展系統的改造。本次增加的擴展類型之多可以說史無前例,並且都是非常具有裡程碑意義的改進。下面我們可以分析其中的幾個。
首先是Call Directory Extension,一直以來,iOS被Android嘲笑很重要的一個點就是:連電話黑名單功能都沒有。現在,利用這個擴展,開發者可以很輕松地做出類似於電話黑名單的應用。簡單來說,iOS允許開發者通過這個擴展攔截來電,並作出一些處理,這一塊可能會有更多的想象空間。
其次是Intents Extension和Intents UI,這兩個擴展的名字可能不夠明顯,其實這兩個擴展出自SiriKit框架,它是用來做Siri相關的擴展的。SiriKit為開發者開放了包括語音和視頻通話、發送消息等在內的6類服務。可能這並不是最完美的結果,但卻是Siri走向開放的一個開始。
然後是Notification Content Extension和Notification Service Extension,這兩個擴展能進一步增強通知系統。眾所周知,iOS的推送通知系統是一個強大的設計,可以讓應用不運行在後台的情況下,通過統一的服務收到推送消息。
在iOS 8和iOS 9,推送通知也得到了進一步的提升,推出了可交互的通知包含操作按鈕以及可以處理用戶輸入的通知中心直接回復內容。
在iOS 10中,開發者可以讓通知更加靈活,例如通知的內容可以展現一個圖片,甚至將通知中心內容攔截下來,做一個預處理之後再顯示給用戶(當然只能攔截主應用收到的通知),這可用作通知內容的加密,或者媒體內容推送後的下載操作。
接下來就是對中國人無關痛癢的iMessage Extension和Sticker Extension。可以看出在iOS 10,蘋果非常重視iMessage的體驗。首先,信息這個應用有了很大的變化,蘋果增強了其趣味性,讓它更加像是一個IM軟件。
同時在iOS 10中,開發者可以為iMessage建立擴展,可以用於處理會話場景中的內容。同時還可以為iMessage提供:表情包!沒錯,這就是Sticker Extension做的事情,表情包真是拯救世界呀,連蘋果都看到這個蛋糕了。
這個擴展可以說是所有的應用擴展中開發成本最低的,因為它沒有開發成本。你需要做的僅僅就是把表情包的內容放到這個擴展裡面,然後就可以發布到App Store,用戶可以下載這個表情包到自己的iMessage上面。當然對國內用戶而言,如果iMessage有用的話,那要微信做什麼。
哦順帶提一下,iOS 10將允許第三方鍵盤使用地球鍵的長按功能,這意味著對輸入法多的用戶而言,將是個效率提升的變化。
iOS 10的糟糕變化
說了那麼多iOS 10的好話,終於到了吐槽時間。iOS 10的一些變化,對開發者和用戶而言,可能並不是那麼有趣的,下面的討論都基於iOS 10.0 Developer Beta 6,正式版發布之後可能有出入。
通知中心小部件
首先是通知中心小部件的改變,上面已經提到過一點了,目前用戶下拉通知中心默認是不會看到小部件的,這提高了使用門檻。
另外,通知中心小部件被設計成 2 種模式:折疊和展開。與之前擴展的高度由開發者控制不同,iOS 10裡面通知中心擴展的高度調節沒有那麼自由,你得在這兩種模式之間切換。
然後就是小部件視覺的變化,iOS 10裡小部件的整體風格是白色。這與iOS 9的截然相反,如果一個擴展要同時支持iOS 9 和iOS 10,對開發者而言將會是一件很痛苦的事。
URL Scheme
其次是URL Scheme,提到通知中心擴展,就不得不提到這個東西。URL Scheme是很多效率類軟件的基石,比如Launcher Center Pro。其實蘋果對URL Scheme的態度一直是謹慎和暧昧的。了解LCP歷史的都知道,這個應用上線之初,蘋果可是不允許的,後來才慢慢放開了,其實蘋果也一直在試探開發者和用戶的邊界。
在iOS 9,蘋果加強了對預防URL Scheme濫用的限制,App檢測是否可以打開URL Scheme需要將Scheme添加到白名單,而白名單的限制是50個。
同時在iOS 9,一個App在第一次打開一個URL Scheme的時候,是會提示給用戶是否要打開,讓用戶確認的過程增加了其安全性。
iOS 10可以說是快捷啟動類應用的災難,可能有一點點誇張,首先是使用門檻的提高,讓快捷啟動根本就不快捷。不過更重要的是:iOS 10裡面蘋果去掉了所有跳轉到設置應用的URL Scheme。
這意味著你再也無法在通知中心跳轉到蜂窩數據設置界面,雖然你還是能用來打開其他App,但系統設置本身也是快捷啟動類應用很重要的一部分功能,畢竟它原本能把你帶到路徑很深的頁面裡去。
用iOS 10 Beta版本的朋友,我相信你們已經體會到這一點了。這不是蘋果第一次做這樣的事了,早在iOS 6時,也有一部分關於系統設置的URL Scheme被干掉了。
在iOS 10 Beta 5,除通知中心小部件以外的擴展,例如鍵盤擴展和分享擴展上都無法打開URL Scheme,不過iOS 10 Beta 6上面這一點已經好了,算是虛驚一場。
結語
總的來說,iOS擴展從在iOS 8被發布,到現在已經逐漸走向成熟,越來越豐富的擴展也正讓iOS應用的能力逐步完善。在這過程中我們可以看出,未來的iOS,主應用只是一個方面,對於一些應用來說甚至不是最主要的一個方面。因為iOS應用可以在系統層面的各個角落,通過擴展的方式與用戶交互。
主應用將只是iOS應用的一個軀干,而擴展系統是應用的手腳,它們一起是一個整體,一起造就了iOS應用全新的交互方式。