效果圖鎮(zhèn)樓
使用注意事項(xiàng)
- 將腳本和
plist
文件放到和主工程同目錄下 -
project_name
換成工程名字 -
scheme_name
換成工程schemeName
一般都是和工程名字一樣的(不確定的話可以同時(shí)按住shift
+command
+,
或者按下圖所示來操作) -
exportOptionsPlistPath
導(dǎo)出的plist
文件路徑再后面細(xì)說 - 如果沒有使用項(xiàng)目中沒有使用
CocoaPods
, 編譯的時(shí)候需要將archive -workspace
改成archive -project
具體的看代碼注釋 - 替換蒲公英
key
,fir
的token
, 蘋果開發(fā)者賬號和密碼(如果蘋果賬號有雙重認(rèn)證宿亡,需要去官網(wǎng)獲取認(rèn)證密碼,替換腳本里面的tcha-fzfe-jcmd-tken
) - 運(yùn)行腳本只需要打開終端
cd
到當(dāng)前工程目錄文件下輸入:./shell.sh
回車即可 -
xcodebuild
更多詳細(xì)使用, 在終端中輸入xcodebuild --help
Shell
腳本代碼
代碼說明見注釋
#使用方法
if [ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi
# 刪除build包
if [[ -d build ]]; then
rm -rf build -r
fi
#工程絕對路徑
project_path=$(cd `dirname $0`; pwd)
#工程名 將XXX替換成自己的工程名
project_name=AutoArchiveTest
#scheme名 將XXX替換成自己的sheme名
scheme_name=AutoArchiveTest
#打包模式 Debug/Release
development_mode=Release
#build文件夾路徑
build_path=${project_path}/build
#plist文件所在路徑: 默認(rèn)上傳 app-store
exportOptionsPlistPath=${project_path}/exportAppstore.plist
#導(dǎo)出.ipa文件所在路徑
exportIpaPath=${project_path}/IPADir/${development_mode}
echo "請輸入你想法發(fā)布的方式 ? [ 1:app-store 2:ad-hoc] "
##
read number
while([[ $number != 1 ]] && [[ $number != 2 ]])
do
echo "笨蛋,只能輸入 1 or 2"
echo "請輸入你想法發(fā)布的方式 ? [ 1:app-store 2:ad-hoc] "
read number
done
if [ $number == 1 ];
then
# 配置證書
development_mode=Release
exportOptionsPlistPath=${project_path}/exportAppstore.plist
else
# 配置證書
development_mode=Release
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 '///-----------'
# 如果沒有使用cocoaPods, 需要將 archive -workspace ${project_path}/${project_name}.xcworkspace \
# 換成 archive -project ${project_name}.xcodeproj \
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-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
# 刪除build包
#if [[ -d build ]]; then
#rm -rf build -r
#fi
if [ -e $exportIpaPath/$scheme_name.ipa ];
then
echo '///----------'
echo '/// ipa包已導(dǎo)出'
echo '///----------'
open $exportIpaPath
else
echo '///-------------'
echo '/// ipa包導(dǎo)出失敗 '
echo '///-------------'
fi
echo '///------------'
echo '/// 打包ipa完成 '
echo '///-----------='
echo ''
echo '///-------------'
echo '/// 開始發(fā)布ipa包 '
echo '///-------------'
echo "\n\n"
if [ $number == 1 ];
then
#驗(yàn)證并上傳到App Store
# 將-u 后面的XXX替換成自己的AppleID的賬號漠另,-p后面的XXX替換成自己的密碼
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
#1900006358@qq.com
#tcha-fzfe-jcmd-tken(雙重認(rèn)證密碼)
#iOS123456(蘋果賬號密碼)
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u 1900006358@qq.com [-p iOS123456]
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u 1900006358@qq.com -p tcha-fzfe-jcmd-tken
else
echo "請輸入你要發(fā)布的平臺 ? [ 1:fir 2:蒲公英] "
##
read platform
while([[ $platform != 1 ]] && [[ $platform != 2 ]])
do
echo "笨蛋跃赚,只能輸入 1 or 2"
echo "請輸入你要發(fā)布的平臺 ? [ 1:fir 2:蒲公英] "
read platform
done
if [ $platform == 1 ];
then
#上傳到Fir
# 將XXX替換成自己的Fir平臺的token
fir login -T d58c5754d2aff40b4d883ddfefa0d079
fir publish $exportIpaPath/$scheme_name.ipa
else
echo "開始上傳到蒲公英"
#上傳到蒲公英
#蒲公英aipKey
MY_PGY_API_K=3820ab3ad13099f28775f203b45cc8d7
#蒲公英uKey
MY_PGY_UK=45c0b76527e81687b93e0e4c35c9d994
curl -F "file=@${exportIpaPath}/${scheme_name}.ipa" -F "uKey=${MY_PGY_UK}" -F "_api_key=${MY_PGY_API_K}" https://upload.pgyer.com/apiv1/app/upload
fi
fi
echo "\n\n"
echo "已運(yùn)行完畢>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
exit 0
exportAppstore.plist
和exportTest.plist
文件配置
測試包配置如下:(這里顯示的是手動打包)
provisioningProfiles
字典中的值是項(xiàng)目的bundle id
以及對應(yīng)描述文件的名字(這個(gè)名字就是我們在生成描述文件我們自己命名的名字), 配置該文件有一個(gè)取巧的方法, 直接使用Xcode
打包, 之后直接導(dǎo)出ipa
即可得到一份該文件, 如下圖所示:
個(gè)人建議不管你是手動管理證書還是自動管理證書都先使用Xcode
打包, 之后直接導(dǎo)出或者copy
一份里面的ExportOptions.plist
文件之后再改下名字即可
一般出錯(cuò)的話都是由于
plist
文件里面證書配置有問題纬傲,所以還是建議使用XCode
自動生成的
如果遇到create xxx build xxx 錯(cuò)誤
可以先項(xiàng)目里面生成的build
文件刪除即可
常見錯(cuò)誤解答