精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS程序員效率提升利器之AppleScript

移動(dòng)開發(fā)
這篇文章和大家分享我平時(shí)工作時(shí),用來提升效率的神器之一:AppleScript。AppleScript雖然是一種腳本語言,但在我看來是最接近自然語言和最不具備計(jì)算機(jī)特質(zhì)的編程語言了。即使沒有計(jì)算機(jī)基礎(chǔ),在閱讀基礎(chǔ)文檔和幾個(gè)樣例腳本之后,馬上就能動(dòng)手寫出實(shí)用的腳本工具。

這篇文章和大家分享我平時(shí)工作時(shí),用來提升效率的神器之一:AppleScript。

AppleScript 雖然是一種腳本語言,但在我看來是最接近自然語言和最不具備計(jì)算機(jī)特質(zhì)的編程語言了。即使沒有計(jì)算機(jī)基礎(chǔ),在閱讀基礎(chǔ)文檔和幾個(gè)樣例腳本之后,馬上就能動(dòng)手寫出實(shí)用的腳本工具。

我感覺很多使用 Mac 系統(tǒng)的同學(xué)可能都沒意識(shí)到,與自己每天作伴的 Mac 系統(tǒng)上還有這么一個(gè)強(qiáng)大高效的腳本語言,可以從各個(gè)方面提升自己的工作效率。接下來的文章和大家分享我使用 AppleScript 的兩個(gè)場景。

在開始之前,先簡單概括下 AppleScript 的應(yīng)用環(huán)境。我們的 Mac 系統(tǒng)從應(yīng)用的角度來看,其實(shí)就是一堆 App 的集合,系統(tǒng)自帶的 App(Mail,Safari,Terminal 等)和安裝的第三方 App(Firefox,Chrome,Outlook,iTerm 等),這些主流的 App 其實(shí)都向系統(tǒng)暴露了一些實(shí)用接口,用來將一些高頻操作自動(dòng)化。誰來調(diào)用這些接口呢?AppleScript。AppleScript 可以將這些 App 和 App 內(nèi)部的數(shù)據(jù),都當(dāng)作對(duì)象來訪問,甚至可以將不同 App 串聯(lián),自動(dòng)化之后形成一個(gè) workflow。

如何編寫 AppleScript 呢?Mac 自帶腳本編輯和運(yùn)行工具,通過 Spotlight Search 搜索 Script Editor 即可。運(yùn)行 Script Editor 之后,通過菜單 File -> Open Dictionary 即可打開如下圖所示一個(gè)文檔,里面列出來所有支持 AppleScript 的 App,以及各個(gè) App 所支持的接口調(diào)用。

iOS程序員效率提升利器之AppleScript

提升工作效率,避免重復(fù)勞動(dòng)

我最近在研究如何降低 App 的 Crash 率,每天都要實(shí)時(shí)監(jiān)控是否有新的 crash 發(fā)生。所有可能嚴(yán)重的 crash 警報(bào)都通過郵件發(fā)送到我郵箱,一旦收到警報(bào)我需要將郵件中的 crash id 復(fù)制出來,去另一個(gè)網(wǎng)頁工具里查詢。每天早上看著一大堆警報(bào),如果要將所有的 crash id 手動(dòng)復(fù)制出來,一個(gè)個(gè)貼入網(wǎng)頁里查詢,操作很繁瑣。AppleScript 可以輕松將這個(gè)流程自動(dòng)化,一鍵搞定。步驟如下:

郵件分類

郵件都是保存在 Microsoft Outlook 中,我首先設(shè)置一個(gè) rule,將所有郵件標(biāo)題包含 Trending Crash:xxx 字樣的郵件都存入一個(gè)子文件夾:iOS-Crash。

遍歷郵件

再通過 AppleScript 遍歷 iOS-Crash 目錄下所有文件: 

  1. tell application "Microsoft Outlook" 
  2.     set theMessages to messages of folder "iOS-Crash" of default account 
  3.     repeat with theMessage in theMessages 
  4.     end repeat 
  5. end tell 

