#!/usr/bin/env bash # 一键发布 TestFlight:archive → export → 上传 App Store Connect # 用法: # ./scripts/release-testflight.sh # 用当前 build 号 # BUMP=1 ./scripts/release-testflight.sh # 自动递增 build 号后再发布 # 认证:依赖 Xcode 已登录的 Apple ID(Xcode → Settings → Accounts) set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PROJECT="${PROJECT:-$ROOT_DIR/康康.xcodeproj}" SCHEME="${SCHEME:-康康}" CONFIGURATION="${CONFIGURATION:-Release}" BUILD_DIR="$ROOT_DIR/build/Release" ARCHIVE_PATH="$BUILD_DIR/${SCHEME}.xcarchive" EXPORT_PATH="$BUILD_DIR/export" EXPORT_PLIST="$BUILD_DIR/ExportOptions.plist" TEAM_ID="${TEAM_ID:-F2C8C774FG}" require_full_xcode() { local developer_dir developer_dir="$(xcode-select -p 2>/dev/null || true)" if [[ "$developer_dir" != *"/Xcode.app/Contents/Developer"* ]]; then cat >&2 <} 请先执行: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer EOF exit 1 fi } require_full_xcode mkdir -p "$BUILD_DIR" # 可选:递增 build 号 if [[ "${BUMP:-0}" == "1" ]]; then CURRENT=$(sed -n 's/.*CURRENT_PROJECT_VERSION = \([0-9]*\);.*/\1/p' "$PROJECT/project.pbxproj" | head -1) NEXT=$((CURRENT + 1)) sed -i '' "s/CURRENT_PROJECT_VERSION = $CURRENT;/CURRENT_PROJECT_VERSION = $NEXT;/g" "$PROJECT/project.pbxproj" echo "==> Build 号: $CURRENT → $NEXT" fi BUILD_NUM=$(sed -n 's/.*CURRENT_PROJECT_VERSION = \([0-9]*\);.*/\1/p' "$PROJECT/project.pbxproj" | head -1) VERSION=$(sed -n 's/.*MARKETING_VERSION = \([0-9.]*\);.*/\1/p' "$PROJECT/project.pbxproj" | head -1) echo "==> 发布 v$VERSION ($BUILD_NUM)" echo "==> [1/3] Archive..." rm -rf "$ARCHIVE_PATH" xcodebuild archive \ -project "$PROJECT" \ -scheme "$SCHEME" \ -configuration "$CONFIGURATION" \ -destination 'generic/platform=iOS' \ -archivePath "$ARCHIVE_PATH" \ -allowProvisioningUpdates echo "==> [2/3] 生成 ExportOptions.plist..." cat > "$EXPORT_PLIST" < method app-store-connect destination upload teamID $TEAM_ID uploadSymbols manageAppVersionAndBuildNumber EOF echo "==> [3/3] Export 并上传 App Store Connect..." rm -rf "$EXPORT_PATH" xcodebuild -exportArchive \ -archivePath "$ARCHIVE_PATH" \ -exportOptionsPlist "$EXPORT_PLIST" \ -exportPath "$EXPORT_PATH" \ -allowProvisioningUpdates echo "" echo "✅ v$VERSION ($BUILD_NUM) 已上传。App Store Connect 处理完成后(约 5-15 分钟)即可在 TestFlight 分发。" echo " https://appstoreconnect.apple.com/apps"