Actions - Shortcuts 的超級百寶箱 🧰

上一篇文章提到了 Actions 這個可以讓你的 Shortcuts 變強 n 倍的超級百寶箱,突然覺得似乎沒有看到過太多關於這個 app 的介紹,這麼好的東西怎麼能只有我知道!🤩

在開始之前,當然就是先上連結啦:

Actions
Additional actions for the Shortcuts app

其實我一開始看到這個 app 的時候,最讓我驚訝的是 Sindre Sorhus 這個名字。這個是他的 GitHub profile。這個人真的是不可思議,只要你是軟體工程師,絕對不可能對這個名字沒印象 🤩!我自己就不知道用了他多少 library,要說他是 util 之神都可以!結果沒想到連在 iOS 跟 Shortcuts 上面 util 之神也沒有讓大家失望。

根據 Actions 的網站上說明他總共有超過 180 個好用的 actions 可以讓你做 shortcut 的時候更方便。在你安裝完成之後打開 Shortcuts 然後點進去 Actions 這個 app 裡,你就會看到密密麻麻的 action,真的是超級完整!而且除了 iOS 之外,macOS 也可以使用噢 🎉!

那接下來就來介紹幾個我超常用到的 actions 吧!

List Manipulation

相信大家都會有那種拿到一組資料之後想要插入一筆新的或者是移除裡面的某一個的需求吧。如果只用內建的 list 的話幾乎只能靠不斷地 loop 來達到一些 list 相關的 operation。Actions 裡面有超多 list 相關的 action 可以使用:

這裡舉一個簡單的例子。以我上一篇文章分享的那個 Apple TV VPN Control 為例,其中有一個功能是顯示最後連線的 3 個地點,這個時候就可以用到 actions 裡面的這些功能囉。這裡我們先定義 2 個變數:

  • location - 使用者剛選的區域
  • recents - 最近連線的區域

那整個把 location 加進 recents 的流程大概是這樣:

  • 首先用 Get Index of List Item 找出 locationrecents 裡面的第幾個,如果不存在的話會拿到 -1。
  • If 判斷拿到的數字是不是大於 0,這裡用大於 0 而不是大於 -1 是因為 Shortcuts 裡面的 list 是從 1 開始數。
    • 如果大於 0 的話,就用 Remove from List 把找到的第幾個從 recents 移除。然後再把移除之後的 list 存回 recents
    • 到這裡就把新選擇的區域跟本來清單裡面有一樣的區域刪掉了。
  • 接下來要把 location 加到 recents 的最前面,這樣最新的就會出現在選單的最上面了。用 Add to List,選擇 Prepend,把 location 加到 recents 的最前面。(這裡要選 Prepend 噢,要不然預設是 Append,就會加到最後面)
  • 再來因為我們只想要留最新的 3 筆,所以把剛剛修改完的 list 直接接到下一個 Truncate List,然後設定留 3 筆。
  • 最後再把修改完的 list 存回 recents 就完成啦!

為了方便大家練習,我直接把上面這個範例放在這裡,大家可以按下面的按鈕加到自己的手機玩玩看。直接執行他就會問你要新增的 location 是什麼,跟修改完之後的 list 裡面有什麼噢。

Wait Milliseconds

這個也是很有趣,雖然本來就有一個內建的 Wait action 了,但是最少只能 1 秒鐘,如果要比 1 秒還短的話,這個 Wait Milliseconds 就很好用囉!

內建的 Wait 跟 Actions 裡面的 Wait Milliseconds

隨機

很多時候我們需要隨機產生一個數字或者字串,內建的只有 Random Number,Actions 直接給我們全系列的 Random 相關 actions,這樣就不需要從隨機數字開始,可以直接產生 Text、Boolean、日期時間等等。

Global Variables

最後也就是我最常用的 Global Variables 了!我們常常都會需要保存一些東西,就算這次執行完了,下一次也想要讀出上一次用的變數。內建的變數只要執行一結束就沒有了。所以一直以來大家都會搭配一些外部的 App (像是內建的提醒事項) 來當作 Shortcuts 存檔的地方。

Actions 直接給了一個強化版的變數 – Global Variables!你設定在 Global Variables 裡面的資料可以跨 Shortcut 存在噢!這樣就可以把一些我們想要記下來的東西記在 Global Variables 裡面了。Global Variables 用起來還算蠻簡單的,其實就是一個 key-value store。你只要把要存的東西放在一個 key 裡面,之後只要讀取這個 key 就會拿到你存進去的東西了。我們在 Apple TV 的網路任意門那篇文章裡面用來儲存最後連線的 3 個地區的方法就是用 Global Variables 噢。

Global Variable 裡面除了可以存 Text、Number、Boolean 這些常見的資料種類之外,你也可以直接存一整個 Dictionary 給他,其實用起來很彈性的。Delete 可以把設定過的 Global Variable 清空。下面提供了一個簡單的使用範例大家可以看看:

這個範例除了用了 Global Variable 來儲存一段文字之外,編輯的部分還用了 recursive 讓這個 Shortcut 自己執行自己,這樣就可以不用複製貼上東西啦。這也順便 demo 了其實每個 Shortcut 也可以當作一個 function 來使用,這樣如果要做比較複雜的東西的時候,其實可以把複雜的動作拆開成多個小的 Shortcut,再用一個主要控制流程的 Shortcut 來當作執行點。其實跟寫 code 還蠻像的!上面的 Shortcut 執行起來像下面這樣 (中間還有一段 xyz 被 autocorrect 成 cuz...):

按下面的按鈕一起來玩玩看這個範例吧:

大家平常會做一些自己覺得方便的 Shortcuts 嗎?我真的很喜歡 Shortcuts 噢,覺得是一個可以拿來做 automation 跟一些小玩具的超級方便工具!如果大家喜歡更多 Shortcuts 相關的內容,可以在下面留言讓我知道噢!