上篇文章介紹了自動化打包上傳蒲公英,適合單個應用的打包上傳。由于公司業務需要,需要給不同客戶個性化定制APP,這些定制APP功能相同,不同的只是bundle id和資源圖片,之前一直手工定制。但是我們公司的銷售人員太給力,現在有四十多個定制版APP,每次發新的版本,需要重新定制,所以每次發版就很苦逼。狠了狠心研究了一下自動化批量打包上傳,和大家分享一下。
首先是項目工程結構的變化:
這里參考了唐巧大神寫的一篇博客:猿題庫iOS客戶端的技術細節(一):使用多target來構建大量相似App
先簡單介紹一下 Xcode 中 target 的概念,蘋果在文檔中寫道:
Targets that define the products to build. A target organizes the files and instructions needed to build a product into a sequence of build actions that can be taken.
在 Xcode 的一個項目中,可以允許建立多個編譯的 target,每個 target 代表著最終編譯出來的一個 App 文件,在每個 target 中,可以添加不同的編譯源文件和資源文件。最終,通過我們在不同 target 之間,修改其Copy Bundle Resources和Compile Sources配置,使課程之間的差異性得到實現。
1.先創建第二個target
點擊工程名稱,右側會出現PROJECT和TARGETS,點擊你現在的target,假如叫WRC,右鍵彈出菜單中,選擇Duplicate,復制一個相同的target,復制的target一般叫WRC copy,WRC copy和WRC的設置(編譯條件、源文件、資源文件)完全一樣,此時你可以根據需要修改WRC copy的編譯條件和資源文件了。
創建完新的target后,修改名稱<WRC_標記>,Xcode也會自動幫我們創建對應Info.plist文件,修改成<WRC_標記-info.plist>。點擊xcode左上角Run右邊的工程名稱,在下拉框中選擇Manage Schemes,在彈出框中修改scheme名稱。
創建新的targets通過預編譯宏來區分
當創建多個target后,你添加資源文件時,通過選擇添加的target來控制不同版本的內容,當你在公共的代碼片段內做使用不同target做不同的操作(如:target1和target2的環境地址不一樣),預編譯宏可以幫到你,再說一下預編譯宏的事情:target->Build Setting
再此創建一個宏,比如TARGET_VERSION_LITE,等于不同的值代表不同的target,代碼中通過這個標記來做相應處理。
#if TARGET_VERSION_LITE==0
#define SERVER_URL @"https://test1.feezu.cn"
#elif TARGET_VERSION_LITE==1
#define SERVER_URL @"https://test2.feezu.cn"
......
#else
#endif
2.配置不同的Copy Bundle Resources
通過配置不同target的Copy Bundle Resources資源圖片來定制顯示不同的APP,配置不同target的Compile Sources來實現功能邏輯上的不同。target->Build Phases
3.創建新的類、添加圖片資源
當我們創建類或者添加圖片資源時,可以通過勾選相應的target來區分。
4.批量化打包上傳蒲公英
使用Python語言和蘋果提供的xcodebuild來構建腳本文件來實現批量自動化打包上傳。
這里借鑒了大神寫的腳本文件
功能流程介紹:
打包IPA --- > 上傳蒲公英 ---> 打包IPA --- > 上傳蒲公英 ...
使用說明(針對iOS開發者)代碼地址
1、安裝HomeBrew
安裝命令:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2、安裝xctool用于iOS項目打包
$ brew install xctool
3、安裝pip
(1).我們先獲取pip安裝腳本:
$ wget https://bootstrap.pypa.io/get-pip.py
如果沒有安裝wget可以執行安裝
$ brew install wget
(2).安裝pip
$ sudo python get-pip.py
4、安裝Python虛擬環境virtualenv
$ sudo pip install virtualenv
5、進入下載的項目所在的目錄
$ cd(you path)
$ virtualenv venv? ? ? 執行此命令后會在當前目錄下創建一個venu文件夾
? ? ? ? ?New python executableinvenv/bin/python
? ? ? ? ?Installing distribute............done.
$ venv/bin/pip install -r requirements.txt
6、配置項目
修改Config.py文件,如何配置根據注釋來。修改template文件夾下的config.plist,根據config.plist中的數據來批量定制不同的APP。
7、自動打包(需要在腳本文件的根目錄下)
$ venv/bin/python Client.py
打包完成后,可以在history文件夾下看到生成的ipa包