如何提升工做效率 - 自動化篇

擺脫瞎忙人生,從自動化作起。做爲一名職場人,有沒有爲忘發彙報郵件而煩惱過,有沒有因繁忙的工做而丟三落四過;做爲一名程序員,有沒爲天天早上 pull 代碼後漫長的編譯時間而煩躁過,有沒有爲各類無腦的系統配置而無聊過。天天咱們都在這些重複枯燥的事情中,浪費着咱們寶貴的生命。如何提升工做效率成爲咱們相當重要的事情 ,這篇文件將會帶領咱們經過自動化的方式,來有效地提升咱們的工做效率。php

本文大部內容是基於 MacOS 環境的,非 Mac 黨也能夠借鑑其中的一些思想。html

Shell Script

Shell 與 Shell Script

在談自動化以前,咱們先來了解下 Shell Script 這門有點古老而又很是強大的腳本語言,首先咱們要分清一個概念性的問題,Shell 和 Shell Script 之間的區別:git

Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶經過這個界面訪問操做系統內核的服務。程序員

Shell 腳本(Shell Script),是一種爲 Shell 編寫的腳本程序。shell

這裏先給你們科普下概念,但大多的時候,咱們都統稱 Shell Script 爲 shell,文中的其它地方的 "shell" 指的一樣是 Shell Script。關於 shell 的基礎語法,並不在本文的討論範圍內,但在開始實踐如何經過 shell 來提升咱們工做效率以前,我來我簡單介紹 shell 幾個經常使用而又強大的功能。編程

經常使用串聯命令

管道

管道是 shell 中很是經常使用的功能之一,它容許不一樣腳本、命令之間互相傳遞數據,例如:xcode

ls | grep 'pars'
複製代碼

該命令意思是將 ls 輸出的內容傳遞到 grep 'pars' 命令,grep 會把包含 'pars' 的內容過慮出來。咱們再舉個栗子,經過 shell 獲取 git 倉庫裏中的當前分支名:bash

