閑話不說裙秋,直接來干貨牺堰。
內(nèi)容概況
1.shell 打包導出ipa 包,自動上傳 App Store搅裙、蒲公英皱卓、Fir等
今日親測驗證 xcode11 下,App Store上傳成功部逮,蒲公英上傳成功復制代碼
2.準備工作
腳本文件娜汁、檢測證書匹配性 拿到需要用到的各平臺參數(shù)復制代碼
3.打包過程中遇到的問題及解決方案
針對xcode10和xcode11出來的一些問題的特別說明其他問題復制代碼
4.參考文獻
之前收藏的幾篇不錯的博客,供大家一起分享學習甥啄。復制代碼
5.延續(xù)看圖說話的方式進行分享存炮。
操作步驟
涉及到的文件有3個:
腳本文件:https://github.com/kepuna/archiveScript
將這3個文件放到工程內(nèi),具體安放位置見下圖:
其中exportAppStore.plist 也做了相應的修改,具體見圖:
exportTest.plist 具體內(nèi)容見圖:
備注一下:我在:https://github.com/kepuna/archiveScript?這個基礎上進行了改造穆桂,需要注意的點都進行了詳細的備注宫盔,改造內(nèi)容如下:
#使用方法
if[ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi
#工程絕對路徑
project_path=$(cd`dirname $0`;pwd)
#工程名 將XXX替換成自己的工程名
project_name= XXX
#scheme名 將XXX替換成自己的sheme名
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] "
##
readnumber
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] "
readnumber
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 '///-----------'
?# UseModernBuildSystem 編譯模式,NO 采用傳統(tǒng)的(legacy build system)享完,YES采用現(xiàn)在的(new build system)
?# 工程里面有pod 使用 archive -workspace ${project_path}/${project_name}.xcworkspace
?# 工程里面沒有pod 使用? archive -project ${project_name}.xcodeproj
xcodebuild \
-UseModernBuildSystem=NO \
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
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
#驗證并上傳到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 "XXXXXXXXX" -p "XXXXXXX" -t ios --output-format xml
#"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u? "XXXXXXX" -p "XXXXXXX" -t ios --output-format xml
# 驗證并上傳到APP Store? xcode11之后方法? 驗證成功
# apiKey apiIssuer? 蘋果后臺找? 下面用XXXXX 代替
xcrun altool --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -t ios --apiKey"XXXXX"--apiIssuer"XXXXXXXXXX-XXXXX-XXXXX-XXXXX-XXXXXXXXXX"--verbose
xcrun altool --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -t ios --apiKey"XXXXX"--apiIssuer"XXXXXXXXXX-XXXXX-XXXXX-XXXXX-XXXXXXXXXX"--verbose
else
##上傳到Fir? 沒有進行實名認證,暫不驗證
## 將XXX替換成自己的Fir平臺的token
#fir login -T XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#fir publish $exportIpaPath/$scheme_name.ipa
#上傳蒲公英? 成功驗證
#uKey? _api_key 將用XXXXX代替般又,在蒲公英里面找
echo '/+++++++ 上傳蒲公英 +++++++/'
curl -F"file=@$exportIpaPath/$scheme_name.ipa"\
-F "uKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-F "_api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
https://qiniu-storage.pgyer.com/apiv1/app/upload
append_path="已上傳到蒲公英"
mv $exportIpaPath $exportIpaPath$append_path
echo '/+++++++ 成功上傳到蒲公英 +++++++/'
fi
exit 0
補充:運行shell腳本:
需要特別提醒的地方
1.編譯模式
2.工程中是否有pod
3.上傳App Store的時候彼绷,注意xcode11 前后的命令不同
4.關于兩個plist中需要注意的地方
5.操作完一次,我們工程里面跟我們導入的3個文件同路徑下會生成2個文件茴迁,再下次再進行打包前需要刪掉寄悯,否則clean不成功,也就不會繼續(xù)打包了堕义。
如果你的工程編譯方式使用的是legacy build system 這種方式猜旬,那么我們需要做下面的操作,因為我們打包的時候倦卖,這里默認是new build system洒擦。
xcode11之后,我們打包的時候怕膛,需要使用密鑰熟嫩,這個過程中多了2個參數(shù),同時還需要一個文件作為必備條件褐捻,我們這2個參數(shù)和文件的來源掸茅,見下圖:
蒲公英打包的時候,需要用到的2個參數(shù)來源舍扰,見下圖:
常出現(xiàn)的一些報錯問題倦蚪,列舉幾個典型的。尤其是xcode11的問題
1.由編譯模式問題引起的問題边苹,解決方法上面截圖已寫
ld: library not found for -lAFNetworking clang: error: linker command failed with exit code 1 (use -v to see invocation)
2.xcode11 打包的時候,在沒有正確存放.private_keys 文件時候裁僧,會報下面錯誤
Could not find private key file: AuthKey_5ZGKY5BF7J.p8, in any of the following locations. ./private_keys or /private_keys or /.private_keys or /.appstoreconnect/private_keys 以下任何位置找不到私鑰文件:AuthKey_XXXXX.p8个束。
./private_keys或<用戶主目錄> / private_keys或<用戶主目錄> /。private_keys或<用戶主目錄> /聊疲。appstoreconnect / private_keys
Could not find private key file: AuthKey_4PBMS86V4B.p8, in any of the following locations.
這個問題的具體解決方案上面已經(jīng)截圖了茬底,這次再發(fā)一遍。這塊容易出錯获洲。
補充:隱藏文件.private_keys 需要注意的點: 如果我們的根目錄阱表,沒有顯示出隱藏文件,那么我們可以使用下面兩種方式讓其顯示根目錄。
第一種:
在 macOS Sierra及以上(Mojave)最爬,我們可以使用快捷鍵 ??.(Command + Shift + .) 來快速(在 Finder 中)顯示和隱藏隱藏文件了涉馁。
第二種:
在終端使用:
//顯示隱藏文件defaults write com.apple.finder AppleShowAllFiles -booltrue
//不顯示隱藏文件defaults write com.apple.finder AppleShowAllFiles -boolfalse
最后需要重啟Finder:
重啟Finder:窗口左上角的蘋果標志-->強制退出-->Finder-->重新啟動
顯示隱藏文件之后,我們就可以在根目錄進行創(chuàng)建.private_keys 文件了爱致。
3.證書相關問題 這個具體問題需要具體分析烤送,保證 證書匹配就好了
成功上傳蒲同英
不錯的一些博客分享,這里有自動打包過程中遇到的其他問題糠悯,我們可以參考學習
http://www.cocoachina.com/articles/26201
掘金中的 daisyduan 也是我啊 帮坚,??
https://juejin.im/post/5e0373dd6fb9a01627128e2e
https://juejin.im/post/5e03370f6fb9a01633075326
https://juejin.im/post/5e05fbfe6fb9a0163514e9e9