#!/bin/bash # Source the environment variables set -a source .env.prod set +a # Print debug information echo "Debug information:" echo "ASC_API_KEY_ID: $ASC_API_KEY_ID" echo "ASC_API_ISSUER_ID: $ASC_API_ISSUER_ID" echo "ASC_API_KEY_PATH: $ASC_API_KEY_PATH" # Verify versions before upload to prevent stale IPA submission SOURCE_PLIST="ios/AlerteSecours/Info.plist" ARCHIVE_PLIST="ios/AlerteSecours.xcarchive/Products/Applications/AlerteSecours.app/Info.plist" IPA_PATH="ios/build/AlerteSecours.ipa" if [ ! -f "$SOURCE_PLIST" ]; then echo "Error: Source Info.plist not found at $SOURCE_PLIST" exit 1 fi if [ ! -f "$ARCHIVE_PLIST" ]; then echo "Error: Archive Info.plist not found at $ARCHIVE_PLIST" echo "Hint: Run 'yarn bundle:ios' to create a fresh archive and export." exit 1 fi SRC_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$SOURCE_PLIST") SRC_BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$SOURCE_PLIST") ARC_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$ARCHIVE_PLIST") ARC_BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$ARCHIVE_PLIST") echo "Version check:" echo " Source Info.plist : $SRC_PKG_VERSION ($SRC_BUILD_NUMBER)" echo " Archive Info.plist : $ARC_PKG_VERSION ($ARC_BUILD_NUMBER)" if [ "$SRC_PKG_VERSION" != "$ARC_PKG_VERSION" ] || [ "$SRC_BUILD_NUMBER" != "$ARC_BUILD_NUMBER" ]; then echo "Error: Archive version mismatch with source Info.plist." echo "Hint: Run 'yarn bundle:ios' to rebuild with the correct versions." exit 1 fi if [ ! -f "$IPA_PATH" ]; then echo "Error: IPA not found at $IPA_PATH" echo "Hint: Run 'yarn bundle:ios' to export a fresh IPA." exit 1 fi # Attempt to read CFBundleShortVersionString and CFBundleVersion from the IPA for extra safety IPA_PLIST_TMP=$(mktemp -t as_ipa_Info.plist) unzip -p "$IPA_PATH" "Payload/AlerteSecours.app/Info.plist" > "$IPA_PLIST_TMP" 2>/dev/null || true if [ -s "$IPA_PLIST_TMP" ]; then IPA_PKG_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$IPA_PLIST_TMP" 2>/dev/null || echo "") IPA_BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$IPA_PLIST_TMP" 2>/dev/null || echo "") echo " IPA Info.plist (from payload): ${IPA_PKG_VERSION:-unknown} (${IPA_BUILD_NUMBER:-unknown})" if [ -n "$IPA_PKG_VERSION" ] && [ -n "$IPA_BUILD_NUMBER" ]; then if [ "$SRC_PKG_VERSION" != "$IPA_PKG_VERSION" ] || [ "$SRC_BUILD_NUMBER" != "$IPA_BUILD_NUMBER" ]; then echo "Error: IPA version mismatch with source Info.plist." echo "Hint: Run 'yarn bundle:ios' to export a fresh IPA aligned with current versions." rm -f "$IPA_PLIST_TMP" exit 1 fi fi else echo "Warning: Could not read Info.plist from IPA payload for verification. Continuing." fi rm -f "$IPA_PLIST_TMP" # Execute upload using xcrun altool with App Store Connect API key echo "Uploading to App Store Connect using xcrun altool..." # Use altool with API key authentication xcrun altool --upload-app \ --type ios \ --file "$IPA_PATH" \ --apiKey "$ASC_API_KEY_ID" \ --apiIssuer "$ASC_API_ISSUER_ID" \ --verbose if [ $? -eq 0 ]; then echo "✅ Successfully uploaded IPA to App Store Connect!" echo "The build will be available in TestFlight once processing is complete." else echo "❌ Upload failed. Check the error messages above." exit 1 fi