99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學院 頭像
蘋果6袋
6
麥子學院

iOS中Extension開發(fā)是什么?

發(fā)布時間:2016-10-29 23:45  回復:0  查看:2521   最后回復:2016-10-29 23:45  

從事iOS開發(fā)的童鞋,估計現(xiàn)在有過iOS App Extension開發(fā)經(jīng)驗的朋友還不太多。說來慚愧,我也是最近以Extension的方式寫過Xcode的一個插件之后,才把Extension相關的知識點梳理了一遍,技術和想法上都有些新的收獲。順便寫篇文章介紹推廣下App Extension開發(fā)。


何謂App Extension?

  iOS生態(tài)圈向來以其封閉性聞名,封閉一方面提高了第三方應用的質量,另一方面也使得系統(tǒng)原生App的使用頻率變得更高。

  比如照片,分享,iMessenger,日歷,天氣等。這些系統(tǒng)App都有一定的用戶基數(shù),如果這些App完全有Apple自己來開發(fā)維護,一則精力有限,二則被人詬病其封閉性。對此Apple采取的策略是通過Extension的方式逐步開放和完善這些系統(tǒng)原生層面的功能點。

  這些和系統(tǒng)貼近的App或者功能點,通過Extension Point的方式向第三方開發(fā)者開發(fā)了一些API。這些API可以讓開發(fā)者獲取到部分的用戶場景信息,或者說Context,用戶可以選擇第三方的Extension來進一步的實現(xiàn)拓展的功能目標。

  以上是抽象的描述,具體到技術層面來說呢,就是系統(tǒng)會新開一個進程來運行你的Extension,Extension通過原生的API來做輸入和輸出,一旦Extension提供的任務完成,進程也被結束。整個流程的設計依然很符合Apple Style

  Extension的意義?

  每年開發(fā)者大會,Apple發(fā)布新的OS版本時,敏感的移動互聯(lián)網(wǎng)公司或者獨立開發(fā)者會格外的關注有哪些新的API公布出來。毫不夸張的說,有時候一個API入口甚至就是一個新的產(chǎn)品起點。

  同樣Extension作為Apple現(xiàn)在的一大重點方向,也同樣值得開發(fā)者格外的注意。Extension和獨立App的不同之處,在于Extension所依附的App已經(jīng)有了不少原始用戶,而且有比較完善的功能場景支持了,Extension只需著眼于某一個細節(jié)功能點即可。

  當年iOS 8公布Keyboard Extension之前,大家怎么使用搜狗輸入法還有印象嗎?跳到搜狗的App完成輸入再回到原來的App做粘貼,整個體驗有多酸爽就不用多說了?,F(xiàn)在呢,搜狗輸入法體驗已經(jīng)可以取代原生鍵盤了。

  最近隨著錘子大火的訊飛輸入法,如今還面臨著當年搜狗的困境,無法在當前App完成語音轉文字的輸入,需要跳出去再跳回來。不過我想,語音的權限在Keyboard Extension當中放開也是早晚的事情,訊飛需要的是耐心。

  除了Keyboard Extension之外,還有其他不少Extension Point,這些接入點能帶來怎么樣的新功能體驗,完全取決于開發(fā)者的想象力,現(xiàn)在開放的Extension有:

iOS中Extension開發(fā)是什么?

以上每一個Extension Point都開放了哪些API,值得每個開發(fā)者和產(chǎn)品經(jīng)理一一詳細閱讀,里面很有可能隱藏著尚未被開發(fā)或者充分利用的功能需求點。

  Extension需要大膽的腦洞

  腦洞是新產(chǎn)品,新Feature的思想之源。腦洞是可以大膽的,但求證是必要謹慎的。

  EasyCode的腦洞

  之前開發(fā)Xcode 插件EasyCode 的時候,先是預置了一些固定的快捷鍵匹配,后來一想如果可以讓用戶自己配置快捷鍵豈不是更方便,但Xcode目前的Extension開放的API實在是少的可憐,后來一番腦洞和順藤摸瓜,查到了Extension的完整文檔,發(fā)現(xiàn)Extension是可以和Container App之間進行數(shù)據(jù)共享的。也就是說我可以開發(fā)一個獨立App來編輯快捷鍵匹配,之后Extension讀取同一份數(shù)據(jù)即可,確定了思路,一天下來就完成了全部的代碼。共享的方式有多種,我目前采用的是最為方便的NSUserDefault

  進一步腦洞

  可以讀取外部文件之后,感覺一下子新打開了一扇門,是不是可以做更多功能呢?

  目前由于Xcode 8新的安全機制,導致之前很多極為好用的插件都無法使用,必須通過安全降級退回之前的版本,顯然這對不少用戶來說并不可行,尤其是經(jīng)歷過XcodeGhost事件之后。

  Xcode 8Extension一大限制是在于無法訪問完整的工程目錄文件,之前不少好用的插件都是基于完整的項目數(shù)據(jù)分析基礎之上。但是還是可以通過Extension和宿主App的數(shù)據(jù)共享來完成文件的讀取,只不過需要通過宿主App去手動的設置工程的目錄,雖然繁瑣了一些,畢竟可以讀取到完整數(shù)據(jù)了。有了這部分的數(shù)據(jù),就可以在此之上,實現(xiàn)之前類似頭文件導入,Image文件名建議,自動生成方法體等使用功能了,后面有時間了,再考慮是否在EasyCode當中實現(xiàn)上述功能,值得調研的腦洞。

  鍵盤拓展

  最近想到一個小點子,原本想基于Keyboard Extension做一個實用的小工具,剛寫了一些代碼就遇到了瓶頸。原本以為Keyboard Extension可以獲取到完整的用戶輸入然后再做分析,看了API之后,才發(fā)現(xiàn)我低估了Apple限制開發(fā)者的能力。

  @protocol UIKeyInput

  #if UIKIT_DEFINE_AS_PROPERTIES@property(nonatomic, readonly) BOOL hasText;#else- (BOOL)hasText;#endif- (void)insertText:(NSString *)text;- (void)deleteBackward;

  @end

  上面這段protocol就是Apple給開發(fā)者開放的API,基本上有用的就是插入和刪除,還可以通過以下兩個property獲取到輸入框 當前行 的內容:

  @property (nullablenonatomicreadonly) NSString *documentContextBeforeInput;@property (nullablenonatomicreadonly) NSString *documentContextAfterInput;

  注意是當前行,不是全部內容,我可以理解Apple從隱私的角度去設計這個限制,但用戶都選擇使用Custom Keyboard去鍵入內容了,難道還會介意內容被開發(fā)者獲取嗎?我想不明白其中的邏輯。

  所以一時興起的idea不得不暫時中止,這就是我上面所說的小心求證,你想當然的認為Extension應該有什么,Apple想當然的限制你訪問什么。

  我還查閱了幾個Extension文檔,邊看邊腦洞,有不少小點子。

  比如現(xiàn)在MaciOS之間通過airdrop傳遞圖片的步驟稍微繁瑣了點,如果通過Extension的方式說不定可以簡化幾步,當然啦,這也需要進一步的求證。總之,我相信App Extension當中還是藏有不少寶藏的。

  結束語

  對于App Extension我還是持積極樂觀的態(tài)度,畢竟未來的空間會更大,雖然Apple會小心謹慎的逐步開放Extension Point,我們開發(fā)者也可以且行且珍惜,說不定iOS 1112…iOS 100的時候會有什么新接口值得一試呢。

 

文章來源:MrPeak技術分享

您還未登錄,請先登錄

熱門帖子

最新帖子

?