上面這段腳本讀起來是不是一目了然?就像是在和 siri 聊天一樣,告訴 siri 遍歷某個(gè)目錄下的全部郵件。

提取 Crash ID

AppleScript 的另一個(gè)強(qiáng)大之處是可以和系統(tǒng)自帶的各類常用命令行工具(比如 grep,sed,awk 等)交互,這意味著對(duì)文本和文件的操作可以游刃有余。接下來我要通過 sed 工具來提取郵件中的 Crash ID: 

  1. tell application "Microsoft Outlook" 
  2.     set theMessages to messages of folder "iOS-Crash" of default account 
  3.     set crash_id_set to {} 
  4.     repeat with theMessage in theMessages 
  5.         set msgContent to plain text content of theMessage 
  6.         tell me to set crash_id to do shell script "echo " & quoted form of msgContent & " | sed -E -n 's_.* crash_id:(.+)}_\\1_1p'" 
  7.         if crash_id is not in crash_id_set and the length of crash_id > 0 then 
  8.             set crash_id_set to crash_id_set & crash_id 
  9.         end if 
  10.     end repeat 
  11. end tell 

關(guān)鍵代碼是這一行:

  1. tell me to set crash_id to do shell script "echo " & quoted form of msgContent & " | sed -E -n 's_.* crash_id:(.+)}_\\1_1p'" 

AppleScript 用 tell xxx 的方式來切換腳步運(yùn)行環(huán)境,比如

  1. tell application "Microsoft Outlook" 

是切換到 Outlook 的進(jìn)程中。

  1. tell me to 

是切換到當(dāng)前用戶的運(yùn)行環(huán)境,因?yàn)槲覀円獔?zhí)行命令行腳步,需要更高級(jí)權(quán)限,所以要切換到當(dāng)前用戶進(jìn)程。

接下來通過 echo 將郵件的內(nèi)容傳遞給 sed,并提取出 crash-id,將值傳回 AppleScript 中的便利 crash_id,放入數(shù)組中。

拼裝 url 并在瀏覽器中打開

這是最后一步,將上面提取結(jié)果在瀏覽器中打開: 

  1. tell application "Microsoft Outlook" 
  2.     set theMessages to messages of folder "iOS-Crash" of default account 
  3.     set crash_id_set to {} 
  4.     set param to "" 
  5.     repeat with theMessage in theMessages 
  6.         set msgContent to plain text content of theMessage 
  7.         tell me to set crash_id to do shell script "echo " & quoted form of msgContent & " | sed -E -n 's_.* crash_id:(.+)}_\\1_1p'" 
  8.         if crash_id is not in crash_id_set and the length of crash_id > 0 then 
  9.             set crash_id_set to crash_id_set & crash_id 
  10.         end if 
  11.     end repeat 
  12.      
  13.     repeat with crash_id in crash_id_set 
  14.         set param to param & "%22" & crash_id 
  15.     end repeat 
  16.      
  17.     tell me to do shell script "cat ~/Documents/AppleScripts/ios_crash_url | sed -n -E s_crash_ids_" & quoted form of param & "_p | xargs open " 
  18. end tell 

url 原始信息保存在文件 ios_crash_url 中,使用 sed 做簡單替換之后,將 url 傳遞個(gè) open 命令即可。

最后添加個(gè)命令 alias,就可以做到一鍵完成了。

  1. alias ioscrash='osascript /Users/fenggao/Documents/AppleScripts/outlook_ios_crash.scpt' 

代碼重構(gòu)

我還使用過 AppleScript 來重構(gòu) Objective C 代碼,原理很簡單,將 Xcode 中選中的代碼以 text 的形式傳遞給 AppleScript,再通過 AppleScript 傳遞給命令行來操作。或者將 Xcode 當(dāng)前打開的類文件 path 通過 AppleScript 傳遞給命令行工具,接下來就是基礎(chǔ)的文件操作了,各類工具任由你選,比如我們可以使用本地編譯好的 clang 來分析類文件,來進(jìn)行針對(duì) Objective C 語法特征的文本修改。當(dāng)我們有大量的代碼文件需要修改,而且修改的規(guī)則遵循某個(gè)相同的 pattern 時(shí),使用腳本能起到事半功倍的效果。

