1. 程式人生 > >IOS工程自動打包併發布指令碼實現

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

作者:webfrogs

轉載請註明出處。

前言

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

目前指令碼已經完成,基本可以滿足我目前的需求。現將其開源,託管在github上,專案地址:點選這裡

思路

藉助xcode所附帶的“Command Line Tools”,可以通過命令列來完成IOS工程的編譯和打包工作。指令碼正是基於此完成的。

本套指令碼分為三個部分:負責編譯工程並打包的指令碼ipa-build,負責生成itms-services協議檔案的指令碼ipa-publish,以及負責將ipa-publish指令碼生成檔案上傳到伺服器的指令碼upload。

其中,由於我自己的情況是伺服器端的同事給我了內部測試伺服器的sftp的上傳許可權,所以這個upload指令碼主要實現了使用sftp來上傳的功能。具體可以實際情況來做修改。

注意:預設安裝完的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 protected]
#傳送者郵箱
[email protected]
#郵箱使用者名稱
email_username=xx
#郵箱密碼
email_password=xx
#smtp伺服器地址
email_smtphost=smtp.exmail.qq.com


#可配置內容  end

根據實際情況配置即可。

相關推薦

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

作者:webfrogs 轉載請註明出處。 前言 IOS的開發過程中,當需要給測試人員釋出測試包的時候,直接使用xcode來做的效率是非常低下的。尤其是當有一點小改動需要重新出包時,那簡直是個折磨的人的工作。通過一番研究後,遂決定寫一系列指令碼,以代替人工完成打

iOS自動打包併發指令碼

本文最終實現的是使用指令碼打 Ad-hoc 包,併發布測試,當然稍微修改一下指令碼引數就可以打其他型別的 ipa 包了。另外該指令碼還實現了將生成的 ipa 包上傳至蒲公英進行測試分發。文中內容包括: xcodebuild 簡介 使用xcodebuild

