shell腳本實現ios打包測試

導語

在開發過程當中,常常須要打包給QA進行測試。這種重複性高的工做,我經過腳本的方式實現。讓QA在配置好的電腦上面執行腳本,便可實現打包測試。美滋滋!html

項目背景

Mac

項目跟腳本都是在Mac系統上執行的;react

bash

腳本語言使用的是bash,因此須要電腦支持bash腳本的執行。Mac系統默認支持!ios

React-Native

項目是使用 React-Native 框架開發的,因此腳本中有部分代碼是針對 RN 的;git

打包前準備

配置證書

項目編譯成功

蒲公英生成應用

打包流程

生成 exportOptions plist 文件

exportOptions配置文件爲使用xcode導包的配置項;shell

配置項說明:npm

  1. provisioningProfiles App bundle ID 爲key,mobileprovision 的文件名做爲 value;
  2. method 決定導出包的類型,包括:app-store、ad-hoc、package、enterprise、development、developer-id、and mac-application;
  3. teamID 開發者ID,可在 keychain 或者登陸開發者網站中查看;

更新代碼

git pull
yarn install
yarn link
複製代碼

清除緩存

# 使用 Cocoapods
xcodebuild clean -workspace <workspace_path>  -scheme <app_scheme> -configuration <Debug Or Release>

# 不使用 Cocoapods
xcodebuild clean -project <project_path>  -scheme <app_scheme> -configuration <Debug Or Release>
複製代碼

代碼說明:react-native

  1. <workspace_path> 項目.xcworkspace的絕對路徑;
  2. <project_path> 項目.xcodeproj的絕對路徑;
  3. <app_scheme> 項目App的scheme (非Extension App);
  4. <Debug Or Release> 編譯環境,Debug Or Release;

App的scheme必須跟項目中 Manager Schemes 中的 Scheme name 一致;api

開始編譯

# 使用 Cocoapods
xcodebuild archive -workspace <workspace_path> -scheme <app_scheme> -archivePath <xcarchive_path>

# 不使用 Cocoapods
xcodebuild archive -project <project_path> -scheme <app_scheme> -archivePath <xcarchive_path>
複製代碼

代碼說明:xcode

  1. <workspace_path> 同上;
  2. <project_path> 同上;
  3. <app_scheme> 同上;
  4. <xcarchive_path> 導出 achive 文件路徑;

導出 ipa 包

xcodebuild -exportArchive -archivePath <xcarchive_path> -exportPath <export_ipa_path> -exportOptionsPlist <exportOptionsPlist_path>
複製代碼

代碼說明:瀏覽器

  1. <xcarchive_path> achive文件路徑;
  2. <export_ipa_path> ipa文件導出路徑;
  3. <exportOptionsPlist_path> 導包配置plist文件;

上傳到蒲公英

curl -F "file=@{$filePath}" \
-F "uKey={$uKey}" \
-F "_api_key={$apiKey}" \
https://www.pgyer.com/apiv1/app/upload
複製代碼

代碼說明:

  1. {$filePath} 是應用安裝包文件的路徑;
  2. {$uKey} 是開發者的用戶 Key,在應用管理-API中查看;
  3. {$apiKey} 是開發者的 API Key,在應用管理-API中查看;

若是上傳成功,接口會以 JSON 格式返回應用的詳細信息。若是上傳失敗,則會返回相應的錯誤信息。

完整代碼

#!/bin/sh
 # echo "\033[42;37m ~~~~~~~~~~~~~~~~ 開始執行腳本 ~~~~~~~~~~~~~~~~ \033[0m" 
 #------------------------- 腳本配置信息 --------------------------------------------
 # 工程目錄
BASE_PROJECT=''
 # 工程名稱
PROJECT_NAME=""
 # 編譯模式,默認有 Debug Release
CONFIGURATION_TARGET=Release
 # 編譯路徑
BUILDPATH=~/Desktop
 # 導出ipa 所需plist
ADHOCExportOptionsPlist=~/exportOptions.plist
 # archivePath
