移動客戶端編譯打包方式 | iOS。移動客戶端的編譯打包,是客戶端CI的開始點。通過jenkins等持續集成平台,結合代碼管理工具,搭建自動編譯任務,按照約定的條件自動打包,能夠節省人力,管理迭代提測版本,節省人力。
移動端編譯打包,按照系統不同,可以分成Android編譯和iOS編譯兩類,各自的編譯工具和方式也各不相同,下面我們會分章節概述其主要的編譯工具和方法。http://blog.csdn.net/sunshine586983/article/details/
iOS端編譯工具有很多,系統提供了xcodebuild、xcrun工具,另外,還有一些開源工具,比如xctool、PlistBuddy等,可以輔助整個編譯過程。http://blog.csdn.net/sunshine586983/article/details/
和Android不同,iOS的版本安裝比較困難,拿到ipa後,一般是無法直接安裝的(越獄系統除外),幸運的是,蘋果提供了基於企業證書的OTA(over the air)分發方式,可以通過網頁的形式方便的安裝ipa。本章將結合OTA部署方式,詳細講解ios端的編譯和分發。http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
環境准備
http://blog.csdn.net/sunshine586983/article/details/
OTA的部署,必須依賴這樣兩個證書:企業級發布證書以及對應的密鑰(.mobileprovision文件以及.cer文件);企業級開發者證書以及密鑰(.p12文件以及.cer文件)。這兩個證書需要安裝到你的編譯機上,並加入到keychain中。http://blog.csdn.net/sunshine586983/article/details/
編譯機上需要安裝合適版本的xcode,同時安裝xctool工具。接下來就可以執行整個編譯打包過程了。http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
編譯及產物
http://blog.csdn.net/sunshine586983/article/details/
編譯整個過程分成兩大部分,打出ipa包,以及生成plist文件和html文件,為後續的ota部署提供物料。按照重點部分,描述編譯過程如下:http://blog.csdn.net/sunshine586983/article/details/
1、解開鑰匙鏈,獲取證書使用權限http://blog.csdn.net/sunshine586983/article/details/
通過securityunlock-keychain -p username $PathTologin.keychain來解鎖keychain。http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
2、使用PlistBuddy工具獲取version以及Identifierhttp://blog.csdn.net/sunshine586983/article/details/
version=`PlistBuddy-c "Print CFBundleVersion" "${PROJ_PLIST_PATH}"`http://blog.csdn.net/sunshine586983/article/details/
bundleIdentifier=`PlistBuddy-c "Print CFBundleIdentifier" "${PROJ_PLIST_PATH}"`http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
3、清理工作區間,開始打包,使用企業證書打簽名http://blog.csdn.net/sunshine586983/article/details/
xctool -workspace $workspaceName-scheme ${SCHEME_NAME} -reporter pretty -configuration Debug cleanhttp://blog.csdn.net/sunshine586983/article/details/
xctool -workspace $workspaceName-scheme ${SCHEME_NAME} -reporter pretty -configuration DebugCODE_SIGN_IDENTITY="${DEVELOPER_NAME}" archivehttp://blog.csdn.net/sunshine586983/article/details/
其中,DEVELOPER_NAME需要填寫證書對應的機構名稱,命令執行完之後,在xcode的工作目錄下會生成對應的app文件夾,裡面是各種編譯產物,當然我們也可以使用-o參數,將生成app放到指定目錄去。然後,我們需要使用xcrun工具對ipa打簽名:http://blog.csdn.net/sunshine586983/article/details/
xcrun -sdk iphoneosPackageApplication -v ${APP_NAME} -o ${IPA_LOC}/${IPA_NAME} -sign $CODE_SIGN_IDENTITY-embed ${PROVISION_PROFILE}http://blog.csdn.net/sunshine586983/article/details/
其中,PROVISION_PROFILE變量指向對應的企業證書的mobileprovisionfile的位置。http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
4、保存dsym文件http://blog.csdn.net/sunshine586983/article/details/
3步驟之後,xcode工作目錄下會生成一個dSyms文件夾,我們需要將裡面的文件打包成.dSYM文件,方便日後崩潰日志解析使用:http://blog.csdn.net/sunshine586983/article/details/
tar cvf "${PROJ_NAME}_CI.dSYMs.tar""${PROJ_NAME}_CI.app.dSYM"http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
5、生成plist文件http://blog.csdn.net/sunshine586983/article/details/
OTA部署,需要在對應的plist文件中定義ipa下載地址,我們在編譯時獲取ipa名稱,bundleID等信息,填充到一個模版plist文件,為後面的OTA部署做准備,plist模版如下:http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
itemsassetskindhttp://blog.csdn.net/sunshine586983/article/details/
software-packagehttp://blog.csdn.net/sunshine586983/article/details/
url http://http://****/${IPA_NAME}http://blog.csdn.net/sunshine586983/article/details/
metadatahttp://blog.csdn.net/sunshine586983/article/details/
bundle-identifierhttp://blog.csdn.net/sunshine586983/article/details/
${bundleIdentifier}http://blog.csdn.net/sunshine586983/article/details/
bundle-versionhttp://blog.csdn.net/sunshine586983/article/details/
${version}http://blog.csdn.net/sunshine586983/article/details/
kindhttp://blog.csdn.net/sunshine586983/article/details/
softwarehttp://blog.csdn.net/sunshine586983/article/details/
titlehttp://blog.csdn.net/sunshine586983/article/details/
${IPA_PREFIX}http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/http://blog.csdn.net/sunshine586983/article/details/
需要注意的是,software-package的值,要配置成ipa對應的url。http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
OTA部署
http://blog.csdn.net/sunshine586983/article/details/
通過2.2.2節中的環境部署和編譯之後,我們已經構建出了ipa包,dSYM文件,以及對應的plist文件,但此時還無法編譯,我們需要通過一個html,以特定的標簽指定plist文件,直接通過網頁進行OTA安裝。http://blog.csdn.net/sunshine586983/article/details/
html內容如下:http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
' itms-services://?action=download-manifest&url=https://***/${IPA_PREFIX}.plist'>http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
${IPA_PREFIX}http://blog.csdn.net/sunshine586983/article/details/
發布日期:${ARCH_TIME_WITH_FORMAT}${IPA_FILE_SIZE}http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
http://blog.csdn.net/sunshine586983/article/details/
在html的配置中,需要注意的是,a標簽中的這個值是固定的,itms-services://?action=download-manifest&url=http://blog.csdn.net/sunshine586983/article/details/
另外,url一定要使用https的方式訪問,否則將無法訪問plist文件。http://blog.csdn.net/sunshine586983/article/details/
最終,我們在界面上點擊對應版本的item,即可直接安裝ipahttp://blog.csdn.net/sunshine586983/article/details/