--- title: iOS 捷徑筆記 tags: Shortcuts, iOS --- # iOS 捷徑筆記 使用環境: `iPhone SE (2022)` `iOS 16.3` 因較習慣日文介面及英文資料,部分 action 或物件的名稱可能不一樣。 ## 操作 - 長按各個動作的 icon 可以查看該動作的詳情(輸入輸出格式 etc)或**複製**該動作,或是將複製的動作**貼在該動作上面或下面**。 - 輸入變數時,按 **選擇變數(魔法棒圖式)** 可以看各個動作的輸出,以免搞不清楚類似名稱的變數是哪一個。 - 承上,設定辭典中的子辭典或子列表的值時,如果想要設定承別的變數,按了魔法棒之後直接把**彈出的畫面往下滑**,再從最上層畫面選變數即可。 ## 條件/迴圈 :::warning 當條件及迴圈不只一個,且互相包含時,可能會出現錯位,例如最外層應該是迴圈,最下面出現的卻是 `if` 的結束。 此現象會直接影響到捷徑執行,可能因此出現 crash。 最直接的修正方式為刪除所有條件及迴圈(可選擇將中間的動作留下),再由最外層一層一層加回來。 ::: ## 變數 ### 辭典 (JSON) #### :warning: Array 讀入問題 :::warning 於 `iOS 16` 使用 JSON 檔讀入成辭典時,似乎不可為 array,若為 array 需先轉換成 object。 [來源 reddit 討論串](https://www.reddit.com/r/shortcuts/comments/fmkpsd/opening_json_file_in_icloud_causes_crashing/) 例如,以下 JSON ```json= [ { "key": 0, "value": "haha" }, { "key": 1, "value": "hahaha" } ] ``` 須置換成 ```json= { "data": [ { "key": 0, "value": "haha" }, { "key": 1, "value": "hahaha" } ] } ``` 才可以使用。 從遠端取得,無法事前編輯檔案之 JSON 資料,可能須用其他方式存檔後再行輸入,或是將副檔名改為 `txt` 後使用文字功能帶入變數,依照上述方始改變再引入辭典,之後用迴圈來跑過每個項目。 若是真的無法編輯,或有太多變數,建議使用 [Scriptable](/@shuan0545/ByFIf_qcs),但各個 App 間的串接支援度較差。 ::: #### :warning: 辭典中的變數型態問題 > 這是個人使用上碰到的問題,若有其他方法可以處理,敬請留言指教。 :::danger 在使用`辭典` action 設定巢狀時,會出現變數型態自己跑掉的問題。 假設我們想要一個如下的物件: ```json= { "key1": "some text", "key2": 123, "key3": [ { "subkey1": "text", "subkey2": "other text" }, { "subkey1": "more text", "subkey2": "yeah" } ] } ``` 當你使用`辭典` action 設定好 `key1` 是文字、`key2` 是數字、`key3` 是列表,接著在 `key3` 中新增一個辭典項目。 設定 `subkey1` 時,你會發現你才打了 key,值的地方被自動代入 `some text`,但沒關係,手動改成 `text` 就可以。 問題在於要來設定 `subkey2` 時,你可能會發現你輸入 key 可能才到一半,變數型態突然自動變成數字,還自動代入 `123` 了。 這時不管你想改值或是用外部變數代入值,pass 到別的地方時還是會被自動轉成數字,同時我也沒有找到任何方法可以不把項目刪掉直接改型態。(刪掉重設就是 loop 上一步) 這時只能在最上層 `key1` 的前後加入一個文字的項目,輸入好 `key3` 裡面的東西之後再改最上層了。 長話短說 --- 1. 巢狀辭典中的子辭典的項目會自動變成跟**最上層的型態順序相同的型態**,因此要先把最上層的型態順序改成子辭典的型態順序,設定好子辭典的值之後再設定最上層。 2. 之後要再修改子辭典的值時,也需要再把最上層改掉。 3. 子辭典的項目數量超過最上層時,似乎會直接閃退。 ::: #### 類型轉換 大部分時候,可以選擇辭典物件,點開類型並且在最下面輸入 key 以取得 key 中的值。 有些如 `if` 等條件式的 aciont,捷徑會自動**根據變數類型提供不同的運算子**,一般的變數可以直接**點開變數並點選需要的類型**來使用需要的邏輯條件。 但是從辭典中取值時,直接使用 `if`,用辭典變數輸入 key 的話,變數似乎無法強制變更型態。 因此我會使用`設定變數`,先將欲使用的值讀到另一個變數中,再用 `if` 讀取該變數,同時強制變更變數型態。 ### 字串 如果不是需要使用搜尋取代等較複雜的字串處理,單純需要字串結合或前後增加固定文字時,可以直接使用`文字`動作,在方框中輸入需要的固定字串,或從鍵盤上方選擇變數名稱就可代入變數。 :::warning 我不確定是否為字串變數的問題,或是捷徑在輸出時的狀況,但當我使用`base64編碼`將照片轉為 base64 時,即使開了不換行,在將結果輸出到畫面或檔案時都會出現被換行的狀況,應是字串過長,請小心處理。 ::: ### 搜尋類型 Action 的回傳 #### 音樂搜尋 當你搜尋複數個音樂時,用加入播放列表、加入待播清單等功能非常簡單,可以直接 pass 整個結果。 但如果想要一個一個處理結果時,就會有點麻煩。 首先很直覺的,我們可以使用「重複每一個」來對每一個結果進行操作,但當你從「重複項目」中想要拿出「歌名」、「播放次數」等等的細節時,你會發現拿到的是**用換行符號把所有結果合在一起的字串**。 :::info 想要分別拿到每一個結果的「歌名」等內容,要再多加一個 **「取得音樂的詳細資訊」** 的動作來將**重複項目**的內容放入變數。 ::: ## 行事曆 ### 新增行程 #### 缺點 - 只能預先設定一個通知。(可以在執行時顯示新增的頁面,手動調整)。 #### 優點 - 把`整日` 打開時,選擇通知時間為「開始時刻」或是「x 分鐘/小時」前,就可以設定午夜或前一天晚上的通知時間,或是直接使用客製化設定時間 ## 與其他程式互動 除了有提供捷徑功能的 app 以外,只要將捷徑的第一個動作設定為從捷徑輸入,就可以把捷徑放在分享的清單中。 可以使用剪貼簿當作捷徑的輸入,但需要再設定權限。權限為每個捷徑獨立設定,權限不足時應會有彈窗提示。 ## Siri ### 執行 理論上可以直接對著 Siri 說出捷徑的名稱來執行捷徑,但如果捷徑的名稱與 Siri 語言不一致可能會聽不懂,又或者跟其他關鍵字衝突可能會無法順利執行。 因此建議將常用的捷徑設定為慣用語言,或是把捷徑名稱中包含的外文加入用語集,用慣用的語言轉換。 ### 輸入 使用 Siri 執行捷徑時,即使沒有開啟語音輸入,捷徑中要求的輸入(數字、文字)也都會變成用語音。(前提是你的 Siri 不是鍵盤模式) Siri 會唸出 placeholder 來要求輸入,若你的 Siri 設定成英文,可能會唸不出中文或日文的 placeholder。 從清單中選取的類型的輸入,可以對著 Siri 說出選項,也可以用觸控選擇。 ### 輸出 若有任何執行結果的表示,Siri 會把文字唸出來。 ## 其他問題 ### 拷貝到剪貼板 :::warning 之前在製作一些主要用來分享處理過的文字的捷徑時,使用「拷貝到剪貼板」這個動作,有時無法正常運作。(後來在貼上時沒有東西) 因此建議使用「分享」這個動作,直接打開內建的分享畫面,雖然這樣可能會造成在分享中又分享的奇妙畫面。 ::: ### 將輸出轉成語音 :::warning 除了用 Siri 執行捷徑之外,也可以直接將變數 pass 到**轉成語音**的 action 使手機念出變數內容。 此動作可以設定與 Siri 不同的語音跟語速等等細節。 但此動作不如 Siri 順暢,有時會 delay 或 crash,若是常有這種狀況可以改用**將文字轉成語音檔案**的 action,再用**播放聲音**的 action 來播放。缺點是可能會需要一些轉換時間。 ::: ## 其他 iOS 筆記 - 行事曆 --- 加入行事曆可使用 `.ics` (iCalendar)格式,但須以 `Safari` 開啟。 `Safari` 無法直接開啟 local 檔案,因此需用捷徑([例](https://www.icloud.com/shortcuts/76e984f27b194fbf9c81044bf8bd0109))將檔案內容轉送給 `Safari`。 (可從網頁下載的檔案無需使用此方法)