一、前言
在我們App實際開發(fā)過程中,我們的最終目的是打包上傳并發(fā)布App。之前一直手動打包,但是不管是打包效率還是打包時間都不太理想,所以最近搞了個腳本打包,可以一鍵打包上傳 App Store/Fir/蒲公英 。廢話不多說,我們直接開始吧。
二、準備
1、在開發(fā)者中心的Identifiers目錄下注冊一個App IDs。

image.png
2、在開發(fā)者中心的Provisioning Profiles目錄下注冊配置文件下載并打開。

image.png

image.png
3、安裝Fir.im命令行工具,命令如下:
gem install fir-cli
三、步驟
1、把shell.sh(打包腳本)、exportAppstore.plist(上傳App Store的plist)、exportTest.plist(上傳到蒲公英/Fir平臺)三個文件放到需要自動化打包的工程目錄下。

image.png
2、終端到達工程目錄下,執(zhí)行shell.sh腳本。
cd 項目路徑
執(zhí)行shell腳本
1、寫好自己的腳本,比如aa.sh
2、打開終端 執(zhí)行:
方法一: 輸入命令 ./aa.sh
方法二:直接把 aa.sh 拖入到終端里面。
3、根據(jù)腳本提示選擇不同打包方式,最后選擇上傳到App Store還是Fir/蒲公英。

image.png
4、上述步驟操作成功后工程目錄下會生成
build文件(編譯后生成)和IPADir文件(ipa包存放的目錄)。
image.png
四、正文
下面詳細介紹下具體需要修改的地方:
-
exportAppstore.plist
image.png -
exportTest.plist
image.png shell.sh(里面xxx自己替換成自己的)
草圖

image.png
代碼
#使用方法
if [ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi
#工程絕對路徑
project_path=$(cd `dirname $0`; pwd)
#工程名 將XXX替換成自己的工程名
project_name=xxx
#scheme名 將XXX替換成自己的scheme名
scheme_name=xxx
#打包模式 Debug/Release
development_mode=Debug
#build文件夾路徑
build_path=${project_path}/build
#plist文件所在路徑
exportOptionsPlistPath=${project_path}/exportTest.plist
#導出.ipa文件所在路徑
exportIpaPath=${project_path}/IPADir/${development_mode}
echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc] "
##
read number
while([[ $number != 1 ]] && [[ $number != 2 ]])
do
echo "Error! Should enter 1 or 2"
echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc] "
read number
done
if [ $number == 1 ];
then
development_mode=Release
exportOptionsPlistPath=${project_path}/exportAppstore.plist
## 證書名字
else
development_mode=Debug
exportOptionsPlistPath=${project_path}/exportTest.plist
fi
echo '///-----------'
echo '/// 正在清理工程'
echo '///-----------'
xcodebuild \
clean -configuration ${development_mode} -quiet || exit
echo '///--------'
echo '/// 清理完成'
echo '///--------'
echo ''
echo '///-----------'
echo '/// 正在編譯工程:'${development_mode}
echo '///-----------'
## 注意這里!必看!!!必看!!!必看!!! 78行
## xcodeproj xcworkspace
## 如果普通工程 78行 第一個xxx替換為project,第二個xxx替換為xcodeproj
## 如果使用CocoaPods 78行 第一個xxx替換為workspace,第二個xxx替換為xcworkspace
## 例如:
## 沒用CocoaPods, archive -project ${project_path}/${project_name}.xcodeproj \
## 用了CocoaPods, archive -workspace ${project_path}/${project_name}.xcworkspace \
xcodebuild \
archive -xxx ${project_path}/${project_name}.xxx \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive -quiet || exit
echo '///--------'
echo '/// 編譯完成'
echo '///--------'
echo ''
echo '///----------'
echo '/// 開始ipa打包'
echo '///----------'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
if [ -e $exportIpaPath/$scheme_name.ipa ];
then
echo '///----------'
echo '/// ipa包已導出'
echo '///----------'
open $exportIpaPath
else
echo '///-------------'
echo '/// ipa包導出失敗 '
echo '///-------------'
fi
echo '///------------'
echo '/// 打包ipa完成 '
echo '///-----------='
echo ''
echo '///-------------'
echo '/// 開始發(fā)布ipa包 '
echo '///-------------'
if [ $number == 1 ];
then
echo "Place enter the number you want to export ? [ 1:App Store] "
##
read FILM
while([ $FILM != 1 ])
do
echo "Error! Should enter 1"
echo "Place enter the number you want to export ? [ 1:App Store] "
read FILM
done
if [ $FILM == 1 ];
then
#驗證并上傳到App Store
# 將-u 后面的XXX替換成自己的AppleID的賬號,-p后面的XXX替換成自己的密碼
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u xxx -p xxx -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u xxx -p xxx -t ios --output-format xml
else
echo "false"
fi
else
echo "Place enter the number you want to export ? [ 1:fir 2:蒲公英] "
##
read platform
while([[ $platform != 1 ]] && [[ $platform != 2 ]])
do
echo "Error! Should enter 1 or 2"
echo "Place enter the number you want to export ? [ 1:fir 2:蒲公英] "
read platform
done
if [ $platform == 1 ];
then
#上傳到Fir
# 將XXX替換成自己的Fir平臺的token
fir login -T xxx
fir publish $exportIpaPath/$scheme_name.ipa
else
echo "開始上傳到蒲公英"
#上傳到蒲公英
#蒲公英aipKey
MY_PGY_API_K=xxx
#蒲公英uKey
MY_PGY_UK=xxx
curl -F "file=@${exportIpaPath}/${scheme_name}.ipa" -F "uKey=${MY_PGY_UK}" -F "_api_key=${MY_PGY_API_K}" https://qiniu-storage.pgyer.com/apiv1/app/upload
fi
fi
echo "\n\n"
echo "已運行完畢>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
exit 0
五、代碼
https://github.com/GlassOfRedWinemm/PackDemo-master.git
有不明白的隨時問我?。?!

