93 lines
3.3 KiB
Bash
93 lines
3.3 KiB
Bash
#!/bin/bash
|
||
set -e # 脚本执行过程中若有命令失败则立即退出
|
||
|
||
# ==============================================
|
||
# 颜色定义
|
||
# ==============================================
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # 无颜色(重置)
|
||
|
||
# ==============================================
|
||
# 配置变量 - 根据实际情况修改以下参数
|
||
# ==============================================
|
||
API_KEY="ACRB9XFL9G" # App Store Connect API 密钥ID
|
||
API_ISSUER="69a6de7f-3378-47e3-e053-5b8c7c11a4d1" # API 密钥对应的Issuer ID
|
||
IPA_PATH="$HOME/Desktop/lx_uniapp/build/ipa_production/HBuilder.ipa" # IPA文件路径
|
||
APP_TYPE="ios" # 应用类型(固定为ios)
|
||
|
||
# ==============================================
|
||
# 验证IPA文件是否存在
|
||
# ==============================================
|
||
if [ ! -f "$IPA_PATH" ]; then
|
||
echo -e "${RED}❌ 错误:未找到IPA文件,请检查路径是否正确${NC}"
|
||
echo -e " 查找路径:$IPA_PATH"
|
||
exit 1
|
||
fi
|
||
# ==============================================
|
||
# 1. 验证IPA文件合法性
|
||
# ==============================================
|
||
echo -e "\n${YELLOW}📋 开始验证IPA文件...${NC}"
|
||
echo -e " 文件路径:$IPA_PATH"
|
||
|
||
# 创建临时文件保存输出
|
||
TMP_FILE=$(mktemp)
|
||
|
||
# 执行验证命令,直接输出到终端,同时重定向到临时文件
|
||
xcrun altool --validate-app \
|
||
--type "$APP_TYPE" \
|
||
--file "$IPA_PATH" \
|
||
--apiKey "$API_KEY" \
|
||
--apiIssuer "$API_ISSUER" > "$TMP_FILE" 2>&1
|
||
# 直接打印临时文件内容(确保错误信息显示)
|
||
cat "$TMP_FILE"
|
||
|
||
# 获取退出码
|
||
VALIDATE_EXIT_CODE=$?
|
||
|
||
# 从临时文件读取内容用于分析
|
||
VALIDATE_OUTPUT=$(cat "$TMP_FILE")
|
||
rm "$TMP_FILE" # 清理临时文件
|
||
|
||
# 验证结果处理
|
||
if [ $VALIDATE_EXIT_CODE -eq 0 ]; then
|
||
echo -e "${GREEN}✅ IPA文件验证成功,符合上传要求${NC}"
|
||
else
|
||
# 检查是否是版本号重复错误
|
||
if echo "$VALIDATE_OUTPUT" | grep -q "The bundle version must be higher than the previously uploaded version"; then
|
||
# 提取之前的版本号
|
||
PREVIOUS_VERSION=$(echo "$VALIDATE_OUTPUT" | grep -oE 'previousBundleVersion = [0-9]+' | awk '{print $3}')
|
||
if [ -z "$PREVIOUS_VERSION" ]; then
|
||
PREVIOUS_VERSION=$(echo "$VALIDATE_OUTPUT" | grep -oE 'version: ‘[0-9]+’' | sed "s/version: ‘//;s/’//")
|
||
fi
|
||
|
||
echo -e "${RED}❌ 错误:版本号重复${NC}"
|
||
echo -e "${RED} 已上传的最新版本号为: $PREVIOUS_VERSION${NC}"
|
||
echo -e "${RED} 请将版本号修改为 $((PREVIOUS_VERSION + 1)) 或更高后重试${NC}"
|
||
else
|
||
echo -e "${RED}❌ IPA文件验证失败,请查看上方错误信息${NC}"
|
||
fi
|
||
exit $VALIDATE_EXIT_CODE
|
||
fi
|
||
# ==============================================
|
||
# 2. 上传IPA文件到App Store Connect
|
||
# ==============================================
|
||
echo -e "\n${YELLOW}🚀 开始上传IPA文件...${NC}"
|
||
echo -e " 文件路径:$IPA_PATH"
|
||
|
||
xcrun altool --upload-app \
|
||
--type "$APP_TYPE" \
|
||
--file "$IPA_PATH" \
|
||
--apiKey "$API_KEY" \
|
||
--apiIssuer "$API_ISSUER"
|
||
|
||
# 上传成功提示
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "\n${GREEN}🎉 上传成功!可在App Store Connect中查看构建版本${NC}"
|
||
echo -e " 提示:构建版本处理需要几分钟,请耐心等待"
|
||
else
|
||
echo -e "\n${RED}❌ 上传失败,请根据错误信息修复后重试${NC}"
|
||
exit 1
|
||
fi
|