無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」

2022年07月15日14:36:22 熱門 1458

一個月前 JailbreakHum同學寫了一篇《把你的 iOS 設備變成控制 Mac 的「遙控器」》。碰巧我當時也想要寫一篇類似的文章,當這標題映入眼帘,我心裏便是咯噔一下,腦海里閃過 N 個加粗大字:「該死,我想寫的東西居然被搶先了!」。

不過,仔細一讀,發現雖然晚了一步,但自己的方法還是有可取之處的,簡單來講,我的方法和 JailbreakHum 那篇文章實現的效果相同,都利用了 AppleScript,但是我不需要用 Hazel,事實上無需任何第三方應用,就可以實現通過 iPhone 來控制 Mac。

原理

想要遙控 Mac,關鍵就在於 Mac 上要有一個能根據手機上的指令自動觸發 AppleScript 的後台程序。但是,我們有沒有必要為了遙控 Mac 特意買一些應用(比如 Hazel),然後單純為了遙控 Mac 就讓這些應用常駐後台,這是對金錢和內存的雙重浪費。

所以在我看來,這個用來觸發 AppleScript 的扳機應該滿足兩個條件:

  1. 這是一個我們本來就一直放在後台的應用;
  2. 這個應用最好免費。

好消息是,確實有兩個應用完全符合要求,它們就是 Message 和 Mail 兩個原生應用。大多數人都不知道 Message 和 Mail 都自帶了自動運行 AppleScript 功能,下面請讓我一一介紹。

通過 Message 操控 Mac

Message 啟用自動觸發 AppleScript 的方法是在應用偏好設置中打開 「通用 - AppleScript 處理程序」菜單,從中選擇我們想要運行的 AppleScript。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

令人意外的是,蘋果已經為我們準備好了幾個十分有用的 AppleScript,例如用來遙控 iTunes 的 iTunes Remote Control。而這些用來運行的 AppleScript 就儲存在 /Users/用戶名/Library/Application Scripts/com.apple.iChat/中。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

點開這些 AppleScript 文件,在文件最開頭的是蘋果的免責聲明,後面就是腳本代碼了,代碼的註解非常詳細,即使不熟悉 AppleScript 的人也能大概看懂(學習 AppleScript 的好教材)。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

這裡以選擇 iTunes Remote Control 為例。先讓我們來看一下這個 AppleScript 的效果。

首先,確保我們 Mac 上所使用的 iMessage 帳號與我們手機上的帳號不同(你可以先試一試如果賬號一樣會發生什麼)。

然後,我們只要從 iPhone 上向電腦上的 iMessage 帳號發送 play,iTunes 就會被自動打開並播放音樂,不僅如此,你還會收到 iMessage 回復告訴現在正在播放的是什麼。除了 play 以外,其它指令還包括:

  • pause: 暫停status: 播放狀態
  • next: 下一首
  • previous: 上一首
  • mute: 靜音
  • unmute: 解除靜音
  • help: 顯示幫助

但是,這個 AppleScript 有兩個小的問題。

1. 我們 Mac 上的 iMessage 帳號與 iPhone 上的一般是一樣的,我們不可能為了遙控器的需求,去讓 Mac 使用一個不同的賬號 ,但請看代碼的這裡:

on getCurrentiTunesTrack

set theCurrentTrackMessage to "Not playing."

由於反饋信息 (theResponse) 被默認為 「Unknown Command.」,即一旦收的任何沒有預先設定過的命令,Apple Script 都會自動回復 「Unknown Command」, 而 「Unknown Command.」 本身也並非定義過的指令!所以當自己給自己發送信息後會發生什麼,相信聰明如你應該明白了吧。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

2. 萬一你的基(姬)友也看到了這篇文章,趁你在開會時給你發了 「unmute」「play」那又該怎麼辦……?

所以,我們希望能通過「自己給自己發短訊」的形式來激活這個 AppleScript,而且確保只有自己的 iMessage 賬號才能遙控 Mac。

為了解決這些問題,我想先簡單介紹一下這個 AppleScript 的代碼。代碼主要由兩部分組成,第一部分類似一個「控制器」(message received),會在收到手機發來的信息時將命令提取出來,之後通知第二部分(runiTunesRemoteControl)用提取出的命令對 Mac 上的 iTunes 進行操作。

操作結束後,第二部分會生成一個反饋信息,並將它發回「控制器」,再由「控制器」將反饋信息發給手機。

可以想像,如果「控制器」能在收到信息時檢查一下信息是否來自我們本人,再決定是否通知第二部分進行操作,並且能在發送反饋信息給手機前,確保不會再將 「Unknown Command.」 發回,一切不就解決了嗎?

因此我們的改動將集中在「控制器」,也就是這段代碼上:

on message received theMessage from theBuddy for theChat

-- 將命令(theMessage)傳到第一部分,並將反饋信息存在 theResponse 中
set theResponse to runiTunesRemoteControl(theMessage)

-- 向手機發送 theResponse
send theResponse to theChat

end message received

改動後:

on message received theMessage from theBuddy for theChat
set serviceBuddy to name of service of theBuddy
-- 檢查發送者是否是我自己
if serviceBuddy = myiMessageAccount then

