ios xcode 自動打包 ci
目錄(?)
[+]
ios的開發過程中,當需要給測試人員發布測試包的時候,直接使用xcode來做的效率是非常低下的。尤其是當有一點小改動需要重新出包時,那簡直是個折磨的人的工作。通過一番研究後,遂決定寫一系列指令碼,以代替人工完成打包和發布的過程。
借助xcode所附帶的「command line tools」,可以通過命令列來完成ios工程的編譯和打包工作。指令碼正是基於此完成的。
本套指令碼分為三個部分:負責編譯工程並打包的指令碼ipa-build,負責生成itms-services協議檔案的指令碼ipa-publish,以及負責將ipa-publish指令碼生成檔案上傳到伺服器的指令碼upload。
其中,由於我自己的情況是伺服器端的同事給我了內部測試伺服器的sftp的上傳許可權,所以這個upload指令碼主要實現了使用sftp來上傳的功能。具體可以實際情況來做修改。
關於itms-services協議的一些內容,可以參考我之前的文章:《shell指令碼實現ipa一鍵安裝(itms-services協議)》
開啟工程後,會發現本套指令碼中包含好幾個shell檔案。下面對其功能做說明:
ipa-build: 編譯xcode工程並生成ipa檔案
ipa-publish: 生成符合itms-services協議的檔案,並發布到伺服器。
sendemail: stmp傳送email的指令碼。(別人寫的)
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、執行指令碼需要絕對路徑,不能使用相對路徑。
其中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=""
#以下是郵箱的相關設定
#收件人
#傳送者郵箱
#郵箱使用者名稱
email_username=xx
#郵箱密碼
email_password=xx
#smtp伺服器位址
email_smtphost=smtp.exmail.qq.com
#可配置內容 end
根據實際情況配置即可。
webfrogs
IOS工程自動打包並發布指令碼實現
ios的開發過程中,當需要給測試人員發布測試包的時候,直接使用xcode來做的效率是非常低下的。尤其是當有一點小改動需要重新出包時,那簡直是個折磨的人的工作。通過一番研究後,遂決定寫一系列指令碼,以代替人工完成打包和發布的過程。借助xcode所附帶的 command line tools 可以通過命...
IOS IOS工程自動打包並發布指令碼實現
網上看到乙個build ios工程並打包的指令碼,寫的很不錯,學習了下,並新增部分注釋,方便理解 執行 1.若當前工程目錄為helloworld,進入上一級目錄 2.在終端輸入 ipa build helloworld 3.編譯完成,會在helloworld下面產生乙個build的目錄。bin ba...
iOS自動構建打包發布指令碼
原文 tomczhen的部落格 建議根據實際情況安裝 如專案中沒有使用cocoapods管理類庫則不用安裝cocoapods xctool是乙個很好的構建工具,有更加友好的log輸出和使用方法.如使用xcode自帶的xcodebuild構建則不需要安裝xctool.更新rubygem update ...