iOS工程自動打包并發布腳本實現
前言
IOS的開發過程中,當需要給測試人員發布測試包的時候,直接使用xcode來做的效率是非常低下的。尤其是當有一點小改動需要重新出包時,那簡直是個折磨的人的工作。通過一番研究后,遂決定寫一系列腳本,以代替人工完成打包和發布的過程。
目前腳本已經完成,基本可以滿足我目前的需求。現將其開源,托管在github上,項目地址:點擊這里
思路
借助xcode所附帶的“Command Line Tools”,可以通過命令行來完成IOS工程的編譯和打包工作。腳本正是基于此完成的。
本套腳本分為三個部分:負責編譯工程并打包的腳本ipa-build,負責生成itms-services協議文件的腳本ipa-publish,以及負責將ipa-publish腳本生成文件上傳到服務器的腳本upload。
其中,由于我自己的情況是服務器端的同事給我了內部測試服務器的sftp的上傳權限,所以這個upload腳本主要實現了使用sftp來上傳的功能。具體可以實際情況來做修改。
關于itms-services協議的一些內容,可以參考我之前的文章:《shell腳本實現ipa一鍵安裝(itms-services協議)》
注意:默認安裝完的xcode并沒有自帶“Command Line Tools”,需要在xcode中選擇后下載才能使用
實現
打開工程后,會發現本套腳本中包含好幾個shell文件。下面對其功能做說明:
ipa-build: 編譯xcode工程并生成ipa文件 ipa-publish: 生成符合itms-services協議的文件,并發布到服務器。 sendEmail: stmp發送email的腳本。(別人寫的) sftpDownloadFile: 通過sftp協議下載文件 sftpUploadFile: 通過sftp協議上傳文件 updateLocalIndexHtml: 對索引文件進行處理(二進制文件,非shell腳本) uploadItemsServicesFiles: 將itms-services協議文件上傳到服務器
實際使用的腳本,只有"ipa-build"和"ipa-publish"這兩個。其他文件會被ipa-publish這個腳本調用的依賴文件。其中出了"updateLocalIndexHtml"是我用objc寫的一個用來進行文本處理的編譯后的二進制文件,其余均為shell腳本。
shell腳本實現,大家可以打開腳本來看一下,里面的注釋算是很詳細了。不需要太多說明。
其中值得一提的就是我在寫sftp協議上傳功能的時候,碰到了一個問題就是使用腳本來自動輸入密碼,也就是交互式腳本的編寫。最后選擇了expect來完成,因為我發現mac系統里自帶了這個expect命令。
使用
在編寫腳本時,我已經考慮到,要盡量使這個腳本使用起來簡單方便。如果只需要打包,那么只使用ipa-build腳本即可。如果需要用itms- services協議來發布,則再運行ipa-publish腳本即可。在ipa-publish腳本中調用了upload腳本,所以upload腳本不需要單獨使用。
ipa-build腳本使用方法:
ipa-build腳本絕對路徑 參數1 參數2
其中,參數1是IOS工程的根路徑,是必輸項。參數2可以不輸入,是可選的,含義是編譯時的工程configuration類型,有4種類型可選:Debug, AdHoc,Release, Distribution。默認是Release。
ipa-build腳本運行后,會在IOS工程根路徑下生成名為“build”的文件夾,在這個文件夾中又有一個名為“ipa-build”的文件夾,打包所生成的最新ipa包就在其中。
ipa-publish腳本使用方法:
ipa-publish腳本絕對路徑 參數1 參數2
參數1是IOS工程的根路徑,是必輸項。參數2是可選的,含義是當上傳文件成功后是否發送email通知,y為發送,n為不發送,默認的值是不發送。
ipa-publish腳本運行后,會在“build”文件夾中生成一個以工程的targetname為名字的文件夾。其中,存放了itms-services協議所需的所有文件。腳本會將里面內容全部上傳到服務器中。
注意事項
1、運行腳本需要絕對路徑,不能使用相對路徑。
2、腳本下載后,若要使用,有些腳本需要一些改動。
其中ipa-build腳本無須更改。可以直接使用。ipa-publish腳本需要配置一些信息后方能正常使用。
用文本打開ipa-publish腳本后,在shell開始的地方,有一段需要配置的地方,如下:
#須配置內容 start #sftp參數設置 sftp_server=192.168.xx.xx sftp_username=xx sftp_password=xx sftp_workpath="/usr/share/xx/xx/xx" #發布應用的url地址 pulish_url="http://xx.com/xx" #以下是郵箱的相關設置 #收件人 email_reciver=xx@xx.com #發送者郵箱 email_sender=xx@xx.com #郵箱用戶名 email_username=xx #郵箱密碼 email_password=xx #smtp服務器地址 email_smtphost=smtp.exmail.qq.com #可配置內容 end
根據實際情況配置即可。