精品欧美一区二区三区在线观看 _久久久久国色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)

欧美黑吊大战白妞| 亚洲男人天堂色| 性高潮久久久久久久久久| 久久国产日本精品| xxx欧美精品| 手机免费看av片| 国产精品久久亚洲不卡| 一区二区三区日韩欧美精品| 久久99导航| 国产露脸无套对白在线播放| 国产亚洲一区在线| 久久夜色精品亚洲噜噜国产mv | 人人超碰91尤物精品国产| 久久99国产精品久久久久久久久| 免费看污片网站| 亚洲一区二区三区日本久久九| 91福利精品视频| 成人性免费视频| 成人黄色网址| 久久久精品国产免大香伊| 91黄在线观看| 国产又粗又长又黄| 日精品一区二区| 午夜欧美不卡精品aaaaa| 五月天av网站| 天堂美国久久| 中文字幕在线亚洲| 少妇人妻好深好紧精品无码| 91亚洲精品视频在线观看| 337p亚洲精品色噜噜| 黄色片久久久久| av手机在线观看| 亚洲综合色视频| 成人在线观看www| 在线观看免费版| 国产欧美日韩精品在线| 免费成人在线观看av| 黄色av网站免费在线观看| 国产精品一区二区在线播放 | 国产免费不卡视频| 蜜桃一区二区三区在线观看| 国产91网红主播在线观看| 天堂网一区二区三区| 亚洲国产午夜| 午夜精品一区二区三区视频免费看 | 国产丝袜欧美中文另类| 久久人人九九| 深夜福利在线看| 91丝袜国产在线播放| 国产丝袜不卡| 亚洲人成色777777老人头| 99久久精品免费看国产| 国产精品国产一区二区| 亚洲精品18p| 成人在线视频一区| 国产精品 日韩| 黄色aaa毛片| 91色在线porny| 欧美不卡1区2区3区| 欧美色18zzzzxxxxx| 国产日韩精品视频一区| 日韩精品久久一区| 幼a在线观看| 1000精品久久久久久久久| 法国空姐在线观看免费| 日本色护士高潮视频在线观看| 亚洲国产欧美在线人成| 欧美 日韩 国产 高清| 亚洲啊v在线| 欧美中文字幕一区| 国产美女18xxxx免费视频| 成人国产精品久久| 精品奇米国产一区二区三区| 在线天堂www在线国语对白| 伊人久久大香线蕉综合网蜜芽| 一区二区三区四区在线观看视频| 国产高清视频免费在线观看| 国产精品av久久久久久麻豆网| 91精品国产高清| 中文字幕乱码视频| 国产精品1区二区.| 久久综合九九| 黄色网页在线观看| 午夜精品爽啪视频| 尤物国产在线观看| 成人av综合网| 少妇激情综合网| 国产无遮挡免费视频| 久久激情中文| 91久色国产| 国产在线电影| 亚洲综合一区二区三区| 国产91对白刺激露脸在线观看| 精品久久久网| 亚洲第一区中文字幕| 久久中文字幕精品| 99国产精品视频免费观看一公开 | 久久的色偷偷| 亚洲欧美综合图区| 欧美另类视频在线观看| 久久综合九色| 国产精品区一区二区三在线播放| porn视频在线观看| 五月激情综合网| 91丝袜超薄交口足| 国产最新精品| 高清一区二区三区日本久| 精品国产www| 99国产精品视频免费观看| 杨幂一区欧美专区| 中文不卡1区2区3区| 日韩一区二区三区视频在线观看| 日韩视频在线观看免费视频| 亚洲人人精品| av在线不卡一区| 91ph在线| 日本乱码高清不卡字幕| 稀缺小u女呦精品呦| 99久久综合| 国产精品久久久久久久久免费| 人妻一区二区三区免费| 亚洲精品国产成人久久av盗摄| 人人干人人视频| 沈樵精品国产成av片| 午夜欧美不卡精品aaaaa| 国产wwwxxx| 国产精品国产自产拍在线| 国产福利一区视频| 亚洲都市激情| 日本成人精品在线| 日本福利片高清在线观看| 一区二区欧美国产| av地址在线观看| 一区二区中文| 91在线视频九色| 黄色网址免费在线观看| 欧美精品视频www在线观看| 91精品久久久久久久久久久久| 久久高清免费观看| 欧洲一区二区日韩在线视频观看免费| 国产夫妻在线| 亚洲欧美日韩国产精品| 欧美a∨亚洲欧美亚洲| www..com久久爱| av7777777| 日韩最新在线| 日本成人在线视频网址| 久久免费看视频| 91国偷自产一区二区使用方法| 亚洲国产av一区| 日本在线不卡一区| 亚洲欧美影院| 亚洲精品三区| 欧美成人全部免费| 你懂的网站在线| 日韩欧美精品网址| jizz中文字幕| 国产一区二区91| 国产真人做爰毛片视频直播| 极品束缚调教一区二区网站 | 伊人免费在线观看高清版| 欧美激情一区二区| aaa一级黄色片| 一区免费视频| 免费在线国产精品| 国产亚洲人成a在线v网站| 久久久精品美女| 免费成人在线看| 色一情一伦一子一伦一区| xxxxx99| 国产精品一区2区| 日本一道本久久| 精品国产一区二区三区av片| 91久久精品久久国产性色也91| 欧美78videosex性欧美| 日韩av一区二区在线观看| 波多野结衣电影在线播放| 国产精品对白交换视频| 日韩黄色一区二区| 日韩国产欧美在线观看| 妞干网这里只有精品| 女人抽搐喷水高潮国产精品| 国产精品成人一区二区| gogo在线高清视频| 亚洲女人被黑人巨大进入| 国产精品视频一二区| 午夜精品久久久久久久久久久| 女人黄色一级片| caoporen国产精品视频| 在线观看国产中文字幕| 日韩午夜在线| 在线观看成人av| 亚洲人成精品久久久| 92福利视频午夜1000合集在线观看 | 国产精品久久久久四虎| 年下总裁被打光屁股sp| 日韩av成人高清| 日韩人妻无码精品久久久不卡| 成人情趣视频| 久久波多野结衣| 美女日韩一区| 国产精品日韩一区| 色在线免费观看| 欧美区在线播放| a天堂中文在线| 日韩电影在线观看中文字幕| 国产又粗又大又黄| 91精品91久久久中77777| 久久久久成人网站| 1024亚洲合集| 国产精品久久久久久久av| jlzzjlzz亚洲日本少妇| aaaaaaaa毛片| 理论片日本一区| 国产日韩成人内射视频| 99人久久精品视频最新地址| 日韩不卡一二区| 久久免费大视频| 日本日本精品二区免费| 欧美人体视频| 国产在线观看一区| 777久久精品| 91美女片黄在线观| 久久精品嫩草影院| 国产精品91久久久久久| 欧美人与性动交xxⅹxx| 日本欧美中文字幕| 亚洲精品一区| 91精品成人久久| av中文在线资源| 久久久久免费精品国产| 美女91在线| 欧美极品xxxx| 成人性生交大片免费看网站| 久久国产精品偷| 在线xxxx| 色综合久久精品亚洲国产 | 26uuu亚洲国产精品| sm在线播放| 性亚洲最疯狂xxxx高清| 波多野结衣中文字幕久久| 久久久女女女女999久久| 美女网站视频在线| 午夜精品久久久99热福利| 岛国av免费在线观看| 97久久伊人激情网| 在线观看福利电影| 国产精品igao视频| 久久av影院| 91欧美精品成人综合在线观看| 日韩国产一二三区| 草莓视频一区| 欧美黑人巨大videos精品| 久久综合九色综合久99| 九九久久成人| 亚洲视频在线观看日本a| 国产精品久久久久久久| 神马午夜伦理影院| 好看的亚洲午夜视频在线| 免费国产a级片| 日本成人在线不卡视频| 亚洲精品在线网址| 成人激情文学综合网| 日韩人妻一区二区三区| 国产精品麻豆久久久| 欧美成人一二三区| 欧美日韩国产丝袜另类| 天堂免费在线视频| 欧美一区二区三区视频在线| 国产综合在线播放| 精品亚洲一区二区三区在线观看| 国产系列电影在线播放网址| www.日本久久久久com.| 日韩三级电影视频| 日本久久91av| 电影91久久久| 蜜桃在线一区二区三区精品| 99热国内精品| 日日摸日日碰夜夜爽无码| 日韩激情一二三区| 伊人久久久久久久久| 久久伊人蜜桃av一区二区| 5566中文字幕| 精品久久久久久久久久国产| 中文字幕+乱码+中文乱码www| 欧美一区二区成人6969| 日韩私人影院| 美女av一区二区三区| 午夜不卡影院| 91人成网站www| 欧美禁忌电影| 日韩在线观看a| 美女网站色91| 天天插天天射天天干| 亚洲同性gay激情无套| 天天操中文字幕| 日韩欧美区一区二| av在线二区| 91精品国产网站| 精品国产18久久久久久二百| 欧洲一区二区日韩在线视频观看免费| 国内激情久久| 中文字幕一区二区三区四区在线视频| 成人小视频在线| 91麻豆精品成人一区二区| 日韩欧美在线字幕| 欧日韩在线视频| 久久成人免费视频| 日韩一区二区三区免费| 国产伦精品一区二区三区高清版| 欧美mv日韩| 午夜免费精品视频| 久久久久久久网| 日本黄色片视频| 欧美一区二区精品久久911| 岛国大片在线观看| 欧美亚洲视频在线观看| 国产成人精品亚洲线观看| 亚洲自拍偷拍一区二区三区| 日本麻豆一区二区三区视频| 9.1成人看片免费版| 亚洲国产精品一区二区久久| 国产伦理吴梦梦伦理| 中文字幕亚洲欧美| 欧美色999| 日韩欧美第二区在线观看| 国产农村妇女精品一二区| 日本国产在线视频| 午夜私人影院久久久久| 丰满人妻一区二区三区免费| 久久99国产精品久久久久久久久| 精品国产一区二区三区性色av| 在线观看精品视频| 久久国产精品72免费观看| 91资源在线播放| 欧美视频一区二区三区在线观看| 嫩草在线播放| 日韩av观看网址| 欧美美乳视频| 中文字幕在线观看第三页| 国产日韩欧美电影| 中文字幕av网站| 精品国产一区二区三区久久狼5月| 91在线亚洲| 一本一道久久a久久综合精品| 老司机免费视频一区二区| 日韩精品一区二区三区在线视频| 欧美妇女性影城| 尤物yw193can在线观看| 国产精品美女诱惑| 亚洲在线观看| 国产精成人品免费观看| 欧美色男人天堂| 4438x成人网全国最大| 99免费在线观看视频| 亚洲三级观看| 欧洲av一区二区三区| 91精品福利在线| 成人在线观看免费网站| 99国产高清| 制服诱惑一区二区| 人妻少妇无码精品视频区| 欧美无乱码久久久免费午夜一区| 欧洲不卡av| 成人在线看片| 另类国产ts人妖高潮视频| 成人黄色免费网址| 制服丝袜中文字幕亚洲| 不卡av免费观看| 日韩欧美精品一区二区| 国产资源在线一区| 色网站在线播放| 国产亚洲欧美日韩美女| 秋霞一区二区三区| 漂亮人妻被中出中文字幕| 中文字幕视频一区二区三区久| 亚洲AV无码乱码国产精品牛牛| 欧美自拍视频在线| 999久久久亚洲| 中出视频在线观看| 欧美精品第一页| а√在线中文网新版地址在线| 亚洲ai欧洲av| 丁香婷婷深情五月亚洲| 色老头在线视频| 欧美激情2020午夜免费观看| 久操成人av| 亚洲熟妇一区二区| 欧日韩精品视频| 97在线超碰| 在线精品亚洲一区二区| 成人的网站免费观看| 在线观看免费黄色小视频| 欧美黑人国产人伦爽爽爽| 欧美日韩一区二区三区视频播放| 亚洲少妇一区二区三区| 欧美日韩精品三区| 性欧美freesex顶级少妇| 久久久久久久久网| 国产精品护士白丝一区av|