#!/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