如果你想要在Siri界面直接進(jìn)行一些操作,而不是讓Siri打開(kāi)APP。那么你可能需要使用Intent Extension了。
在Framework添加Intens.framework和IntentsUI.framework

然后File->New,選擇“SiriKit Intent Definition File”

這樣會(huì)生成一個(gè)后綴名為.intentdefinition的文件,選擇,然后點(diǎn)擊“+”,選擇"New Intent",創(chuàng)建一個(gè)Inten文件.

創(chuàng)建完成后,編譯一下項(xiàng)目,Xcode 會(huì)自動(dòng)生成對(duì)應(yīng)的類(lèi),類(lèi)名取決于右邊的Custom Class的名字。每個(gè)類(lèi)包含了 IntentHandling 協(xié)議和 IntentResponse 類(lèi)等所需要的內(nèi)容。
需要注意的是,這些類(lèi)不會(huì)出現(xiàn)在項(xiàng)目的目錄中,有點(diǎn)和 Core Data 類(lèi)似。
但你可以正常使用,可以為其新建 Category 或者導(dǎo)入頭文件就可以直接使用。

觀察一下plist,可以看到多了這項(xiàng)內(nèi)容。如果沒(méi)有,可以手動(dòng)添加。Value為前面提到的自動(dòng)生成的文件的類(lèi)名。

Category根據(jù)自己的需求來(lái)選就行了,每一個(gè)參數(shù)屬性到時(shí)候都會(huì)對(duì)應(yīng)生成一個(gè)resolveParametter方法

"User confirmation required"這個(gè)選項(xiàng)決定了生成的視圖有沒(méi)有確認(rèn)按鈕選項(xiàng)

沒(méi)有勾選時(shí)生成的視圖

勾選后生成的圖,按鈕的值由前面設(shè)置的Category決定

title的顯示需要為變量,那么在Parameters那邊新增一個(gè)變量(我這邊設(shè)定為actName)。然后再Supported Combinations,添加這個(gè)屬性。Summary那邊添加值{Your_Parameter}。這樣在添加到Siri界面,圖片下面的文本就是對(duì)應(yīng)的變量值了。
同時(shí)將Shortcuts app的勾去掉。這樣到時(shí)候生成的快捷指令,下面的title就是對(duì)應(yīng)你的變量的內(nèi)容了。

接下來(lái),創(chuàng)建Intents Extension。File->New target,選擇Intents Extension。
為了讓 Extension 的界面便于控制,我選擇了 Include UI Extension。這樣就同時(shí)創(chuàng)建了兩個(gè)Extension。

創(chuàng)建之后,回到前面的intentdefinition文件,選中,觀察一下右邊的Target Membership,除了主target還要勾選上Intent Extension 和Intent ExtensionUI這兩個(gè)target ,否則在這兩個(gè)擴(kuò)展里,無(wú)法訪問(wèn)到前面創(chuàng)建的Intent類(lèi)。

然后在新生成的這兩個(gè)target里的plist文件里,也添加上前面生成的Intent類(lèi)型,這樣到時(shí)候才能正確識(shí)別出這個(gè)intent。


同樣的,Intent Extension中也可以使用語(yǔ)言國(guó)際化。選擇intentdefinition文件,選中右邊的Localize...按鈕就可以了。然后添加一下自己需要的語(yǔ)言。一般來(lái)說(shuō),貌似會(huì)把本體target中,你使用到的語(yǔ)言放到待選欄中讓你選擇。

看一下生成的多語(yǔ)言文件。跟在本體target中使用一致,不過(guò),前面的部分看著感覺(jué)像加了密呢。

如果用到了swift和OC的混編,擴(kuò)展里面也是需要橋接文件的

數(shù)據(jù)共享——app Groups
在需要數(shù)據(jù)共享的target中,使用同一個(gè)GroupID


另外需要注意一下,Extension支持的系統(tǒng)和App是獨(dú)立設(shè)置的。當(dāng)初在做的時(shí)候Xcode升級(jí)到最新版本,Extension默認(rèn)的target系統(tǒng)版本是iOS13.2,后面一直沒(méi)改過(guò)來(lái)。導(dǎo)致只有在iOS13.2的手機(jī)才能執(zhí)行siri。把Extension的修改過(guò)來(lái)就可以了。

Demo
備注:這個(gè)我自己重新剝離項(xiàng)目用OC寫(xiě)的一份簡(jiǎn)易Demo,可能和文中的幾個(gè)地方細(xì)節(jié)有所不同,請(qǐng)見(jiàn)諒。
參考:
WWDC 2018 Shorcuts
iOS12 Siri ShortCuts 應(yīng)用
蘋(píng)果官方 Siri ShortCuts Demo
iOS12 Siri Shortcuts(二)
iOS 12 新特性 Sirishortcut(捷徑)調(diào)研(二)
APP Extension 與 APP之間的數(shù)據(jù)共享
iOS Action Extension開(kāi)發(fā)教程,實(shí)現(xiàn)跨APP的數(shù)據(jù)共享