自动化流程完成 打包 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.shfor 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/Fr