在 (一) 初探 iOS 單元測試 一文中,咱們簡單提到了執行xcodebuild test能夠啓動工程的單元測試並輸出測試結果,但手動執行此類命令意義是不大的。咱們須要的是,把一些測試和lint等命令寫在腳本文件裏,在代碼提交、合併及打包等行爲實際發生前,自動執行腳本,以執行的結果決定是否打斷上述操做,必定程度上達到控制代碼質量的目的。 在多人協做開發中,咱們能夠在全部成員進行某些git操做(commit push merge rebase等)前進行代碼的驗證(Test、Lint等),防止邏輯錯誤或不合規範的代碼更新到遠端倉庫中。固然,若是團隊搭建了本身的git服務器,有Mac服務器,在server端進行git hooks是最好的解決方案,本地倉庫也不用進行額外配置。此外,咱們也能夠作一些Client Hooks,來達到一樣的效果。如下內容是筆者對git pre-push hook的一些實踐。git
前往本地倉庫,按下command+shift+.查看隱藏文件,目錄以下。咱們能夠看到.git/hooks路徑下有一些.sample的文件。 xcode
exit 1
複製代碼
保存退出,倉庫根目錄下,執行:bash
git push
複製代碼
workspace_name() {
workspace_file=`find . -maxdepth 2 -name *.xcworkspace -exec basename {} \;`
echo ${workspace_file%.xcworkspace}
}
check_result() {
if [ $? != 0 ]; then
echo "$1 failed!!"
echo "push will not execute"
echo "$?"
exit 1
else
echo "$1 passed."
echo "push will execute"
echo "$?"
fi
}
workspace=$(workspace_name)
xcodebuild -workspace Example/$workspace.xcworkspace -scheme $workspace-Example -destination 'platform=iOS Simulator,OS=11.0,name=iPhone 7' test
check_result "test"
複製代碼
例子是以pod lib create ...
建立的標準工做空間,從倉庫根目錄起以最大深度爲2尋找以.xcworkspace結尾的文件名,賦給workspace變量,最後test名爲worksapce.xcworkspace scheme爲worksapce-Example的工程,測試失敗,打印"push will not execute"
,exit 1
;反之打印push will execute
,exit 0
。 倉庫根目錄下執行:服務器
git push
複製代碼
最後輸出: app
咱們知道,.git文件夾並不會被push到遠程倉庫,每一個成員clone倉庫,.git文件夾是會初始化的。也就是說,正常狀況下,pre-push hook只對我的有效。但咱們能夠耍一些小手段,讓每一個成員倉庫.git/hooks路徑下都存在咱們寫好的pre-push文件,這樣其餘成員的倉庫也具有了git pre-push hook功能。編輯器
if [ ! -d "$../.git/hooks/pre-push" ]; then
cp ../pre-push ../.git/hooks/pre-push
exit 0
fi
複製代碼
首先,咱們寫好一個腳本,功能爲若是.git/hooks路徑下沒有pre-push文件,就複製一個進去。如圖中add-pre-push-hook.sh文件: post
git-scm.com/book/en/v2/… blog.ittybittyapps.com/blog/2013/0… blog.ricardofilipe.com/post/git-ho…單元測試