App Extension Programming Guide-App Extension Essentials AppExtension編程指南:擴展基礎html
App Extensions Increase Your Impact 經過應用擴展提高你的應用編程
iOS8/OS X v10.10app
翻譯自蘋果官方文檔 App Extension Programming Guide--App Extensions Essentialside
重要提示: 該文檔是一個開發過程當中使用API或技術的預發佈文檔。Apple提供該文檔的目的在於讓開發者儘快熟悉新技術和新的編程接口,使得開發者針對蘋果品牌設備進行開發。可是該文檔會不斷的更新,使用該文檔提供的技術開發的軟件應該基於最終操做系統軟件和最終的文檔進行測試。要時刻關注該文檔的更新,以便了解新的API和技術特性。測試
當iOS 8.0和OS X v10.10發佈後,一個全新的概念出如今咱們眼前,那就是應用擴展
。顧名思義,應用擴展容許開發者擴展應用的自定義功能和內容,可以讓用戶在使用其餘app時使用該項功能。你能夠開發一個應用擴展來執行某些特定的任務,用戶使用該擴展後就能夠在多個上下文環境中執行該任務。好比說,你提供了一個能讓用戶把內容分享到社交網站的擴展,用戶能夠在閱讀郵件信息或者上網時經過app擴展來發表評論。或者說,若是你提供了一個能展現當前比賽分數的擴展,那麼用戶能夠把它放在通知中心,這樣在他們打開Today view時就能看到最新的比分。你甚至能夠開發一個提供自定義鍵盤的擴展,用戶能夠用它代替iOS系統自帶的鍵盤。網站
iOS和OS X定義了幾種應用擴展的類型,每一種類型的擴展都對應系統中的一塊區域,好比分享、通知中心以及鍵盤等。咱們把這些支持擴展的區域稱爲擴展點
。每一個擴展點都定義了使用策略並提供了API,你能夠用來針對該區域建立擴展。要注意的一點是,當你針某個擴展點開發應用擴展時,該應用擴展的功能必需要符合該擴展點的功能特性。ui
table 1-1 列出了iOS和OS X中的擴展點,並列舉了對應擴展點的示例任務。操作系統
因爲系統定義了擴展特定領域,因此當你在開發應用擴展時,很重要的一點是,你要選擇最能匹配你想在app中提供的功能的區域。好比說你要開發一個分享信息的應用擴展,那麼你只能選擇分享擴展點,而不能使用Today或Action擴展點。插件
重要提示:你開發的app擴展要精確地匹配Table 1-1中列出的擴展點。你不能開發一個通用的擴展來匹配一個以上的擴展點,翻譯
應用擴展不一樣於應用,雖然你須要基於應用去開發應用擴展,可是每一個應用擴展都是獨立於應用運行的二進制文件。
當你要建立一個應用擴展時,須要在項目中建立一個新的Target。和其餘 Target 同樣,擴展 Target 將設置信息和相關文件打包在Products文件下生成一個擴展名爲.appex的包。你能夠在應用項目中建立多個擴展Target(一個應用程序能夠包含一個或多個應用擴展,該應用程序稱爲主體應用程序)。
開發一個應用擴展最好的切入點是使用 Xcode 在兩個平臺上爲每一個擴展點提供的模板去開發。每一個模板包含擴展點的具體實現文件和相關設置,並生成獨立的二進制文件添加到應用程序的包中。
注意:在iOS中,包含擴展的應用必須提供一個擴展以外的功能。而在OS X中沒有這個硬性要求,一個包含擴展的應用不要求必須提供一個額外功能。
爲了將擴展分發給使用者,你須要提交一個包含擴展的應用到App Store。用戶只要下載並安裝了你的應用,那麼同時也自動安裝了你的應用擴展。
當安裝了應用擴展以後,用戶首先必需要開啓他們。一般,用戶能夠在他們當前任務的上下文環境中啓動擴展。好比,若是你的擴展啓用了「Today」通知,那用戶能夠在通知中心編輯「Today 」view 來添加你的擴展。在其餘狀況中,用戶可使用 iOS 中的「Settings」或者 OS X 中的「System Preferences」來啓用和管理擴展。
雖然每種類型的應用擴展的功能都是不一樣的,但對大部分擴展來講,它們在用戶體驗上仍是有一些共同點的。若是你準備開發一個應用擴展,有一點很重要,那就是要理解在你選擇的擴展點中,用戶體驗是什麼樣的。從一個更高角度看,對於全部擴展來講,最佳的用戶體驗是快速、流暢以及只關注單一任務。
一般用戶經過與系統提供的用戶界面進行交互來開啓應用擴展。好比說,用戶在app中經過激活系統提供的分享按鈕來訪問 Share 擴展,並從展現的列表中選擇擴展。一個應用擴展必需要提供一個圖標,以便用戶選擇和識別,一般狀況下,應用擴展的圖標與應用程序的圖標是相同的。
雖然大多數的應用程序擴展都提供了一些自定義的UI元素,但通常用戶不會看到你的自定義用戶界面,除非他們進入到應用程序擴展中。當用戶進入應用擴展,你的自定義UI可讓用戶知曉他們正進入一個新的上下文環境。因爲用戶能夠把你的擴展和當前應用區別開來,因此他們會欣賞你提供的獨特功能。當用戶意識到擴展實際上是獨立運行的實體時,他們也能夠確認並移除體驗很差或功能很差的擴展。
爲了讓用戶平滑過渡到你的應用程序擴展,你要斟酌自定義界面與擴展點界面的風格,作一個權衡。好比說,一個很好的方法就是讓你的插件看起來像是通知中心中原生的Widget,再好比說照片編輯擴展,你應該建立一個和 iOS 中 Photos 應用風格相協調的用戶界面。
注意:即便你的應用程序擴展沒有展現自定義UI(不包括圖標),但用戶仍然知道該擴展不一樣於當前的應用,由於它們須要採用特定的操做來激活。