自動化流程完成 打包 IPA 到 上傳 AppStore 需要哪幾部呢?
第一步: 證書生成、導入
第二步: App 創建、填寫相關信息,上傳相關文件
第三步: 自動化打包 IPA
第四步: 自動化重簽名
第五步: 自動化上傳 App Store
第四步的部分在這里 自動化重簽名 (重簽名踩坑)
本篇文章目前實現
第五步 上傳 App 到 AppStore
當你有了 *.app 之后 你要怎么上傳到蘋果后台呢?
第一步、創建 *.itmsp 其實就是一個文件夾
第二步、在*.itmsp 中創建 *.metadata 文件 其實是一個 xml文件。內容如下 其中
__APPID__,__FILESIZE__,__FILENAME__,__MD5SIGN__ 分別對應包的應用id(注意是蘋果的一串數字id不是BundleId),Ipa包的大小,Ipa包的文件名,Ipa包的md5簽名.
XML 文件內容
<?xml version="1.0" encoding="UTF-8"?> <package xmlns="http://apple.com/itunes/importer" version="software5.4"> <software_assets apple_id="__APPID__" app_platform="ios"> <asset type="bundle"> <data_file> <size>__FILESIZE__</size> <file_name>__FILENAME__</file_name> <checksum type="md5">__MD5SIGN__</checksum> </data_file> </asset> </software_assets> </package>
第三步、拷貝 *.ipa 到 *.itmsp 中.名字要與xml中的名字對應
第四步、 上傳
xcrun iTMSTransporter -m upload -u $USERNAME -p $PASSWORD -f ${IPAppath}/$itmspDir -t "DAV,Signiant" -k 100000 2>&1
可能你 一個應用下 有多個證書,那么你還要指定證書
-itc_provider $PRO_NAME 其中 $PRO_NAME 你可以通過 security cms -D -i embedded.mobileprovision > plistfile PRO_NAME=`/usr/libexec/PlistBuddy -c 'Print :TeamName' plistfile` 獲得。
我的參考:
#!/bin/bash # set -x run_path=$(cd `dirname $0`; pwd) cd $run_path XMLTemplate=$run_path/XMLTemplate.xml #就是上面的xml文件 IPApath=$1 APPID=$2 USERNAME=$3 PASSWORD=$4 IPAppath=${IPApath%/*} PROXY="" #批量上傳最好用代理 GAMENAME="" if [ -z $USERNAME ]; then pushd $IPAppath if [ ! -d $IPAppath/upload ]; then confzip=`ls *_config.zip` if [ ! -z $confzip ]; then unzip -oq $confzip -d upload fi fi pushd $IPAppath/upload USERNAME=`cat gameinfo.txt| grep username` USERNAME=${USERNAME##*\=} PASSWORD=`cat gameinfo.txt| grep password` PASSWORD=${PASSWORD##*\=} if [ -z $APPID ]; then APPID=`cat gameinfo.txt| grep appId` APPID=${APPID##*\=} fi PROXY=`cat gameinfo.txt| grep proxyaddr` PROXY=${PROXY##*\=} GAMENAME=`cat setting.sh| grep GameName` GAMENAME=${GAMENAME##*\=} popd popd fi if [ -z $APPID ]; then echo $GAMENAME echo "這個游戲沒有找到appId!!! " >> UploadResult.txt echo "這個游戲沒有找到appId!!! " >> ${IPAppath}/UploadResult.txt exit 1; fi function get_char() { SAVEDSTTY=`stty -g` stty -echo stty cbreak dd if=/dev/tty bs=1 count=1 2> /dev/null stty -raw stty echo stty $SAVEDSTTY } function pause() { if [ x"$1" != x"" ]; then echo $1 fi char=`get_char` } # PROXY="" if [ -z "$PROXY" ]; then echo $GAMENAME" 該游戲沒有獲取到 代理 線路!" exit 1; else echo $PROXY echo "請切換代理,然后按任意鍵繼續!!!" fi pause # exit 1; MD5sign=$(md5 $IPApath | awk '{print $4}') FILEsize=$(ls -l $IPApath | awk '{print $5}') IPAname=$(openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 6).ipa itmspDir=$(openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 4).itmsp xmlF=${IPAppath}/$itmspDir/metadata.xml if [ -d ${IPAppath}/$itmspDir ]; then rm -rf ${IPAppath}/$itmspDir fi mkdir ${IPAppath}/$itmspDir # echo -e $XMLTemplate > $xmlF # exit 1; cp $XMLTemplate $xmlF sed -i "" "s/__APPID__/$APPID/" $xmlF sed -i "" "s/__MD5SIGN__/$MD5sign/" $xmlF sed -i "" "s/__FILESIZE__/$FILEsize/" $xmlF sed -i "" "s/__FILENAME__/$IPAname/" $xmlF cp -Xr $IPApath ${IPAppath}/$itmspDir/$IPAname # exit 1; # xcrun iTMSTransporter -m upload -u $USERNAME -p $PASSWORD -f /Users/lestenlee/Documents/work/AutoBuildOutput/output20200703/20200703-221949/1521965964.itmsp -t "DAV,Signiant" -k 100000 -itc_provider 428RW85NQM 2>&1 echo "開始上傳游戲 => "$GAMENAME xcrun iTMSTransporter -m upload -u $USERNAME -p $PASSWORD -f ${IPAppath}/$itmspDir -t "DAV,Signiant" -k 100000 2>&1 upload_ret=$? echo $GAMENAME" 上傳結果 => "$upload_ret echo $GAMENAME" 上傳結果 => "$upload_ret >> UploadResult.txt echo "上傳結果 => "$upload_ret >> ${IPAppath}/UploadResult.txt
批量上傳:
#!/bin/bash run_path=$(cd `dirname $0`; pwd) cd $run_path chmod u+x $run_path/autoUpload.sh for file in $run_path/output/* do if ! test -f $file; then pushd $file ipaf=`ls $file/*resigned.ipa` if [ ! -z $ipaf ]; then $run_path/autoUpload.sh $ipaf fi popd fi done
記錄下上傳 AppStore 的問題
在xcode11之后, 使用 altool 上傳就不行了 可能是我 方式有問題 嘗試了很多次始終 卡死狀態。 所以以上我用的 xcrun 帶的工具 Xcode 11 里面的
altool --upload-app -f ipa的存放路徑 -t 平台(ios) -u 開發者賬號 -p 開發者賬號對應的密碼
在xcode11之前
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
在xcode11之后
/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Versions/A/Frameworks/AppStoreService.framework/Versions/A/Support/altool