通過 osascript 命令執(zhí)行 AppleScript 是方式之一,另一種方式是通過 Service。每個(gè) App 在菜單里都有 Services 一項(xiàng)。我們可以通過 Automator 來添加每個(gè) App 都能使用的 Service。

我們可以把一個(gè) Service 想象成一個(gè) workflow,而一個(gè) workflow 可以包含若干個(gè) action,執(zhí)行 AppleScript 就可以是其中的一個(gè) action。

首先通過 Spotlight Search 啟動(dòng) Automator,啟動(dòng)之后選擇創(chuàng)建 Service。之后可以看到所以支持的 action,選擇 Run AppleScript 并拖動(dòng)到右側(cè)的 workflow 區(qū)域,即可執(zhí)行某個(gè) AppleScript 了。當(dāng)然也可以拖動(dòng) Run Shell Script 到 workflow 區(qū)域,各個(gè) action 之間可以通過 stdin 傳遞數(shù)據(jù)。如下圖所示:

iOS程序員效率提升利器之AppleScript

所有創(chuàng)建保存之后的 service 都會(huì)自動(dòng)保存到 ~/Library/Services/ 目錄下,一旦保存我們就可以在應(yīng)用的 services 目錄下看到我們的目標(biāo),比如我保存 xcode-text.workflow 之后。我在 Xcode 中選擇某些代碼,右鍵就可以看到我所創(chuàng)建的 service 了,如圖:

 

iOS程序員效率提升利器之AppleScript

關(guān)鍵字:automator->service->action->applescript

總結(jié)

AppleScript 的應(yīng)用場景很廣泛,且很容易上手。一些 Mac App 的核心功能甚至都是利用 AppleScript 來編寫的。比如 Mac 上的剪貼板工具,就是通過 AppleScript 來操作其他應(yīng)用的當(dāng)前編輯文本,來實(shí)現(xiàn)歷史查找和插入功能。工具的強(qiáng)大與否在于使用之人如何用之,工具都是越用越稱手。

 

責(zé)任編輯:未麗燕 來源: MrPeak雜貨鋪
相關(guān)推薦

2021-03-22 22:38:04

程序員工具編碼

2024-11-25 06:50:00

2015-10-12 09:03:53

程序員法則

2020-01-20 14:27:57

程序員數(shù)據(jù)庫電子商務(wù)

2021-03-26 11:52:50

Debug效率運(yùn)行

2020-12-11 10:00:17

工具代碼Windows

2020-07-16 10:19:43

程序員技能開發(fā)者

2014-07-14 11:28:41

2019-11-27 10:08:36

程序員技能開發(fā)者

2019-01-21 14:13:51

程序員技能開發(fā)者

2017-09-11 11:15:31

Android提升效率

2022-12-29 15:20:34

開發(fā)工具

2020-07-24 07:44:10

程序員思維逆向

2014-03-28 10:30:20

程序員碼農(nóng)

2014-12-05 09:59:17

程序員

2013-05-30 13:30:00

代碼效率程序員

2015-04-27 14:22:39

程序員提升自己價(jià)值

2012-01-17 10:34:14

程序員

2011-09-30 11:13:31

51CTO博客一周熱門程序員

2018-08-02 17:00:15

Vue.js學(xué)習(xí)iOS開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

