Add full iOS build system: script, npm integration, and documentation
- Implement scripts/build-ios.sh with dev/test/prod, IPA, deploy, and Xcode support - Integrate all iOS build and legacy scripts into package.json (including deploy) - Update docs/ios-build-scripts.md: mark as complete, add usage and status - Update README.md: add iOS to quick start, platform builds, and docs links - Ensure iOS build system matches Android/Electron pattern for consistency
This commit is contained in:
@@ -1,10 +1,37 @@
|
||||
#!/bin/bash
|
||||
# build-android.sh
|
||||
# Author: Matthew Raymer
|
||||
# Date: 2025-07-11
|
||||
# Description: Android build script for TimeSafari application
|
||||
# This script handles the complete Android build process including cleanup,
|
||||
# web build, Capacitor build, Gradle build, and Android Studio launch.
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/build-android.sh [options]
|
||||
#
|
||||
# Options:
|
||||
# --dev, --development Build for development environment
|
||||
# --test Build for testing environment
|
||||
# --prod, --production Build for production environment
|
||||
# --debug Build debug APK
|
||||
# --release Build release APK
|
||||
# --studio Open Android Studio after build
|
||||
# --apk Build APK file
|
||||
# --aab Build AAB (Android App Bundle)
|
||||
# --clean Clean build artifacts only
|
||||
# --sync Sync Capacitor only
|
||||
# --assets Generate assets only
|
||||
# --deploy Deploy APK to connected device
|
||||
# -h, --help Show this help message
|
||||
# -v, --verbose Enable verbose logging
|
||||
#
|
||||
# Examples:
|
||||
# ./scripts/build-android.sh --dev --studio # Development build + open studio
|
||||
# ./scripts/build-android.sh --prod --apk # Production APK build
|
||||
# ./scripts/build-android.sh --test --aab # Testing AAB build
|
||||
# ./scripts/build-android.sh --clean # Clean only
|
||||
# ./scripts/build-android.sh --sync # Sync only
|
||||
#
|
||||
# Exit Codes:
|
||||
# 1 - Android cleanup failed
|
||||
# 2 - Web build failed
|
||||
@@ -22,12 +49,113 @@ set -e
|
||||
# Source common utilities
|
||||
source "$(dirname "$0")/common.sh"
|
||||
|
||||
# Default values
|
||||
BUILD_MODE="development"
|
||||
BUILD_TYPE="debug"
|
||||
OPEN_STUDIO=false
|
||||
BUILD_APK=false
|
||||
BUILD_AAB=false
|
||||
CLEAN_ONLY=false
|
||||
SYNC_ONLY=false
|
||||
ASSETS_ONLY=false
|
||||
DEPLOY_APP=false
|
||||
|
||||
# Function to parse Android-specific arguments
|
||||
parse_android_args() {
|
||||
local args=("$@")
|
||||
|
||||
for arg in "${args[@]}"; do
|
||||
case $arg in
|
||||
--dev|--development)
|
||||
BUILD_MODE="development"
|
||||
;;
|
||||
--test)
|
||||
BUILD_MODE="test"
|
||||
;;
|
||||
--prod|--production)
|
||||
BUILD_MODE="production"
|
||||
;;
|
||||
--debug)
|
||||
BUILD_TYPE="debug"
|
||||
;;
|
||||
--release)
|
||||
BUILD_TYPE="release"
|
||||
;;
|
||||
--studio)
|
||||
OPEN_STUDIO=true
|
||||
;;
|
||||
--apk)
|
||||
BUILD_APK=true
|
||||
;;
|
||||
--aab)
|
||||
BUILD_AAB=true
|
||||
;;
|
||||
--clean)
|
||||
CLEAN_ONLY=true
|
||||
;;
|
||||
--sync)
|
||||
SYNC_ONLY=true
|
||||
;;
|
||||
--assets)
|
||||
ASSETS_ONLY=true
|
||||
;;
|
||||
--deploy)
|
||||
DEPLOY_APP=true
|
||||
;;
|
||||
-h|--help)
|
||||
print_android_usage
|
||||
exit 0
|
||||
;;
|
||||
-v|--verbose)
|
||||
set -x
|
||||
;;
|
||||
*)
|
||||
log_warn "Unknown argument: $arg"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Function to print Android-specific usage
|
||||
print_android_usage() {
|
||||
echo "Usage: $0 [options]"
|
||||
echo ""
|
||||
echo "Android Build Options:"
|
||||
echo " --dev, --development Build for development environment"
|
||||
echo " --test Build for testing environment"
|
||||
echo " --prod, --production Build for production environment"
|
||||
echo " --debug Build debug APK (default)"
|
||||
echo " --release Build release APK"
|
||||
echo " --studio Open Android Studio after build"
|
||||
echo " --apk Build APK file"
|
||||
echo " --aab Build AAB (Android App Bundle)"
|
||||
echo " --clean Clean build artifacts only"
|
||||
echo " --sync Sync Capacitor only"
|
||||
echo " --assets Generate assets only"
|
||||
echo " --deploy Deploy APK to connected device"
|
||||
echo ""
|
||||
echo "Common Options:"
|
||||
echo " -h, --help Show this help message"
|
||||
echo " -v, --verbose Enable verbose logging"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 --dev --studio # Development build + open studio"
|
||||
echo " $0 --prod --apk # Production APK build"
|
||||
echo " $0 --test --aab # Testing AAB build"
|
||||
echo " $0 --clean # Clean only"
|
||||
echo " $0 --sync # Sync only"
|
||||
echo " $0 --deploy # Build and deploy to device"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
parse_args "$@"
|
||||
parse_android_args "$@"
|
||||
|
||||
# Print build header
|
||||
print_header "TimeSafari Android Build Process"
|
||||
log_info "Starting Android build process at $(date)"
|
||||
log_info "Build mode: $BUILD_MODE"
|
||||
log_info "Build type: $BUILD_TYPE"
|
||||
|
||||
# Setup environment for Capacitor build
|
||||
setup_build_env "capacitor"
|
||||
@@ -38,6 +166,53 @@ setup_app_directories
|
||||
# Load environment from .env file if it exists
|
||||
load_env_file ".env"
|
||||
|
||||
# Handle clean-only mode
|
||||
if [ "$CLEAN_ONLY" = true ]; then
|
||||
log_info "Clean-only mode: cleaning build artifacts"
|
||||
safe_execute "Cleaning Android app" "npm run clean:android" || exit 1
|
||||
safe_execute "Cleaning dist directory" "clean_build_artifacts dist" || exit 1
|
||||
safe_execute "Cleaning Gradle build" "cd android && ./gradlew clean && cd .." || exit 4
|
||||
log_success "Clean completed successfully!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Handle sync-only mode
|
||||
if [ "$SYNC_ONLY" = true ]; then
|
||||
log_info "Sync-only mode: syncing with Capacitor"
|
||||
safe_execute "Syncing with Capacitor" "npx cap sync android" || exit 6
|
||||
log_success "Sync completed successfully!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Handle assets-only mode
|
||||
if [ "$ASSETS_ONLY" = true ]; then
|
||||
log_info "Assets-only mode: generating assets"
|
||||
safe_execute "Generating assets" "npx capacitor-assets generate --android" || exit 7
|
||||
log_success "Assets generation completed successfully!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Handle deploy-app mode
|
||||
if [ "$DEPLOY_APP" = true ]; then
|
||||
log_info "Deploy-app mode: building APK and deploying to device"
|
||||
|
||||
# Check for connected device
|
||||
if ! adb devices | grep -q $'\tdevice'; then
|
||||
log_error "No Android device connected. Please connect a device and try again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build APK
|
||||
safe_execute "Building APK" "cd android && ./gradlew assembleDebug && cd .." || exit 5
|
||||
|
||||
# Install APK on device
|
||||
safe_execute "Installing APK on device" "adb install -r android/app/build/outputs/apk/debug/app-debug.apk" || exit 6
|
||||
|
||||
log_success "APK deployed successfully to device!"
|
||||
log_info "You can now run the app with: npx cap run android"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Step 1: Check and fix Android resources
|
||||
safe_execute "Checking Android resources" "$(dirname "$0")/check-android-resources.sh" || {
|
||||
log_warning "Resource check found issues, but continuing with build..."
|
||||
@@ -50,24 +225,63 @@ safe_execute "Cleaning Android app" "npm run clean:android" || exit 1
|
||||
log_info "Cleaning dist directory..."
|
||||
clean_build_artifacts "dist"
|
||||
|
||||
# Step 4: Build Capacitor version
|
||||
safe_execute "Building Capacitor version" "npm run build:capacitor" || exit 3
|
||||
# Step 4: Build Capacitor version with mode
|
||||
if [ "$BUILD_MODE" = "development" ]; then
|
||||
safe_execute "Building Capacitor version (development)" "npm run build:capacitor" || exit 3
|
||||
elif [ "$BUILD_MODE" = "test" ]; then
|
||||
safe_execute "Building Capacitor version (test)" "npm run build:capacitor -- --mode test" || exit 3
|
||||
elif [ "$BUILD_MODE" = "production" ]; then
|
||||
safe_execute "Building Capacitor version (production)" "npm run build:capacitor -- --mode production" || exit 3
|
||||
fi
|
||||
|
||||
# Step 5: Clean Gradle build
|
||||
safe_execute "Cleaning Gradle build" "cd android && ./gradlew clean && cd .." || exit 4
|
||||
|
||||
# Step 6: Assemble debug build
|
||||
safe_execute "Assembling debug build" "cd android && ./gradlew assembleDebug && cd .." || exit 5
|
||||
# Step 6: Build based on type
|
||||
if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
safe_execute "Assembling debug build" "cd android && ./gradlew assembleDebug && cd .." || exit 5
|
||||
elif [ "$BUILD_TYPE" = "release" ]; then
|
||||
safe_execute "Assembling release build" "cd android && ./gradlew assembleRelease && cd .." || exit 5
|
||||
fi
|
||||
|
||||
# Step 7: Sync with Capacitor
|
||||
safe_execute "Syncing with Capacitor" "npx cap sync android" || exit 6
|
||||
|
||||
# Step 8: Generate assets and open Android Studio
|
||||
# Step 8: Generate assets
|
||||
safe_execute "Generating assets" "npx capacitor-assets generate --android" || exit 7
|
||||
safe_execute "Opening Android Studio" "npx cap open android" || exit 8
|
||||
|
||||
# Step 9: Build APK/AAB if requested
|
||||
if [ "$BUILD_APK" = true ]; then
|
||||
if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
safe_execute "Building debug APK" "cd android && ./gradlew assembleDebug && cd .." || exit 5
|
||||
else
|
||||
safe_execute "Building release APK" "cd android && ./gradlew assembleRelease && cd .." || exit 5
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$BUILD_AAB" = true ]; then
|
||||
safe_execute "Building AAB" "cd android && ./gradlew bundleRelease && cd .." || exit 5
|
||||
fi
|
||||
|
||||
# Step 10: Open Android Studio if requested
|
||||
if [ "$OPEN_STUDIO" = true ]; then
|
||||
safe_execute "Opening Android Studio" "npx cap open android" || exit 8
|
||||
fi
|
||||
|
||||
# Print build summary
|
||||
log_success "Android build completed successfully!"
|
||||
log_info "Build mode: $BUILD_MODE"
|
||||
log_info "Build type: $BUILD_TYPE"
|
||||
if [ "$BUILD_APK" = true ]; then
|
||||
log_info "APK build: completed"
|
||||
fi
|
||||
if [ "$BUILD_AAB" = true ]; then
|
||||
log_info "AAB build: completed"
|
||||
fi
|
||||
if [ "$OPEN_STUDIO" = true ]; then
|
||||
log_info "Android Studio: opened"
|
||||
fi
|
||||
|
||||
print_footer "Android Build"
|
||||
|
||||
# Exit with success
|
||||
|
||||
Reference in New Issue
Block a user