ARCHIVEPATH=${BUILDPATH}/${PROJECT_NAME}/${PROJECT_NAME}.xcarchive
 # ipa 存放路徑
IPAPATH=${BUILDPATH}/ipa_$(date +%F-%T)
 # 蒲公英 key
uKey=""
 # 蒲公英 apiKey
apiKey=""
 # 蒲公英下載地址
DOWNLOAD_PATH=""
 # #------------------------- 判斷文件/目錄是否存在 --------------------------------------------

if [ ! -d ${BASE_PROJECT} ];
then
    echo "\033[31m ${BASE_PROJECT} 路徑不存在,請檢查! \033[0m" 
    exit 1
elif [ ! -d ${BASE_PROJECT}/ios ];
then
    echo "\033[31m ${BASE_PROJECT}/ios 路徑不存在,請檢查! \033[0m" 
    exit 1
elif [ ! -f ${ADHOCExportOptionsPlist} ];
then
    echo "\033[31m${ADHOCExportOptionsPlist} 文件不存在,請檢查! \033[0m" 
    exit 1
fi
 #------------------------- 判斷證書是否正確設置 --------------------------------------------



echo "\033[42;37m ~~~~~~~~~~~~~~~~ 更新代碼 ~~~~~~~~~~~~~~~~ \033[0m"

cd ${BASE_PROJECT}
# git checkout dev
# git pull origin dev
# npm install
# react-native link

echo "\033[42;37m ~~~~~~~~~~~~~~~~ 清除緩存 ~~~~~~~~~~~~~~~~ \033[0m"

cd ./ios
watchman watch-del-all
# npm start -- --reset-cache
xcodebuild clean -project ${PROJECT_NAME}.xcodeproj -scheme ${PROJECT_NAME} -configuration ${CONFIGURATION_TARGET}

echo "\033[42;37m ~~~~~~~~~~~~~~~~ 開始編譯 ~~~~~~~~~~~~~~~~ \033[0m"

xcodebuild archive -project ${PROJECT_NAME}.xcodeproj -scheme ${PROJECT_NAME} -archivePath ${ARCHIVEPATH} -configuration ${CONFIGURATION_TARGET}
 #------------------------- 判斷編輯是否成功 --------------------------------------------

if [ ! -d "$ARCHIVEPATH" ]
then
    echo "\033[31m 編譯失敗! \033[0m" 
    exit 1
fi

echo "\033[42;37m ~~~~~~~~~~~~~~~~ 導出ipa ~~~~~~~~~~~~~~~~ \033[0m"

xcodebuild -exportArchive -archivePath ${ARCHIVEPATH} -exportPath ${IPAPATH} -exportOptionsPlist ${ADHOCExportOptionsPlist}
 #------------------------- 判斷導出是否成功 --------------------------------------------

if [ ! -d "$IPAPATH" ]
then
    echo "\033[31m 導出ipa失敗! \033[0m" 
    exit 1
fi

echo "\033[42;37m ~~~~~~~~~~~~~~~~ 上傳到蒲公英 ~~~~~~~~~~~~~~~~ \033[0m"

curl -F "file=@$IPAPATH/${PROJECT_NAME}.ipa" \
-F "uKey=$uKey" \
-F "_api_key=$apiKey" \
http://www.pgyer.com/apiv1/app/upload
 #------------------------- 瀏覽器打開下載地址 --------------------------------------------

open -a "/Applications/Safari.app" ${DOWNLOAD_PATH}

echo "\033[42;37m ~~~~~~~~~~~~~~~~ 打包成功 ~~~~~~~~~~~~~~~~ \033[0m"

exit 1
複製代碼

打包過程遇到的問題

執行腳本報錯:Permission denied

# 解決方法:
chmod 777 文件路徑
複製代碼

參考資料:

  1. Xcode命令行腳本打包;
  2. 蒲公英:使用一條命令快速上傳應用;
  3. Building from the Command Line with Xcode FAQ
相關文章
相關標籤/搜索