太複雜意味著行不通

與以往的分享不同的是,這篇不能算是純開發過程中的記錄,而算是一篇以往的一個經驗教訓,和一個故事。

# 不自然 #

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 的方法把他們的數據格式全都研究出來了(這一塊感興趣的可以看這個項目:github.com/nixzhu/Monke),完全靠自己的代碼實現了整個分享的過程,並且能夠把他們搬運到鍵盤上面。

一開始我還是很興奮的,後來發現這也並沒有什麼用,因為這個方式的體驗也很是奇怪。

(後來我居然在搜狗輸入法上面也看到了上面這兩種方式的表情分享,而那個時候分趣的開發已經停止了)

# 做該做的事 #

太過複雜的系統在現實中並不能良好的工作,算是一個感受。一旦產品經理跟你說一個超級複雜的需求,設計師讓你 hack 原生的 UI 組件,程序員跟你說一聽起來就要命的實現,要小心,這些東西往往到最後都是 NOT WORKING 的。一個良好運行的系統,應該是簡單的、自然的,各個部件之間完美的契合,就像天生的那樣。

- EOF -


推薦閱讀:

Tab Bar 應該要一直固定在界面下嗎?
安卓廠商指紋識別類似於蘋果一樣trustzone?但關機進入recovery雙清,指紋被清除,重啟以後是原始解鎖界面。?
iOS歡迎界面Launch Screen動態載入廣告
用 Sketch 3 調整了下 iOS 9 的配色
iOS開發斷點調試高級技巧

TAG:iOS | iOS应用 | Cocoa |