set theResponse to runiTunesRemoteControl(theMessage)
-- 確保反饋不是 「Unknown Command.」
if theResponse ≠ "Unknown command." then
send theResponse to theChat
end if

end if

end message received

這樣一來,問題就算是解決了,當然你也可以在此基礎上加上其他你想要的功能,例如關閉屏幕等。這些改動需要在代碼的第二部分中完成,只需要在多加幾個 「if」 條件語句即可。

如果你有一定編程基礎的話,這個腳本還可以變得更加強大,它可以把手機上發來的信息直接輸入 Mac 的 Termial,這樣一來我們手機上的 Message 應用可以變成一個類似 shell 的存在,可以動態執行手機上傳來的命令。

也就是說,我們的手機可以遙控 Mac 干任何事情,如果有讀者有興趣,我會在更新時貼上實現方法。

通過 Mail 操控 Mac

相較於使用 Message, Mail 的好處在於可以設定不同規則觸發不同的 AppleScript,這樣我們就沒有必要把所有 AppleScript 寫在一個文件里或是寫一個需要調度其他 AppleScript 的 AppleScript。

除此以外,還有一個好處就是如果你是 Android 手機,可能無法使用 iMessage 給自己發信息,但是 Mail 卻是完全通用的。

Mail 的設置相較 Message 容易,因為我們可以通過 Mail 直接設定 AppleScript 的觸發條件,而不是在 AppleScript 里用代碼來判斷。這樣對於沒有編程基礎的人來說更為簡單。

這裡以添加一個能關閉屏幕的 AppleScript 為例。

1. 先創建一條關閉屏幕的 AppleScript,在應用程序中打開「腳本編輯器」,新建一個 AppleScript,命令很簡單,只要輸入一行 do shell script "pmset displaysleepnow"即可,之後保存。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

2. 打開郵件應用,在偏好設置里點擊「規則 - 添加規則」;

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

3. 在這裡我們就可以設定條件,我們把條件設置為 「主題包含 Turn off the screen」 且 「發件人等於 [email protected](你的郵箱)」,並在「就執行下列操作」中選擇「運行 AppleScript」,然後選擇運行我們事先寫好的可以關閉屏幕的腳本,在運行完後視情況刪除郵件。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

與 Launch Center Pro & Workflow 整合

所謂沒有最懶只有更懶,通過 LCP與Workflow,我們在遙控時就不用重複輸入命令了。

首先介紹 Message 版的設置方法:

1. 在 Workflow 里建立動作,在 Text 塊中輸入命令,這裡以 「Pause」 為例,然後添加一個 Send Message 塊。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

2. 點擊右上角的齒輪,選擇 「Share Workflow」,在第二行中選擇 「Add to Launch Center」 。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

3. 然後在 LCP 中,建立一個 Remote Control 組,把 Workflow 放入即可。

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

這樣一來,我們就能兩鍵暫停 Mac 上的音樂了(因為發送信息還要點一次)。

對於 Mail 版,操作則可以徹底一鍵化,因為 Workflow 可以在應用內發送郵件。我們可以這樣設置 Workflow:

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

同樣,與 LCP 整合後:

無需第三方 App,同樣可以把你的 iOS 設備變成 Mac「遙控器」 - 天天要聞

寫在最後

我原來還想介紹一下如何用 「Command - C」 來遙控,但是因為 macOs Sierra 的新特性——通用剪貼板, 「Command - C」 可以說已經退出了歷史的舞台。

同時我也要感謝 JailbreakHum 的文章,結合他的文章,讀者們也許可以學到更多。

希望大家能在這篇文章里學到一些有用好玩的技巧。

參考文章:

  1. 《把你的 iOS 設備變成控制 Mac 的「遙控器」》
  2. AutoForwardIMessageText.applescript
  3. ASLR_intro

熱門分類資訊推薦

曾小賢的上司Lisa榕,現實中不僅才貌雙全,還嫁給了CEO - 天天要聞

曾小賢的上司Lisa榕,現實中不僅才貌雙全,還嫁給了CEO

曾小賢的上司Lisa榕,現實中不僅才貌雙全,還嫁給了CEO雖然說《愛情公寓》這部劇在劇情上充滿了爭議,但是一定程度上,這部劇也是很多人的回憶,是伴隨了一代人的青春回憶,而且劇中的很多角色都成為了經典,他們的口頭禪也一直被拿來玩兒梗。
Lisa榕做主持多年沒紅,被陳赫拉進愛情公寓爆紅,如今怎樣了 - 天天要聞

Lisa榕做主持多年沒紅,被陳赫拉進愛情公寓爆紅,如今怎樣了

談到《愛情公寓》這部火爆一時的歡樂喜劇,大家肯定都不陌生。不知道大家是否還記得《愛情公寓》中那個把曾小賢治得服服帖帖的女上司Lisa榕,現實中的她名叫榕榕,和劇中的形象也判若兩人。1981年出生在遼寧瀋陽的榕榕,畢業於上海戲劇學院,後來成為了上海東方傳媒集團有限公司的一名主持人。