基於Jenkins + Gitlab + 蒲公英html
- 安裝完使用命令 java -version檢查當前版本
- java選擇如圖
先確保已安裝Homebrewjava
命令安裝 brew install jenkinsshell
設置開機自啓動api
ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
複製代碼
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
複製代碼
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
複製代碼
瀏覽器打開鏈接xcode
注意 將shell腳本保存到工程目錄下 保存爲 zzq.sh瀏覽器
SECONDS=0
#默認使用的語言是英文
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
#假設腳本放置在與項目相同的路徑下
project_dir=$(pwd)
#編輯上傳的文件所有放於此路徑下,不影響原工程 ,保存項目目錄地址
upload_dir="/Users/addcn/Documents/591TestAndUpload"
if [ -d "$upload_dir" ]; then
echo "編輯上傳的文件輸出文件目錄存在,目錄爲:$upload_dir"
else
echo "編輯上傳的文件目錄不存在"
mkdir -pv $upload_dir
echo "建立打包文件目錄${upload_dir}成功"
fi
#打包配置環境
configuration="Release"
#判斷是用的xcodeproj仍是直接xcworkspace,xcworkspace設置爲true,不然設置爲false
isWorkSpace=true
#項目名稱
scheme=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
projectName="${scheme}.xcworkspace"
#肯定工程名稱,若是用了cocopods,則使用xcworkspace,可是沒有該文件則使用xcodeproj進行
if [ -a "$project_dir/$projectName" ]; then
isWorkSpace=true
projectName="${scheme}.xcworkspace"
else
isWorkSpace=false
projectName="${scheme}.xcodeproj"
fi
#指定項目地址
project_path="$project_dir/$projectName"
#確認輸出日期
buildDate=$(date +%Y%m%d%H%M%S)
#指定輸出路徑
output_path="$upload_dir/package$buildDate"
#指定輸出歸檔文件地址
archive_path="$output_path/${scheme}.xcarchive"
#指定輸出ipa名稱
ipa_name="${scheme}.ipa"
#指定輸出ipa地址
ipa_path="$output_path/$ipa_name"
#指定xarchive文件導出受權樣式 bundle id
provisioningProfileName="XC iOS: com.xxxx.xxxxxxx"
#指定打包所使用的輸出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數
export_method='ad-hoc'
###############獲取版本號,bundleID
infoPlist="$project_dir/$scheme-Info.plist"
bundleVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $infoPlist`
bundleIdentifier=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" $infoPlist`
bundleBuildVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $infoPlist`
displayname=`/usr/libexec/PlistBuddy -c "Print CFBundleDisplayName" $infoPlist`
#輸出設定的變量值
echo "項目名:$projectName"
echo "===項目路徑: ${project_path}==="
echo "===打包xarchive文件路徑: ${archive_path}==="
echo "===打包ipa文件路徑: ${ipa_path}==="
echo "~~~~~~~~~~~~~~~~~~~開始編譯~~~~~~~~~~~~~~~~~~~"
#處理沒有輸出打包文件目錄的狀況
if [ -d "$output_path" ]; then
echo "打包文件輸出文件目錄存在,目錄爲:$output_path"
else
echo "打包文件目錄不存在"
mkdir -pv $output_path
echo "建立打包文件目錄${output_path}成功"
fi
#處理編譯文件目錄的狀況
cd $upload_dir
rm -rf ./build
buildAppToDir="$upload_dir/build" #編譯打包完成後.app文件存放的目錄
#從新進入當前項目路徑下
cd $project_dir
security unlock-keychain -p "addcn" /Users/addcn/Library/Keychains/login.keychain
#開始編譯app
if $isWorkSpace ; then #判斷編譯方式
echo "開始編譯workspace...."
xcodebuild -workspace $projectName -scheme $scheme -configuration $configuration clean build SYMROOT=$buildAppToDir
else
echo "開始編譯target...."
xcodebuild -target $projectName -configuration $configuration clean build SYMROOT=$buildAppToDir
fi
#判斷編譯結果
if test $? -eq 0
then
echo "~~~~~~~~~~~~~~~~~~~編譯成功~~~~~~~~~~~~~~~~~~~"
else
echo "~~~~~~~~~~~~~~~~~~~編譯失敗~~~~~~~~~~~~~~~~~~~"
exit 1
fi
echo "開始打包$scheme.app成$scheme.ipa....."
cd $upload_dir
findFolderName=`find . -name "$configuration-*" -type d |xargs basename` #查找目錄
appDir=$buildAppToDir/$findFolderName #app所在路徑
#從新進入當前項目路徑下
cd $project_dir
echo "打包xarchive文件,路徑爲:$archive_path"
if $isWorkSpace ; then #判斷編譯方式
echo "開始打包workspace...."
xcodebuild -workspace $projectName -scheme $scheme -destination generic/platform=iOS archive -configuration ${configuration} ONLY_ACTIVE_ARCH=NO -archivePath $archive_path
else
echo "開始打包target...."
xcodebuild -target $projectName -scheme $scheme -destination generic/platform=iOS archive -configuration ${configuration} ONLY_ACTIVE_ARCH=NO -archivePath $archive_path
fi
#檢查文件是否存在
if [ -a "$archive_path" ]; then
echo "打包$scheme.xcarchive成功."
else
echo "打包$scheme.xcarchive失敗."
exit 1
fi
# echo "開始導出$scheme.xcarchive成$scheme.ipa....."
# xcodebuild -exportArchive -exportFormat ipa -archivePath $archive_path -exportPath $appDir/$ipa_name -exportProvisioningProfile $provisioningProfileName
echo "開始打包$scheme.app成$scheme.ipa....."
xcrun -sdk iphoneos PackageApplication -v $appDir/$scheme.app -o $appDir/$ipa_name #將app打包成ipa
echo "檢查打包文件$appDir/${ipa_name}是否存在"
if [ -f "$appDir/$ipa_name" ];then
echo "打包${ipa_name}成功."
else
echo "打包${ipa_name}失敗."
exit 1
fi
cp -f -p $appDir/$ipa_name $ipa_path #拷貝ipa文件
echo "複製${ipa_name}到${ipa_path}成功"
echo "~~~~~~~~~~~~~~~~~~~結束打包,處理成功~~~~~~~~~~~~~~~~~~~"
#輸出總用時
echo "===Finished.編譯加打包共花費時間: ${SECONDS}s==="
echo "正在上傳至蒲公英平臺"
echo "版本:${bundleVersion}"
#蒲公英的ukey apikey
curl -F "file=@${ipa_path}" -F "uKey=xxxxxxxxxxxxx" -F "_api_key=xxxxxxxxxxxxxxx" https://www.pgyer.com/apiv1/app/upload > $output_path/code.text
result=`cat $output_path/code.text`
result1=`echo "${result##*"appQRCodeURL"}"`
length=`expr ${#result1} - 6`
result2=`echo ${result1:3:$length}`
result3=`echo $result2 | sed 's:\\\/:\/:g'`
if [ ! $result3 ];
then
echo "~~~~~~~~~~~~~~~~~~~上傳失敗~~~~~~~~~~~~~~~~~~~"
else
echo "~~~~~~~~~~~~~~~~~~~上傳成功~~~~~~~~~~~~~~~~~~~"
echo "生成的二維碼連接爲:${result3}"
fi
# echo "刪除編譯文件包和打包"
# rm -rf $buildAppToDir
# rm -rf $output_path
#輸出總用時
echo "===Finished.共花費時間: ${SECONDS}s==="
複製代碼
修改bash
目錄地址oracle
重啓app
如報異常: xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH 則根據以下連接操做:curl
- Xcode腳本自動化打包問題:xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
- 後面根據對比發現新版的Xcode少了這個PackageApplication(轉註:PackageApplication在前幾個版本已被標識爲廢棄,在8.3版本完全移除了) 先去找個舊版的Xcode裏面copy一份過來
- 放到下面這個目錄: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
- 而後執行命令:
- sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/
- chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication