自动化流程完成打包 IPA 到 上传 AppStore(部分)

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

  

posted @   lesten  阅读(1117)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示