太複雜意味著行不通
# 不自然 #
iOS 8 上面開放的輸入法介面,被很多小應用用來做一些奇奇怪怪的事情,或許一開始看起來標新立異,但其實新鮮勁過了之後,能被用戶高頻率使用的就沒有幾個,從這個層面來講鍵盤上面的創新幾乎都是失敗的。iOS 第三方鍵盤介面早期的不穩定以及切換鍵盤不方便(這一點在 iOS 10 已經改進了)是一些原因,我想除此之外很大的原因就是,這個東西的設計就不是用來做那些事情的。
但你試圖去破壞一個規則,你可能就已經走在一條不穩當的路上了,這條路隨時會坍塌掉。比如說在鍵盤(或者其他插件)上面啟動應用,其實 iOS 的介面對這個事情做了一定的限制,一開始需要用 WebView 去 loadRequest 的過程來實現,後來這個也禁掉了,但是還是能通過 UIResponder 的 nextResponder 去找到可以 openURL 的一個 responder。一些 trick 的方式看似很妙,但其實都是浮在半空中,比如最近 iOS 10 裡面,經過測試我發現一些和系統設置相關的 URL Scheme 被全部去掉了,這導致在 iOS 10 發布之後,Launch Center Pro 一類的應用功能被大大的削弱。
其實了解 Launch Center Pro 的朋友都知道,這個 app 一開始是被蘋果拒絕的,後來慢慢的開放了。從某種程度上來說蘋果的態度也是曖昧的、模糊不清的,他也在試探和規範開發者的邊界。
# 太複雜 #
iOS 8 剛出來的時候我和幾個小夥伴做了一個表情 app 叫做分趣輸入法,其實這個故事大多都和他有關。這個 app 已經下架了,偶爾我還是會想起他的一些故事,在那個時候這個 app 有一些特別的東西讓我興奮。
我們當時做了一個在微信和 QQ 分享表情的功能,一方面你可以通過鍵盤上點擊圖片後,到輸入框粘貼圖片來進行(這也是最早的表情鍵盤支持的方式),另一方面我異想天開設計了一個非常鬼點子的途徑,你只要點擊一下圖片,然後點微信輸入框的加號,微信就會提示你發送這個表情。
很多人一開始不明白這個是怎麼做到的,其實非常簡單,點擊圖片之後我會把圖片存到相冊裡面去,這個時候點微信的加號,微信會檢測到一張新的圖片,從而用戶可以很方便的將表情發出去。
但是問題是這個時候相冊不就多了一張圖片嗎?
這張圖片我會通過 ALAsset 框架的一個鮮為人知的方法把他給刪掉。很多人不知道這樣一個介面,具體來講就是把 asset 的 data 設置成 nil,當然前提是這張圖得是 app 自己創建的(事實上即便不是自己創建的,也有辦法通過 Runtime 實現這個功能)。
不過後來 iOS 修復了這個問題,並且隨著 Photos 框架的推出,AL 框架徹底成為了歷史。
上面這個例子看起來很神奇,其實很不穩定,依賴了微信的一個功能和 iOS 的一個 bug,所以註定是走不長遠的。
# 費盡心機 #
之前還想了另外一個方法,就是通過各個 app 的開放平台去做表情分享,但是遺憾的是這些開放平台都不支持在 App Extension 上面使用(其實要支持在 App Extension 上面使用很容易,但是各廠家並沒有這個動力去支持)。所以那個時候我開始在研究各個開放平台的數據封裝方式,包括微信、QQ 和微博。
我發現他們都是通過 URL Scheme + UIPasteboard 實現的之後,用 Runtime 的方法把他們的數據格式全都研究出來了(這一塊感興趣的可以看這個項目:https://github.com/nixzhu/MonkeyKing),完全靠自己的代碼實現了整個分享的過程,並且能夠把他們搬運到鍵盤上面。
一開始我還是很興奮的,後來發現這也並沒有什麼用,因為這個方式的體驗也很是奇怪。
(後來我居然在搜狗輸入法上面也看到了上面這兩種方式的表情分享,而那個時候分趣的開發已經停止了)
# 做該做的事 #
太過複雜的系統在現實中並不能良好的工作,算是一個感受。一旦產品經理跟你說一個超級複雜的需求,設計師讓你 hack 原生的 UI 組件,程序員跟你說一聽起來就要命的實現,要小心,這些東西往往到最後都是 NOT WORKING 的。一個良好運行的系統,應該是簡單的、自然的,各個部件之間完美的契合,就像天生的那樣。
- EOF -
推薦閱讀:
※Tab Bar 應該要一直固定在界面下嗎?
※安卓廠商指紋識別類似於蘋果一樣trustzone?但關機進入recovery雙清,指紋被清除,重啟以後是原始解鎖界面。?
※iOS歡迎界面Launch Screen動態載入廣告
※用 Sketch 3 調整了下 iOS 9 的配色
※iOS開發斷點調試高級技巧