增加二維碼,以供掃描安裝
先看一下下載安裝的網(wǎng)頁
截止到現(xiàn)在堕澄,Jenkins里已經(jīng)可以打包了僵芹,但是安裝的話处硬,除了上傳蒲公英,http://fir.im這些拇派,我們還可以自己生成二維碼荷辕,一般情況下,我覺得不愿意把ipa包傳到外網(wǎng)上件豌,當(dāng)然你也可以傳疮方,要拿到二維碼需要看網(wǎng)站的API文檔,按照文檔去調(diào)用茧彤。下面我要講一下怎么在自己的服務(wù)器上生成二維碼骡显。
我選用的是Python,用到的庫是Python的Pillow庫和QRCode模塊曾掂,Mac本身應(yīng)該安裝有Python惫谤。
一、安裝Pillow模塊
用終端執(zhí)行以下語句珠洗,安裝pillow溜歪,先安裝multiprocessing模塊,再安裝pillow模塊许蓖,因為pillow對multiprocessing有依賴
sudo pip install multiprocessing
sudo pip install Pillow
二蝴猪、安裝QRCode模塊
在QRCode官網(wǎng)下載模塊包https://pypi.python.org/pypi/qrcode或https://github.com/lincolnloop/python-qrcode
解壓,終端進入到解壓的文件夾下蛔糯,執(zhí)行以下語句來安裝
python setup.py install
三拯腮、配置sublime成Python編譯器
打開sublime--->Tools--->Build Systems--->Python
測試Python是否能正常工作,輸入下面的句子蚁飒,并且先保存成hello.py文件到桌面(要先保存动壤,不然編譯器不知道你這是個Python文件),command+b淮逻,編譯以下琼懊,看打印臺有沒有輸出hello,如果輸出了hello阁簸,說明正常,可以直接使用
print("hello")
四哼丈、編寫輸出二維碼的Python語句
二維碼其實就是一個網(wǎng)址启妹,一個連接,把它變成二維碼醉旦,所以一掃描就可以進入到這個網(wǎng)址
import qrcode
img=qrcode.make("/Users/hongjie.xia/Desktop/index.html") // 這個路徑是你放index.html文件的地方饶米,上一節(jié)講的,https服務(wù)器訪問的根目錄下放置index.html的地方
img.save("/Users/hongjie.xia/Desktop/QRCode.png") // 這個是你要存儲二維碼的地址车胡,根據(jù)自己的情況填寫
我得實際配置Jenkins的二維碼地址不是上面的檬输,上面的是測試用的,到時候?qū)懙絪hell腳本里可以根據(jù)情況來修改地址
五匈棘、用shell腳本來創(chuàng)建可以生成二維碼的Python文件丧慈,并且運行
!/bin/bash,#!/bin/python這兩句必須寫,告訴編譯器是個shell腳本主卫、Python腳本
#!/bin/bash
mkdir /Users/hongjie.xia/Desktop
cat > /Users/hongjie.xia/Desktop/GeverateQRCode.py << EOF // 這一句的意思是創(chuàng)建一個GeverateQRCode.py文件逃默,并且往里面寫內(nèi)容,EOF是開頭簇搅,編輯的末尾還要頂格寫一個EOF
#!/bin/python
import qrcode
img=qrcode.make("/Users/hongjie.xia/Desktop/index.html")
img.save("/Users/hongjie.xia/Desktop/QRCode.png")
EOF
python /Users/hongjie.xia/Desktop/GeverateQRCode.py // 運行Python腳本
上面這段代碼完域,大家可以放到sublime里進行編寫,然后存成qrcode.sh文件馍资,在終端里運行筒主,運行的時候,需要授權(quán)鸟蟹,進入到放qrcode.sh的目錄下乌妙,先輸入以下命令
chmod 777 ./qrcode.sh
然后運行
./qrcode.sh
這個腳本就可以跑起來了
六、在Jenkins的構(gòu)建腳本里寫入生成二維碼的命令
下面是我的構(gòu)建腳本建钥,大家可以直接改參數(shù)使用藤韵,我項目叫test,hongjie.xia是我的機子名稱熊经,192.168.1.1是我得服務(wù)器(配置https的本機)地址
project_path="/Users/hongjie.xia/Desktop/test"
hostAddress="https://192.168.1.1"
#指定項目地址
workspace_path="$project_path/test.xcworkspace"
#指定項目的scheme名稱
scheme="test"
#指定要打包的配置名
configuration="Release"
#指定打包所使用的輸出方式泽艘,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數(shù)
export_method='enterprise'
#服務(wù)器訪問的地址
serverDocumentPath="/Users/hongjie.xia/ServerDocument"
#每次構(gòu)建使用的plist文件地址
plistFileName="Plist_${BUILD_NUMBER}"
plistPath="$serverDocumentPath/${JOB_NAME}/${VERSION}/Plists/${plistFileName}"
#plist文件的名字
plistName="${JOB_NAME}Install.plist"
#plist文件的地址
plist_path="${plistPath}/${plistName}"
#每次構(gòu)建后生成二維碼的鏈接地址
htmlFileName="Html_${BUILD_NUMBER}"
htmlPath="$serverDocumentPath/${JOB_NAME}/${VERSION}/Htmls/${htmlFileName}"
#每次構(gòu)建生成的二維碼地址
qrCodeFileName="QRCode_${BUILD_NUMBER}"
qrCodePath="$serverDocumentPath/${JOB_NAME}/${VERSION}/QRCodes/${qrCodeFileName}"
#ipa和archive的輸出路徑
ipaFileName="Ipa_${BUILD_NUMBER}"
ipaPath="${serverDocumentPath}/${JOB_NAME}/${VERSION}/Ipas/${ipaFileName}"
#指定輸出ipa名稱
ipaName="${JOB_NAME}.ipa"
ipa_path="${ipaPath}/${ipaName}"
#指定輸出archive名稱
archiveName="${JOB_NAME}.xcarchive"
#指定輸出歸檔文件地址
archive_path="${ipaPath}/${archiveName}"
#服務(wù)器打開本地html的地址
serverHtmlPath="${hostAddress}/${JOB_NAME}/${VERSION}/Htmls/${htmlFileName}"
#服務(wù)器打開的plist文件地址
serverPlistPath="${hostAddress}/${JOB_NAME}/${VERSION}/Plists/${plistFileName}/${plistName}"
#服務(wù)器打開的ipa文件地址
serverIpaPath="${hostAddress}/${JOB_NAME}/${VERSION}/Ipas/${ipaFileName}/${ipaName}"
#指定打包配置
export_plist_path="$project_path/ExportOptions.plist"
#獲取執(zhí)行命令時的commit message
#commit_msg="$(cat $project_path/build_log.txt)"
#輸出設(shè)定的變量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipaPath}/${ipaName}==="
echo "===export method: ${export_method}==="
#echo "===commit msg: ${commit_msg}==="
#先清空前一次build
xcodebuild clean -workspace ${workspace_path} -scheme ${scheme} -configuration ${configuration}
xcodebuild archive -workspace ${workspace_path} -scheme ${scheme} -archivePath ${archive_path}
xcodebuild -exportArchive -archivePath ${archive_path} -exportPath ${ipaPath} -exportOptionsPlist ${export_plist_path}
#生成二維碼
#第一步镐依,生成對應(yīng)的plist文件
mkdir ${plistPath}
# html的位置應(yīng)該為構(gòu)建版本的信息
cat > ${plist_path} << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>${serverIpaPath}</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.xxx.xxx</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>releaseNotes</key>
<string>v1(可以隨意填)</string>
<key>title</key>
<string>寫你的標(biāo)題</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF
#第二步匹涮,獲取本機的server地址
mkdir ${htmlPath}
# html的位置應(yīng)該為構(gòu)建版本的信息
cat > ${htmlPath}/index.html << EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>寫你的標(biāo)題</title>
</head>
<body>
<h1 style="font-size:40pt">寫你的標(biāo)題<h1/>
<h1 style="font-size:40pt">
<a title="iPhone" href="itms-services://?action=download-manifest&url=${serverPlistPath}">Iphone Download</a>
<h1/>
<a title="iPhone" href="${hostAddress}/server.crt">ssl 證書安裝</a>
<h1/>
</body>
</html>
EOF
#第三步,生成二維碼
mkdir ${qrCodePath}
cat > ${qrCodePath}/GeverateQRCode.py << EOF
#!/bin/python
import qrcode
img=qrcode.make("${serverHtmlPath}/index.html")
img.save("${qrCodePath}/QRCode.png")
EOF
python ${qrCodePath}/GeverateQRCode.py
注意到槐壳,構(gòu)建腳本里然低,動態(tài)生了plist文件,這個plist文件是為了itms-services來調(diào)用,用來配置下載選項的雳攘,和上一節(jié)講的打包plist是兩回事带兜。
這個原理就是,你自己建立一個網(wǎng)頁吨灭,網(wǎng)頁上有下載按鈕刚照,點擊下載按鈕,調(diào)用itms-services喧兄,去plist文件里進行下載匹配无畔,根據(jù)plist文件,查找ipa包的位置繁莹,然后進行下載安裝檩互。
下面我來理一下整個這個文件夾的分布
七特幔、把二維碼顯示到Jenkins上
需要一個插件咨演,到Jenkins的首頁上,點擊系統(tǒng)管理--管理插件--可選插件--選擇description setter plugin蚯斯,進行安裝薄风。安裝好以后,就可以再次打開工程拍嵌,點擊配置遭赂,在構(gòu)建后配置里,增加如下選項
之后再Description里寫如下語句横辆,同樣是換成你自己的配置撇他,${JOB_NAME},${VERSION},${BUILD_NUMBER}都是Jenkins的自帶環(huán)境變量
<img src='https://192.168.1.1/${JOB_NAME}/${VERSION}/QRCodes/QRCode_${BUILD_NUMBER}/QRCode.png' height="200" width="200" />
點擊保存
這個時候就可以構(gòu)建了狈蚤,點擊Build with Parameters困肩,開始構(gòu)建,就OK了脆侮,這時就會出現(xiàn)二維碼了锌畸,直接掃描就可以進入到下載頁面。
八靖避、先進行證書的下載和信任
首先點擊證書的下載潭枣,下載了以后,安裝幻捏,根據(jù)操作步驟一步步進行信任等操作之后盆犁,需要到手機的設(shè)置---通用---關(guān)于本機---證書信任設(shè)置,打開對你自己根證書的信任篡九,之后就可以直接點擊下載進行下載安裝應(yīng)用了~