從 iOS 應用擴展談起
本文轉載自我撰寫在 AppSolution 的一篇文章,感謝 AppSolution 的邀請。
原文鏈接:iOS 10 應用擴展的劇變,對你的 iPhone 有什麼影響?
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,正式版發布之後可能有出入)
通知中心小部件
首先是通知中心小部件的改變,上面已經提到過一點了,目前用戶下拉通知中心默認是不會看到小部件的,這使得使用的門檻提高了。另外,通知中心小部件被設計成有兩種模式,摺疊和展開,與之前擴展的高度由開發者控制不同,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 應用全新的交互方式。
推薦閱讀:
※為什麼6s升級到iOS 10在電量還有20%-30%左右就會自動關機?
※蘋果6S更新到iOS 10的版本會更耗電嗎?
※如何評價 iOS 10 正式版?
※為什麼更新 iOS 10 後鬧鐘不響了?
※如何評價蘋果iOS10新出的防騷擾功能?