Share Extension

iOS - Share Extension

1. 在學習 Share Extension 之前,我們需要 先了解一下iOS的App Extension

2.1 創建Share Extension擴展Target

//注意:擴展不能單獨創建,必須依賴于應用工程項目也就是載體,因此如果你還沒有創建一個應用工程,先去創建一個

2.1.1、打開項目設置,在TARGETS側欄地下點擊“+”號來創建一個新的Target,如圖:

添加Target(這邊我已經添加了一個MyAppShare步奏如下)

2.1.2、然后選擇”iOS” -> “Application Extension” -> “Share Extension”,點擊“Next”。如圖:

差距選擇

創建ShareExtension擴展

2.1.3、給擴展起個名字,這里填寫了“MyAppShare”,點擊“Finish”。如圖:

創建插件名稱圖

2.1.4、這時候會提示創建一個Scheme,點擊“Activate”

那么,到了這里創建Share Extension的工作就算是完成了。接下來可以先進行一下編譯運行。這里跟做App開發的時候會稍微有點不一樣。因為Extension是需要Host App(宿主應用)來運行的。所以,XCode中會彈出界面讓我們選擇一個iOS的App來運行Extension。如圖:

宿主選擇圖

選擇宿主應用

這里我選擇了XCode建議的應用Safari,然后點擊“Run”來進行調試運行。XCode會啟動Safari,如圖:

啟動圖

我們隨便點開一個網頁,點擊分享按鈕就會彈出分享菜單,如圖:

分享菜單彈框圖

運行效果圖

可以看到剛才建立的Share擴展已經顯示在面板上了,如果你沒有發現自己的擴展,那么你可以將菜單滑動到最右邊,在“更多”選項中激活自己的擴展。如圖:

我們點擊自己創建的分享項,其彈出一個分享窗口。如圖:

分享界面效果圖

2.2. 配置Share Extension

接下來我們需要給他一些設置。我們展開XCode左側欄的MyASppShare目錄,找到Info.plist文件。如

配置圖

我們只需要關注以下幾個字段的設置:(更多詳細的Information Property List Key Reference

Bundle display name

擴展的顯示名稱,默認跟你的項目名稱相同,可以通過修改此字段來控制擴展的顯示名稱。

NSExtension

擴展描述字段,用于描述擴展的屬性、設置等。作為一個擴展項目必須要包含此字段。

NSExtensionAttributes

擴展屬性集合字段。用于描述擴展的屬性。

NSExtensionActivationRule

激活擴展的規則。默認為字符串“TRUEPREDICATE”,表示在分享菜單中一直顯示該擴展。可以將類型改為Dictionary類型,然后添加以下字段:
NSExtensionActivationSupportsAttachmentsWithMaxCount
NSExtensionActivationSupportsAttachmentsWithMinCount
NSExtensionActivationSupportsImageWithMaxCount
NSExtensionActivationSupportsMovieWithMaxCount
NSExtensionActivationSupportsWebPageWithMaxCount
NSExtensionActivationSupportsWebURLWithMaxCount

NSExtensionMainStoryboard

設置主界面的Storyboard,如果不想使用storyboard,也可以使用NSExtensionPrincipalClass指定自定義UIViewController子類名

NSExtensionPointIdentifier

擴展標識,在分享擴展中為:com.apple.share-services

NSExtensionPrincipalClass

自定義UI的類名

NSExtensionActivationSupportsAttachmentsWithMaxCount

附件最多限制,為數值類型。附件包括File、Image和Movie三大類,單一、混選總量不超過指定數量

NSExtensionActivationSupportsAttachmentsWithMinCount

附件最少限制,為數值類型。當設置NSExtensionActivationSupportsAttachmentsWithMaxCount時生效,默認至少選擇1個附件,分享菜單中才顯示擴展插件圖標。

NSExtensionActivationSupportsFileWithMaxCount

文件最多限制,為數值類型。文件泛指除Image/Movie之外的附件,例如【郵件】附件、【語音備忘錄】等。單一、混選均不超過指定數量。

NSExtensionActivationSupportsImageWithMaxCount

圖片最多限制,為數值類型。單一、混選均不超過指定數量。

NSExtensionActivationSupportsMovieWithMaxCount

視頻最多限制,為數值類型。單一、混選均不超過指定數量。

NSExtensionActivationSupportsText

是否支持文本類型,布爾類型,默認不支持。如【備忘錄】的分享

NSExtensionActivationSupportsWebURLWithMaxCountWeb

鏈接最多限制,為數值類型。默認不支持分享超鏈接,需要自己設置一個數值。

NSExtensionActivationSupportsWebPageWithMaxCount

Web頁面最多限制,為數值類型。默認不支持Web頁面分享,需要自己設置一個數值。

對于不同的應用里面有可能出現只允許接受某種類型的內容,那么Share Extension就不能一直出現在分享菜單中,因為不同的應用提供的分享內容不一樣,這就需要通過設置NSExtensionActivationRule字段來決定Share Extension是否顯示。例如,只想接受其他應用分享鏈接到自己的應用,那么可以通過下面的步驟來設置:

將NSExtensionActivationRule字段類型由String改為Dictionary。

展開NSExtensionActivationRule字段,創建其子項NSExtensionActivationSupportsWebURLWithMaxCount,并設置一個限制數量。

2.3 處理Share Extension中的數據

頂部包含取消和分享兩個按鈕同時在插件中也包含兩個對應方法

- (void)didSelectCancel;

- (void)didSelectPost

在這兩個方法里面可以進行一些自定義的操作。一般情況下,當用戶點擊提交按鈕的時候,擴展要做的事情就是要把數據取出來,并且放入一個與Containing App(容器程序,盡管蘋果開放了Extension,但是在iOS中extension并不能單獨存在,要想提交到AppStore,必須將Extension包含在一個App中提交,并且App的實現部分不能為空,這個包含Extension的App就叫Containing app。Extension會隨著Containing App的安裝而安裝,同時隨著ContainingApp的卸載而卸載。**)共享的數據介質中(包括NSUserDefault、Sqlite、CoreData),要跟容器程序進行數據交互需要借助AppGroups服務.下一篇我們會講到如何實現我們的主程序和拓展程序之間的通訊。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容