iOS工程自動打包 (Shell指令碼打包

1 #!/bin/bash 2 3 #-------------------------------------------- 4 # 功能:編譯xcode專案並打ipa包 5 # 使用說明: 6 # 編譯project 7 # ipa-b

iOS自動打包併發到Fir.im

一、前言 最近公司有個新需求,就是後臺要新增一個新功能,在頁面上更換App的標題、Logo等資訊,然後可以自動生成apk和ipa檔案。於是就研究了一下自動打包ipa這個功能 二、牛逼的工具fastlane fastlane這個工具牛逼之處就是幾乎包含了

編寫shell命令實現IOS自動打包

開發過程中,需要這樣的需求: App的兩個執行環境,一個是測試環境,一個是釋出環境,兩個環境的伺服器Api是不同的。每次,編譯打包測試軟體的時候,很麻煩。因此,需要編寫一個shell指令碼,可以根據傳入的引數,自動打包測試版或者釋出版App,同時可以生成 無線安裝所需的pl

iOS 自動打包到Fir和AppStore

自動 命令 arc mage 安裝 文件 product height clas 特別說明:如果項目沒有采用Cocoapods管理,沒有.xcworkspace,只有xcodeproj;只需要將腳本中這句 xcodebuild archive -workspace ${p

iOS自動消失提示框的實現

在實際的應用中,我們常會看到一些應用中當觸發某個事件時,會彈出一個提示框,然後自動消失的效果,其實這種效果的實現是比較簡單的,下面我介紹兩種簡單的方法: 1. 使用UIAlertView來實現,思路是給UIAlertView設定一個延遲時間,然後讓其消失(相當於點選了“取消

iOS批量自動打包和部署(Ⅱ)

網上有大把的文章講了自動打包,其實無非就是那幾條命令,但是我覺得有必要繼續瞭解一下一個app包(即應用)的組成和app可執行檔案的構建過程。這個裡面非常複雜,也參考了一些文章,僅將自己瞭解的大概梳理出來備忘。 應用的構建過程和組成 想象一下平時的打包過程,在Xcode中選擇對應的appid,bundle

[從0到1搭嵌入式工程]編譯打包和升級的實現

工程編譯:我們以nand分割槽,分為bootloader、kernel、rootfs、homefs為例。rootfs是linux系統必須的檔案目錄系統和工具的集合,掛載在跟目錄/下,homefs可以認為是我們自己的應用程式、自己的依賴庫,放在homefs中,放在/home目錄

如何使用maven打包併發到中央伺服器

在前一篇的博文中,我們介紹了maven的相關知識,對於maven的認識有了一定的瞭解,如果還不太熟悉,可以去看一下maven知識快速入門,瞭解開發中maven常用知識。 今天我們介紹一下maven打包相關的知識點,平時我們使用的大多數類庫,就是在maven的中

使用Travis自動構建併發Hugo

每次增加新文章時,還需手動更新到github上,重複勞動可以交由工具完成。 Travis CI就是一個幫助我們完成自動構建的工具 我想做的不僅是將編譯後的public資料夾釋出到Github Pages上,這樣會覆蓋掉很多其他檔案,所以我只是想將它釋出到

Angular 4 打包併發

專案基於Angular CLI,一個命令列介面工具搭建在專案開發完成之後,在打包釋出地方遇到了問題,之前一直使用angularjs開發,至於新的Angular 4卻是還未接觸,這次的專案,選擇了Angular 4,隨之而來的便是一個跨越式的變化。相比於angularjs直接引

打包併發自己的Android應用(eclipse)

第一步,在Eclipse中選擇需要打包的專案,然後右鍵--選擇Export,會彈出一個打包的提示框,如下圖所示。 按Next之後,會繼續出現一個提示框,這裡你可以選擇自己需要打包的專案(預設是

iOS批量自動打包和部署(I)

如果你遇到這樣的一項需求:專案的程式碼沒有變動,只是icon和介面改動,然後要打成很多的包,發往AppleStore。就像喜馬拉雅的各種小版本那樣,像牛皮鮮一樣汙染在AppleStore之上。那麼問題來了,成十上百的包,僅僅只是icon的圖示變了,程式碼都一樣,難道要人工在那打成十上百次嗎?答案當然是否定

再探CI,Github調戲Action手記——自動構建併發到另一倉庫

前言 接上文初探CI,Github調戲Action手記——自動構建併發布 在學習了Action的基本操作之後 接著我們來探索Action其他可能的功能 眾所周知 只有用得到的技術學習的才會最快 我也是如此 在完成了當前倉庫不同分支的構建釋出後,我又有了新的需求 自動構建後釋出到不同的倉庫 正文 我們直接新建一

手把手教你使用Rollup打包併發自己的工具庫

DevUI是一支兼具設計視角和工程視角的團隊,服務於華為雲DevCloud平臺和華為內部數箇中後臺系統,服務於設計師和前端工程師。 官方網站:devui.design Ng元件庫:ng-devui(歡迎Star) 官方交流:新增DevUI小助手(devui-official) DevUIHelper外掛:D

使用 Fastlane 實現 iOS 跟 android 自動打包指令碼

對於一個iOS APP的釋出上線,一般來說都需要經歷:編譯打包 -> 截圖 -> 填寫一些說明文字 -> 上傳ipa到itunes connect -> 提交供稽核。每次都要進行這麼多“繁瑣”的步驟,

iOS利用(Shell指令碼自動打包專案工程生成ipa

剛剛進入一家遊戲公司,今天在研究iOS利用指令碼打包專案工程。用xcode打包速度慢而且繁瑣,所以選擇指令碼來做,在這裡分享一下。 打包方法 一.通過Xcode 其實當我們Xcode點選了build或者執行comand+R之後,Xcode自己執行的

Mac Jenkins+fastlane 簡單幾步實現iOS自動化打包

管理員 文件夾 選擇 api 裝包 截圖 comm 通知 定義 最近在使用jenkins 實現ios自動化打包發布蒲公英過程實踐遇到了一些坑,特意記錄下來方便有需要的人。 進入正題: 一、安裝Jenkins 1.Mac上安裝Jenkins 遇到到坑 因為 Jenkins 的

iOS開發之使用fastlane工具實現自動化打包

TP ruby success 2.0 提交 gui ava 新的 unit test p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #000000; backgroun