IOS工程自動打包並發布指令碼實現

2021-07-08 11:56:37 字數 2477 閱讀 2161

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 protected]

#傳送者郵箱

[email protected]

#郵箱使用者名稱

email_username=xx

#郵箱密碼

email_password=xx

#smtp伺服器位址

email_smtphost=smtp.exmail.qq.com

#可配置內容 end

根據實際情況配置即可。

IOS工程自動打包並發布指令碼實現

ios xcode 自動打包 ci 目錄 ios的開發過程中,當需要給測試人員發布測試包的時候,直接使用xcode來做的效率是非常低下的。尤其是當有一點小改動需要重新出包時,那簡直是個折磨的人的工作。通過一番研究後,遂決定寫一系列指令碼,以代替人工完成打包和發布的過程。借助xcode所附帶的 com...

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 ...