App Extension Programming Guide-App Extension Essentials AppExtension編程指南:擴展基礎2html
Understand How an App Extension Works 瞭解應用程序擴展的工做原理編程
iOS8/OS X v10.10app
翻譯自蘋果官方文檔 App Extension Programming Guide--App Extensions Essentialside
iOS8/OS X v10.10網站
應用程序擴展不是一個應用,相反,它是主體應用程序(containing app)
中一個單獨的包,並能生成單獨的二進制文件。與主體應用程序不一樣,應用擴展實現的是一個特定的、狹義範圍內的任務,而且要嚴格遵循擴展點的協議。ui
由於一個應用程序擴展不是一個應用,因此它的生命週期和運行環境也不一樣於應用。通常狀況來講,應用程序擴展的生命週期始於用戶從某個應用中啓動它。容許用戶選擇某一種擴展來幫助他們執行某項任務的應用,咱們稱之爲擴展的載體應用(host app)
。載體應用(host app)
定義了激活擴展的上下文環境,並在其發送請求以響應用戶操做時開始擴展的生命週期。當應用擴展完成載體應用發送的請求任務後,該擴展的生命週期也隨之結束。翻譯
好比說,假定這樣一個場景,用戶在擴展載體應用(host app)
中選中一段文字,點擊分享按鈕,並從分享列表中選擇某一個分享擴展,將選中的內容分享至社交網站。此時,載體應用就會向擴展發送一個包含用戶所選文本的請求,啓動該擴展,從而去響應用戶的請求,即分享所選文本的內容。應用擴展基本的生命週期概括在下圖2-1中。3d
在圖2-1中的第2步中,系統實例化載體應用請求中肯定的擴展,並在二者之間創建通訊通道。而後擴展在載體應用的上下文場景中顯示相關界面,並使用其在載體應用請求中接收到的項目來執行任務(在上述的例子中,擴展接收到的項目是用戶選中的文本)code
在圖2-1的第3步中,用戶在擴展中執行或取消某個任務,或者直接能夠忽略該擴展。在對用戶的操做作出響應的過程當中,擴展會根據載體應用的請求當即開始執行任務,但若是有特殊須要時,擴展也會在系統後臺執行任務,這種狀況下,載體不會顯示擴展相關界面,而且用戶返回到其先前在載體應用中的上下文環境。當應用擴展執行完任務後,無論是馬上返回仍是延遲返回,但最後其執行結果都會返回給載體應用。cdn
當擴展開始執行任務以後(或者開始在系統後臺執行任務),系統就會終止擴展,好比圖2-1中的第4步。
當應用擴展在運行的時候,它只會直接和載體應用(host app)
進行通訊,而擴展和主體應用containing app
之間不會直接通訊。在擴展運行的過程當中,主體應用(containing app)
甚至都不運行。另外,載體應用(host app)
和主體應用(containing app)
之間也不會進行通訊。圖2-2中描述了運行中的應用擴展
、載體應用(host app)
以及主體應用(containing app)
這三者之間的關係。
當一個擴展須要和主體應用containing app進行通訊時,只能在載體應用肯定的上下文環境中進行間接通訊。好比,一個應用擴展有可能會運行調用它的應用程序。在這個例子中,擴展使用了不能與 containing app 傳遞消息的API。此外,應用擴展與其 containing app 能夠在一個定義爲私有的共享容器中訪問數據。圖2-3描述了擴展和 containing app 之間的間接通訊類型。
注意:在底層,系統使用進程間通訊來確保應用擴展和擴展載體應用共同來開啓無縫結合體驗。在你的代碼中,你無需考慮這些底層的通訊機制,由於你使用的是擴展點和系統提供的高級API。