currentBranch=`git branch | grep "*"`
currentBranch=${currentBranch/* /}
複製代碼

重定向

大多數 UNIX 系統命令從終端接受輸入並將所產生的輸出發送回終端。一個命令一般從一個叫標準輸入的地方讀取輸入,默認狀況下是終端。一樣,一個命令一般將其輸出寫入到標準輸出,默認狀況下也是終端。若是你須要修改輸入或輸出,就須要使用到重定向功能。網絡

命令 說明
command > file 將輸出重定向到 file。
command < file 將輸入重定向到 file。
command >> file 將輸出以追加的方式重定向到 file。

輸出重定向,指將一條命令的輸入位置從新定義,舉個例子:session

ls > ls.txt
複製代碼

ls 輸出結果應顯示在終端,而上面命令將 ls 的輸出結果寫到 ls.txt 這個文件中。須要注意,用 > 重定向到 ls.txt 文件默認是覆蓋的,若是須要用追加的方式寫入文件,則須要使用 >>:

pwd >> ls.txt
複製代碼

輸入重定向:

pbcopy < ls.txt
複製代碼

上面的命令的意思是,將 ls.txt 的內容複製到粘貼板。

之因此簡單介紹這幾個經常使用功能,是由於若是不懂這些功能,會影響理解下面的內容。若是你對 shell 腳本不熟悉,建議你抽空學習一下,平常工做中,用到 shell 的頻率仍是很是高的。

實踐是檢驗學習的惟一標準

簡單聊完 shell 這幾個經常使用而又強大的功能後,咱們開始實踐如何經過 shell 來提升工做效率。

雙網卡自動配置

因我平常工做的須要,電腦須要配置雙網卡,這裏以配置電腦的雙網卡爲例,先附上部分配置腳本:

inside_ssid=\"WIFINAME\"; en0_ssid=\"$(networksetup -getairportnetwork en0 | sed 's/.*[:] //')\" if [ \"$en0_ssid\" != \"$inside_ssid\" ]; then echo -n \"請先將內網卡設置到$inside_ssid\" else inside_adaptor_index=\"$(netstat -rn|grep default |grep en0 -n | cut -d: -f1)\" if [ \"$inside_adaptor_index\" = 1 ]; then echo -n \"請開啓外網卡,且服務順序在內網卡前\" else inside_gateway=\"$(netstat -rn|grep default |grep en0|awk '{print $2}')\" sudo echo \"刷新配置成功\"; sudo route -n delete -net 10.*.*.128; sudo route -n delete -net 10; sudo route -n delete -net 30; sudo route -n add -net 10.*.*.128 $inside_gateway; sudo route -n add -net 10 $inside_gateway; sudo route -n add -net 30 $inside_gateway fi fi 複製代碼

這裏不解析這些腳本的做用,咱們的重點在於如何進一步提升效率上。因爲每次重啓電腦,都需從新配置雙網卡,才能正常同時使用內外網,也就是說,每次重啓電腦須要從新執行一次這個操做。懶是人類的天性,若是咱們連執行一下腳本也不想幹的話,那麼咱們須要怎麼作呢?

咱們能夠在在電腦開機時設置自啓動任務。首先我須要建立一個 plist 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>Label</key>
    <string>com.dengyonghao.xxxx</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/xxxxx/work/Tools/xxxx.sh</string>
    </array>
</dict>
</plist>
複製代碼

簡單解析下各個 key 的做用,LaunchOnlyOnce 指定開機後只執行一次,不指定則每隔一段時間就會執行一次。Label 指定該 plist 的惟一標識。ProgramArguments 則是設置執行腳本的路徑,指向你想要啓動時自動執行的腳本路徑。

完成上面操做後,把建立的 plist 文件拷貝到 ~/Library/LaunchAgents目錄下,表示僅對當前用戶生效,而後執行:

sudo launchctl load ~/Library/LaunchAgents/xxxxxx.plist
複製代碼

將這個文件註冊到系統中,而後電腦啓動時就會自動執行,完成雙網上的配置。這裏有一個問題,若是啓動時自動執行上面的雙網卡配置腳本,真的能正常運行嗎?

事實上是不行的,由於 sudo 命令須要你輸入管理員密碼,但你並無地方輸入,因此是沒有權限進行這些操做的。故咱們須要用到 Apple Script,從而引出下一節的內容,這裏先附上 Apple Script 腳本:

do shell script " inside_ssid=\"WIFINAME\"; en0_ssid=\"$(networksetup -getairportnetwork en0 | sed 's/.*[:] //')\" if [ \"$en0_ssid\" != \"$inside_ssid\" ]; then echo -n \"請先將內網卡設置到$inside_ssid\" else inside_adaptor_index=\"$(netstat -rn|grep default |grep en0 -n | cut -d: -f1)\" if [ \"$inside_adaptor_index\" = 1 ]; then echo -n \"請開啓外網卡,且服務順序在內網卡前\" else inside_gateway=\"$(netstat -rn|grep default |grep en0|awk '{print $2}')\" sudo echo \"刷新配置成功\"; sudo route -n delete -net 10.*.*.128; sudo route -n delete -net 10; sudo route -n delete -net 30; sudo route -n add -net 10.*.*.128 $inside_gateway; sudo route -n add -net 10 $inside_gateway; sudo route -n add -net 30 $inside_gateway fi fi" with administrator privileges
複製代碼

這裏只是用 Apple Script 來提供一個圖形界面來要求用戶先輸入管理員密碼,才容許他繼續執行腳本。腳本使用了 Apple Script,故開機啓動項的 plist 的文件也要作相應的變化:

<key>ProgramArguments</key>
<array>
    <string>osascript</string>
    <string>/Users/xxxx/work/Tools/xxxx.scpt</string>
</array>
複製代碼

關於 Apple Script 的內容將在下一節詳細介紹,這裏咱們先思考一個問題:設置開機執行後,就能解決上面說的痛點了嗎?

事實上並不能解決全部問題,好比說,開機的時候外置網卡沒有插上,那麼自動執行的腳本就會配置失敗,這時就又回到最初的場景,須要咱們去找到這個腳本文件,而後經過終端執行。那麼咱們能夠怎麼去優化這個流程呢?咱們帶着這個問題,繼續後面的內容,而後來再回來解決它。

集思廣益

在給團隊成員分享的過程當中,隊友們提出 sudo 能夠明文設置管理員密碼,不須要每次運行時手動輸入,命令格式以下:

echo password | sudo -S xxxxxxxxx
複製代碼

須要注意的是,明文保存密碼存在泄露的風險,建議使用這種方式前先評估風險。

Apple Script

Apple Script 是什麼?

AppleScript 是 Apple 建立的腳本語言,用於自動執行 Macintosh 操做系統及其許多應用程序操做的語言。能夠用來控制運行於 macOS 上的程序,以及 macOS 自己的部份內容。你能夠建立腳原本自動執行重複性任務,或組合多個可編寫腳本的應用程序的功能來建立複雜的工做流程。

咱們使用 AppleScript 建立備忘錄、管理網絡、處理圖像、備份文件等等,AppleScript 是功能很是強大的自動化工具,它內置於 macOS 系統中,經過 腳本編輯器 應用來編寫和運行,任何用戶均可以避免費使用它。

腳本編輯器

macOS 中默認已經提供編寫 AppleScript 的工具:腳本編輯器,咱們能夠經過應用程序中找到並啓動它。

01.png

咱們第一個 AppleScript 腳本

咱們打開腳本編輯器並選擇新建文稿,輸入如下內容:

tell application "Finder" to open the startup disk
複製代碼

點擊運行後,系統會在桌面打開一個新的Finder窗口,顯示啓動盤的內容,這裏咱們已經完成了第一個 AppleScript 腳本。

再舉個栗子,經過 AppleScript 打開或者關閉 Xcode:

tell application "Xcode"
	activate
	--quit
end tell
複製代碼

從上面腳本能夠看出,AppleScript 和天然語言很是接近,編寫起來十分簡單,但至於如何去學習 AppleScript 的語法,這裏不會多作講解,有興趣的同窗能夠經過官方文檔學習。

如何學習 AppleScript

巧用文檔

03.png

Dash,程序員神器之一,強烈推薦一波。

咱們在學習一門新的編程語言時,當在使用某個 API 遇到問題時,最靠譜的解決方法不是 Google,而是先看下它的文檔 。咱們能夠經過 Dash 下載 AppleScript 文檔,遇到問題時,咱們能夠快速查閱,而且 AppleScript 的文檔並很少,空閒時能夠通讀一次(估計2-3小時),逐步加深對 AppleScript 的瞭解。

讀懂 AppleScript 詞典

04.png

實踐出真知

彙報郵件提醒&自動生成

下面咱們直接開始實操,來實現一個自動提醒發送重點項目進度的工具,除了提醒功能外,該工具還會自動幫你建立郵件模塊,包括收件人、主題、內容模板等,咱們來看實現腳本:

on callback()
	tell (current date) to get (its year as integer) & "-" & (its month as integer) & "-" & day
	set dataText to the result as text
	set mailTitle to "-重點項目進度" as text
	set mailTitle to dataText & mailTitle
	tell application "Microsoft Outlook"
		set newMessage to make new outgoing message with properties {subject:mailTitle, content:"Dear xx:<br/>如下是個人重點項目進度狀況,詳細請查看附件:<br/><br/><br/>Best Regards"}
		make new recipient at newMessage with properties {email address:{name:"xxx", address:"xxxx@pingan.com.cn"}}
		#make new cc recipient at newMessage with properties {email address:{name:"Name", address:"test@example.com"}}
		
		open newMessage
	end tell
end callback

display dialog "又到週一了,趕忙發重點項目進度" buttons {"如今發", "一會發"} default button 1
if the button returned of the result is "如今發" then
	callback()
end if
複製代碼

這裏咱們經過 AppleScript 訪問 Microsoft Outlook 並自動生成郵件模板,以上腳本只給郵件內容填充了模塊,但實際上還能夠實現自動把你的重點項目進度excel統計表附件進來,再進一步的話,能夠直接經過 AppleScript 讀取 excel 的內容,而後填充到郵件內容中,只要你在完成重點項目內容後,及時更新 excel 統計表中的內容,那麼到每週一發重點項目的時候,你只須要一個命令就能夠自動完成彙報郵件。

咱們完成了自動生成郵件模板的功能後,還需提供自動提醒的功能,關於自動提醒功能,咱們可使用 mac 的啓動服務來實現,和自動配置雙網上的方式如出一轍,咱們建立相應的 plist 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.dengyonghao.viproject</string>
    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>/Users/dengyonghao/work/Tools/viproject.scpt</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Weekday</key>
        <integer>1</integer>
        <key>Minute</key>
        <integer>30</integer>
        <key>Hour</key>
        <integer>10</integer>
    </dict>
</dict>
</plist>
複製代碼

須要注意的是這裏多了 StartCalendarInterval 這個 key,這個 key 是用來控制你腳本的執行週期或者時間的,這裏設置爲每週一上午 10:30 時就會自動執行腳本。

AppleScript 的內容就簡單介紹到這裏,總之 AppleScript 很是強大,具體怎麼使用,建議空閒時共同探討一下。

推薦閱讀

  1. Mac Automation Scripting Guide

Automator

Automator 是什麼?

02.png

Automator 是蘋果公司爲 macOS 系統開發的一款軟件,只要經過點擊拖拽鼠標等操做就能夠將一系列動做組合成一個工做流程,從而幫助你自動的(可重複的)完成一些複雜的工做。Automator 其實是一些列動做組合在一個工做流文檔裏,而後按順序去執行這些動做,與咱們上面因此說的腳本很是相似,但 Automator 能夠橫跨多個程序進行,並提供圖形界面進行操做,用戶操做起來很是方便。

腳本轉應用

關於 Automator,咱們能夠經過實現腳本轉應用的例子進行了解,首先咱們打開 macOS 自帶的 Automator,選新建文稿-->應用程序-->實用工具-->運行xxx腳本,而後把你的腳本填寫進去,而後保存生成一個應用。生成的應用默認是 Automator 的圖標,若是你想去改變圖標,則能夠右擊應用—>顯示包內容-->Contents-->Resources,而後把 AutomatorApplet.icns 替換成你想要的圖標就能夠了。

咱們能夠把經常使用的腳本生成應用,放到經常使用的位置,雙擊一下就能執行,這樣也是挺爽歪歪的,可是這並非我想要的,我想在任意的地方法均可以快速執行,因此這裏就引入了 Alfred 這個工具了。

推薦閱讀

關於 Automator 網上有很多教程,想進一步瞭解的同窗,推薦閱讀:Automator 簡單介紹及入門玩法 | Matrix 精選

Alfred & WorkFlows

Alfred 是什麼?可能只能說是神器,不吹不黑,但這裏我是不會講如何去使用 Alfred 的,沒有用過的小夥伴自行百度。

Workflow 又是什麼梗呢,Workflow 工做流的意思,它表示把多個事件聯合在一塊兒,造成一個連貫的動做。

自我學習

這裏省略成千上萬的字,須要你自行去學習 Alfred 的使用,或許它 --> Google 能夠幫你

問題回顧

講到這裏,咱們能夠思考下文章開始配置雙網卡的那個問題,估計你們都會有更好的方法了。

咱們能夠把配置雙網卡的 AppleScript 寫成 Alfred 的一個 workflows。好比我設置了 Alfred 的快捷打開鍵爲 double com,雙網上配置 workflows 的 keyword 爲 doublenet,這樣的話,我能夠在電腦的任意界面輸入:double com + doublenet + 回車,便可完成雙網卡的配置。

一鍋亂燉

上面介紹了一堆的工具,看到這裏,可能仍是一臉懵逼,如今咱們來經過實操,來把它們一鍋燉了。

Goto iTerm

做爲一名程序員,從 Finder 目錄跳轉到 iTerm 的場景很是多,大多數時候咱們都是經過拖動目錄到 iTerm,而後 cd 進去,效率很是低,經過學習上面的內容,咱們能夠經過 AppleScript + Hotkey 快速在 iTerm 中打開當前 Finder 的目錄。

首先咱們能夠經過 AppleScript 獲取當前 Finder 窗口的目錄:

tell application "Finder"
	set pathFile to selection as text
	set pathFile to get POSIX path of pathFile
	--防止目錄存在空格跳轉不了
	set pathFile to quoted form of pathFile
end tell
複製代碼

而後經過 iTerm 提供的 AppleScript API 跳轉到指定目錄:

ell application "Finder"
	set pathFile to selection as text
	set pathFile to get POSIX path of pathFile
	--防止目錄存在空格跳轉不了
	set pathFile to quoted form of pathFile
	set pathFile to "cd " & pathFile
	--set the clipboard to pathFile
	tell application "iTerm"
		create window with default profile
		tell current session of current window
			write text pathFile
		end tell
	end tell
end tell
複製代碼

咱們完成腳本後,則能夠經過 Alfred 配置一個 Hotkey,用來快速執行該腳本:

05.png

我這裏面配置的 Hotkey 是 com + T,因此我只要按下 com + T,則會自動打開 pwd 在當前 Finder 窗口的目錄下的 iTerm。

速記大法

每次開週會時,在一週回顧環節中,老是拼命回顧這周我作了那些事情,特別是分享亮點和不足的時候,就各類詞窮。這裏介紹一個很是有效的方法,就是天天記一記,週會不糾結。其實這個方法你們都知道,只是你們都懶得記,或者是沒有找到一個好的工具,我曾經用印象筆記記錄過一段時間,但用了一段時間後,發現每當腦子忽然靈光一閃,有好的 idea 並想記錄下來時,然而印象筆記並無打開,接着本身又懶得打開來記錄了。爲了不再次發生這種事情,我經過 notes + applescript + alfred 來實現一個速記事情工做流:

on alfred_script(q)
	tell application "Notes"
		tell account "iCloud"
			tell (current date) to get (its year as integer) & "-" & (its month as integer) & "-" & day
			set dataText to the result as text
			set mailTitle to dataText & "-速記"
			make new note at folder "PANote" with properties {name:mailTitle, body:q}
		end tell
	end tell
end alfred_script
複製代碼

這段 applescript 的意思是把 alfred 獲取到內容,保存到 PANote 文件下。如今咱們實現了快速記錄的功能後,咱們還須要快速來查找,咱們也是經過 applescript + alfred 來實現:

use framework "Foundation"

property NSRegularExpressionSearch : a reference to 1024
property NSString : a reference to current application's NSString property NSJSONSerialization : a reference to current application's NSJSONSerialization
property NSUTF8StringEncoding : a reference to current application's NSUTF8StringEncoding on run argv set output to {} tell application "Notes" set folderNames to name of folders in default account repeat with folderIndex from 1 to number of folders in default account set folderName to item folderIndex of folderNames if folderName is "PANote" then set currentFolder to (a reference to item folderIndex of folders in default account) set noteIDs to id of notes of currentFolder set noteNames to name of notes of currentFolder set noteBodies to body of notes of currentFolder repeat with i from 1 to count of noteIDs set noteBody to (NSString's stringWithString:(item i of noteBodies))
					set noteBody to (noteBody's stringByReplacingOccurrencesOfString:"<[^>]*>| " withString:" " options:NSRegularExpressionSearch range:{0, noteBody's |length|()})
					set noteBody to (noteBody's stringByReplacingOccurrencesOfString:"^ +| +$| +(?= )|" withString:"" options:NSRegularExpressionSearch range:{0, noteBody's |length|()}) as text
					set match to (item i of noteNames) & " " & folderName & " " & noteBody
					if length of noteBody is less than 100 then
						set subtitle to noteBody
					else
						set subtitle to text 1 thru 100 of noteBody
					end if
					set subtitle to folderName & " | " & subtitle
					set end of output to {title:(item i of noteNames), arg:(item i of noteIDs), subtitle:subtitle, match:match, uid:(item i of noteNames)}
				end repeat
			end if
		end repeat
	end tell
	
	set output to {|items|:output}
	set output to NSJSONSerialization's dataWithJSONObject:output options:0 |error|:(missing value) set output to (NSString's alloc()'s initWithData:output encoding:NSUTF8StringEncoding) as text return output end run 複製代碼

這裏的代碼看起來很是多,其實原理很是簡單,首先遍歷 default account 下的全部文件夾,而後找到 PANote 這個文件夾,把查找到的內容格式化後傳給 output,alfred 會幫咱們把 output 的內容以列表形式展現出來。當咱們選中展現中的內容時,咱們還須要在 Notes 裏面打開相應的內容,故咱們再實現一個打開 Notes 的腳本:

on alfred_script(q)
	tell application "Notes"
		show note id q
	end tell
end alfred_script
複製代碼

須要注意的是,這個方法 id 參數是從上一段代碼中的:

output to {title:xxxx, arg:xxxx, subtitle:xxxx, match:xxxx, uid:xxxx}
複製代碼

arg 裏面獲取的,這個是 alfred 定義的格式,咱們無須關心他是如何實現的,只要按照 alfred 的規範來傳參就能夠了。

自動拉代碼並編譯

天天早上我到公司的時候,首先是去洗杯打水,而後拉代碼編譯,接着等待漫長的編譯時間,日復一日,風雨無阻~~但在某個發呆的瞬間,忽然有一個想法,爲啥不讓系統在我到公司前把代碼編譯好呢,我到公司的時候就能夠直接工做,不用等待漫長的編譯過程了。

有了這種想法,就要動手去作,咱們把任務一步步地拆分,首先是拉代碼,在拉代碼前,咱們須要先檢查倉庫是否乾淨,而後默默寫下如下腳本:

checkGitWorkspaceClean() {
    echo "Action - checkGitWorkspaceClean"

    if [ $# -lt 1 ]; then
        echo "One param is required - the check dir.";
        exit 1;
    fi

    if [ ! -d $1 ]; then
        echo "The dir does not exist - $1";
        exit 1;
    fi

    currentDir=`pwd`
    cd $1

    result=`git status -s`
    if [ -n "$result" ]; then
        echo "The git workspace is not clean - $1"
        exit 1
    fi

    cd $currentDir
}
複製代碼

這裏經過 git status -s 命令來判斷當前倉庫是不是可拉取代碼狀態,若是不可拉取就直接退出。

接着下一步是拉取當前全部分支的最新代碼,咱們須要獲取分支名並拉取該分支的最新代碼:

pullLatestCode() {
    echo "Action - pullLatestCode"

    if [ $# -lt 1 ]; then
        echo "One param is required - the check dir.";
        exit 1;
    fi

    if [ ! -d $1 ]; then
        echo "The dir does not exist - $1";
        exit 1;
    fi

    currentDir=`pwd`
    cd $1

    currentBranch=`git branch | grep "*"`
    currentBranch=${currentBranch/* /}

    `git pull git pull --rebase origin ${currentBranch}`

    cd $currentDir
}
複製代碼

有沒有以爲這些代碼很熟悉,其實在 shell 那節都有介紹過的,這裏只是把上面說的內容應用到實際的場景中而已。

拉取完成代碼後,咱們就能夠經過 xcodebuild 編譯代碼,xcodebuild 參數能夠參考 apple 官方幫助文檔,這裏你默認使用模擬器進行編譯:

buildProject() {
    echo "Action - pullLatestCode"

    if [ $# -lt 1 ]; then
        echo "One param is required - the check dir.";
        exit 1;
    fi

    if [ ! -d $1 ]; then
        echo "The dir does not exist - $1";
        exit 1;
    fi

    currentDir=`pwd`
    cd $1

    xcodebuild -workspace ${PARS_PROJECT_NAME}.xcworkspace -scheme ${PARS_PROJECT_NAME} -sdk iphonesimulator build

    cd $currentDir
}
複製代碼

這樣咱們整個拉取和編譯流程均可以經過代碼來實現了,可是在編譯代碼前,應該先檢查下倉庫是否有衝突,若是有衝突就不開始編譯,因此正確的流程是:

checkGitWorkspaceClean $PARS_PROJECT_DIR
pullLatestCode $PARS_PROJECT_DIR
checkGitWorkspaceClean $PARS_PROJECT_DIR
buildProject $PARS_PROJECT_DIR
複製代碼

當不能正常完成編譯時,能夠經過 AppleScript 顯示一些可視化的提示,好比彈窗之類的,這一些優化依據我的習慣添加就能夠,不過多講解。

若是你以爲在終端編譯不夠直觀,沒法直接看到編譯進度,咱們則能夠經過 AppleScript 來優化代碼編譯流程,直接調用 Xcode 來編譯或者運行代碼:

tell application "Xcode"
	open "/Users/xxxxx/xxxx/xxxxx/xxxxx.xcworkspace"
	set workspaceDocument to workspace document "xxxxx.xcworkspace"
	repeat 120 times
		if loaded of workspaceDocument is true then
			exit repeat
		end if
		delay 1
	end repeat
	if loaded of workspaceDocument is false then
		error "Xcode workspace did not finish loading within timeout."
	end if
	set actionResult to run workspaceDocument
	repeat
		if completed of actionResult is true then
			exit repeat
		end if
		delay 1
	end repeat
end tell
複製代碼

到這,已經把最關鍵的拉取和編譯代碼的功能講完,至於如何定時執行,在上文已經詳細介紹過,這裏不重複講解。可是定時任務存在一個不太方便的問題,就是當你電腦關機或者休眠時,這個定時任務就不會啓動。設置電腦一直待機不休眠也不太好,畢竟公家財產也是要愛護的,比較折中的方法是把這個腳本寫成 alfred 的 workflows,咱們到公司時,能夠先花 1-2 秒時間來執行這個 workflows,而後再去洗杯打水吃早餐之類的,等你把亂七八糟的事情搞定了,代碼也快編譯好了。

集思廣益

在給團隊成員分享的過程當中,隊友們就自動拉代碼並編譯時機方面,提出了更好的方案:天天晚上12點(你們都下班的時候)時執行腳本,執行完成後經過腳本讓電腦休眠,從而避免電腦長時間待機。

總結

本文簡單分享如何經過工具,來處理平常工做中遇到的一些煩瑣的事情 ,經過使用腳本等方式來實現自動化,從而提高我的的工做效率。這裏僅提供一個思路和一些例子,至於如何發揮,就得看你本身如何去使用這些工具了,總之,工具是越用越合手的。

個人小專欄 ,若是喜歡,能夠訂閱一波。

相關文章
相關標籤/搜索