---
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`。
(可從網頁下載的檔案無需使用此方法)