野外做受又硬又粗又大视频√| 国产精品午夜视频| 老鸭窝一区二区| 精品欧美一区二区三区在线观看 | 成人羞羞视频免费| 欧美成人精品欧美一| 久久综合另类图片小说| 欧美中文字幕一区二区三区| 久久99国产精品一区| 天天综合在线视频| 久久机这里只有精品| 欧美激情一区二区久久久| 性高潮久久久久久久| 欧洲精品99毛片免费高清观看 | 欧美顶级毛片在线播放| 欧美日韩在线不卡| 久久综合九色综合88i| 亚洲成人影院麻豆| 99久久er热在这里只有精品66| 国产精品欧美日韩一区二区| 国产午夜精品无码一区二区| 国产精品99一区二区三| 日韩大片免费观看视频播放| 五月天婷婷影视| 美女福利一区二区| 亚洲国产精品人人做人人爽| 一区二区三区不卡在线| 天天操天天舔天天干| 国产资源在线一区| 国产精品久久不能| 日本韩国欧美中文字幕| 激情文学一区| 精品国产依人香蕉在线精品| 国产毛片久久久久久久| 国内自拍欧美| 欧美成人伊人久久综合网| 手机在线成人免费视频| 色尼玛亚洲综合影院| 亚洲成av人**亚洲成av**| 男女爱爱视频网站| 老司机午夜在线视频| 国产欧美日本一区视频| 欧美国产二区| 日产精品久久久久久久性色| aa级大片欧美| 黄色99视频| 人妻少妇精品无码专区| 国产99久久久国产精品潘金网站| 91免费视频国产| 在线免费看毛片| 蜜桃久久久久久久| 国产精品一区专区欧美日韩| 中文字幕永久免费视频| 日韩精品福利网| 国产精品久久久久久久av大片 | 日本欧美久久久久免费播放网| 日本欧美一级片| 欧美男人亚洲天堂| 日韩一区精品字幕| 国产精品永久免费观看| 亚洲在线视频播放| 国产主播一区二区| 99porn视频在线| 成人毛片在线精品国产| av亚洲精华国产精华精华| 精品国产一区二区三区日日嗨| 午夜性色福利影院| 久久久久久久久久久久久夜| 欧美精品一区二区三区在线四季| 国产中文在线| 国产精品白丝在线| 亚洲精品天堂成人片av在线播放| 污污的视频在线观看| 亚洲国产一区二区三区 | 男人的天堂久久久| 黑人一区二区| 久久人人爽人人爽人人片av高清| 99视频在线看| 葵司免费一区二区三区四区五区| 国产精品国模在线| 99精品在线看| 成人av在线电影| 日本欧美精品久久久| 日本在线免费看| 亚洲一区二区视频在线| 无码aⅴ精品一区二区三区浪潮| 浪潮色综合久久天堂| 欧美疯狂性受xxxxx喷水图片| avtt中文字幕| 你懂的视频欧美| 久久在线免费观看视频| 免费看日韩毛片| 蜜臀a∨国产成人精品| av成人免费观看| 国产视频在线看| 亚洲激情在线播放| 男女啪啪网站视频| 136国产福利精品导航网址应用| 日韩av在线电影网| 精品亚洲乱码一区二区| 99国产精品久久久久久久| 国产精品视频大全| 日韩在线视频第一页| 国产精品人成在线观看免费| 男人添女荫道口图片| 国产国产一区| 亚洲黄色av女优在线观看| 国产精品麻豆一区| 国产乱码精品| 91一区二区三区| 丁香婷婷在线观看| 亚洲高清久久久| www.污污视频| 精品精品久久| 91精品国产成人www| 国产女人18毛片18精品| 国产欧美va欧美不卡在线| 免费网站永久免费观看| 人人玩人人添人人澡欧美| 亚洲欧美福利视频| 欧美亚洲天堂网| 国产久卡久卡久卡久卡视频精品| 日韩视频精品| 亚洲欧美韩国| 亚洲国产精品福利| 免费无码毛片一区二区app| 奇米影视一区二区三区| 欧美日韩精品久久久免费观看| 欧美伦理免费在线| 日韩一卡二卡三卡四卡| 久久嫩草捆绑紧缚| 日本不卡视频一二三区| 欧美视频1区| 色在线视频观看| 亚洲精品美女久久久| 久久机热这里只有精品| 国产美女久久久久| 日韩在线电影一区| 欧洲精品一区二区三区| 亚洲色图激情小说| 在线能看的av| 91美女视频网站| 97国产精东麻豆人妻电影| 精品精品精品| 91精品国产91久久久久久不卡| 欧美一级特黄aaaaaa| 亚洲成人动漫精品| 日韩精品人妻中文字幕有码| 亚洲欧洲综合| 久久综合中文色婷婷| 色综合桃花网| 亚洲区在线播放| 国产亚洲欧美日韩高清| 国产欧美日韩三级| 天堂中文视频在线| 色999国产精品| 91久久久亚洲精品| 欧洲成人综合网| 欧美精品一区二区精品网| 豆国产97在线 | 亚洲| 99视频超级精品| 日韩免费毛片视频| 日韩精品免费一区二区三区| 国产一区视频在线| 午夜小视频福利在线观看| 亚洲成人久久网| 69视频免费在线观看| 国产欧美精品区一区二区三区| 天天干天天操天天做| 亚洲国产日韩欧美在线| 国产精品久久久久久免费观看 | 亚洲日韩成人| 欧美国产视频在线观看| 日本一区二区中文字幕| 久久6精品影院| 神马久久久久| 欧美伦理视频网站| 日本在线小视频| 欧美国产精品中文字幕| 在线免费观看av网| 日韩午夜电影| 亚洲欧洲日韩精品| 亚洲一区二区三区免费| 日本高清久久天堂| 精品美女在线观看视频在线观看| 精品国精品自拍自在线| 中文字幕免费高清网站| 亚洲免费视频中文字幕| 北岛玲一区二区| 久久精品久久99精品久久| 日本中文字幕在线视频观看| 欧美男gay| 91久久久一线二线三线品牌| 成人短视频app| 欧美另类精品xxxx孕妇| 福利在线视频导航| 精品久久久久久亚洲综合网| 久久久久久亚洲av无码专区| 一区二区三区在线观看欧美| 亚洲区自拍偷拍| 懂色av噜噜一区二区三区av| 亚洲一区二区三区四区五区xx| 欧美网站在线| 亚洲春色在线视频| 全国精品免费看| 亚洲qvod图片区电影| 日本高清不卡一区二区三区视频 | 狠狠人妻久久久久久综合| 自拍偷拍国产亚洲| 日本一级免费视频| 成人av免费观看| 中文字幕55页| 六月丁香婷婷久久| 欧美一级片中文字幕| 国产精品www994| 一本一道久久a久久综合精品| 免费看成人人体视频| av在线不卡一区| 欧美在线se| 国产美女久久精品| 欧美性xxx| 日韩av片永久免费网站| 九色porny丨首页入口在线| 久久成人免费视频| 日本精品在线| 中文字幕亚洲综合| 国产精品一区二区三区四区色| 亚洲成色777777女色窝| 亚洲av综合色区无码一区爱av | 欧美二区视频| 伊人久久大香线蕉综合75| 久久av超碰| 欧美日韩喷水| 精品一区三区| 欧美精品亚洲| 精品色999| 日本一区视频在线播放| 女人av一区| 日韩一区二区电影在线观看| 色综合综合网| 日韩久久久久久久| 精品免费一区二区| 一本一本a久久| 亚洲a一区二区三区| 先锋影音男人资源| 日韩一区电影| 国产精品av免费| 综合一区在线| 国产片侵犯亲女视频播放| 黄色av日韩| 三上悠亚久久精品| 男女精品视频| chinese少妇国语对白| 日韩av在线播放中文字幕| 九色91popny| 久久国内精品自在自线400部| 亚洲国产高清av| 国产一区二区不卡| 在线播放第一页| 99久久亚洲一区二区三区青草| 国产 xxxx| 久久久精品综合| 99久久久无码国产精品不卡| 亚洲欧美一区二区不卡| 麻豆亚洲av熟女国产一区二 | 欧美韩国一区二区| 精品在线观看一区| 一区二区三区在线影院| 国产手机在线视频| 在线观看一区日韩| 国产又爽又黄免费软件| 欧美成人女星排行榜| 午夜视频1000| 色偷偷av一区二区三区| 日韩激情av| 日韩av黄色在线观看| 色综合一区二区日本韩国亚洲 | 国产在线资源| 欧美超级乱淫片喷水| www成人免费观看| 国产精品18久久久久久麻辣| 国产亚洲观看| 免费日韩电影在线观看| 久久免费av| 少妇高潮喷水在线观看| 蜜臀va亚洲va欧美va天堂| 四川一级毛毛片| 久久久精品人体av艺术| 2018天天弄| 一本大道久久a久久综合婷婷| 国产一区二区女内射| 亚洲精品国精品久久99热| 亚洲成a人v欧美综合天堂麻豆| 欧美精品video| 成人在线黄色| 精品免费国产| 亚洲免费二区| www黄色在线| 顶级嫩模精品视频在线看| 亚洲色图 激情小说| 亚洲国产成人高清精品| a片在线免费观看| 亚洲国产精品悠悠久久琪琪| 男人和女人做事情在线视频网站免费观看 | 一区二区视频欧美| 最新天堂中文在线| 97精品视频在线观看自产线路二| 国产视频精品免费| 色综合天天综合在线视频| 午夜免费福利视频| 中文字幕在线精品| 自拍偷拍亚洲视频| 国产精品久久波多野结衣| 91青青国产在线观看精品| 97在线播放视频| 成人av免费在线播放| 欧美精品videos极品| 欧美日韩aaa| 国产中文字幕在线播放| 欧美尤物巨大精品爽| 国产厕拍一区| 日韩欧美精品免费| 国产精品99精品久久免费| 91麻豆精品久久毛片一级| 日本韩国欧美一区| 天堂av电影在线观看| 性欧美xxxx交| 2023国产精华国产精品| 激情视频小说图片| 久久99久久久久| 国产又粗又长又黄的视频| 91精品福利在线| 精品无人乱码| 国产精品91一区| 精品久久电影| 一区二区三区 日韩| 欧美高清一级片在线观看| 国产精品免费无遮挡无码永久视频| 亚洲激情第一页| 国产三级电影在线播放| 久久久久久久久久码影片| 99精品视频免费| 99久久人妻精品免费二区| 精品免费在线视频| 亚洲欧洲精品视频| 欧洲美女免费图片一区| 特黄特色欧美大片| 国产精品丝袜久久久久久消防器材| 99精品国产视频| 国产精品第5页| 国产亚洲人成a一在线v站| 韩日一区二区| 亚洲第一精品区| 国产精品99久久不卡二区| 国产精品suv一区二区| 亚洲第一视频网| 另类专区亚洲| 亚洲成人一区二区三区| 国产一区二区调教| 欧洲第一无人区观看| 欧美mv日韩mv国产| 五月天av在线| 色婷婷精品国产一区二区三区| 老鸭窝一区二区久久精品| 五月天婷婷色综合| 亚洲成人a级网| 唐人社导航福利精品| 在线精品日韩| 粉嫩欧美一区二区三区高清影视 | 国产精品69久久久久孕妇欧美| 8v天堂国产在线一区二区| 日日夜夜天天综合入口| 欧美二区在线| 久久99精品视频| 国产污视频在线看| 国产亚洲激情在线| 国产精品久久久久久av公交车| 日韩黄色片在线| 国产亚洲综合色| 国产欧美一区二区三区视频在线观看| 欧美激情中文字幕在线| 免费黄色成人| 日韩精品xxx| 在线一区二区三区做爰视频网站| 精产国品自在线www| 久久精品久久精品国产大片| 青娱乐精品视频| 日本一本高清视频| 伊人久久精品视频| 91精品入口| 日本肉体xxxx裸体xxx免费| 亚洲综合免费观看高清完整版在线 | 日韩视频免费看| 欧美1区二区| 日本一二三区在线| 91福利在线观看| 国产777精品精品热热热一区二区| 视频在线观看成人| av亚洲精华国产精华精华| 国产精品久久久久精|