#!/bin/bash # Complete Build Script - Build Everything from Console # Builds plugin, iOS app, Android app, and all dependencies # # Usage: # ./scripts/build-all.sh [platform] # Platform options: ios, android, all (default: all) # # @author Matthew Raymer # @version 1.0.0 set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_step() { echo -e "${BLUE}[STEP]${NC} $1" } # Get script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # Parse arguments PLATFORM="${1:-all}" # Validate platform if [[ ! "$PLATFORM" =~ ^(ios|android|all)$ ]]; then log_error "Invalid platform: $PLATFORM" log_info "Usage: $0 [ios|android|all]" exit 1 fi cd "$PROJECT_ROOT" log_info "==========================================" log_info "Complete Build Script" log_info "Platform: $PLATFORM" log_info "==========================================" log_info "" # Build TypeScript and plugin code log_step "Building plugin (TypeScript + Native)..." if ! ./scripts/build-native.sh --platform "$PLATFORM" 2>&1 | tee /tmp/build-native-output.log; then log_error "Plugin build failed" log_info "" log_info "Full build output saved to: /tmp/build-native-output.log" log_info "View errors: grep -E '(error:|ERROR|FAILED)' /tmp/build-native-output.log" log_info "" log_info "Checking for xcodebuild logs..." if [ -f "/tmp/xcodebuild_device.log" ]; then log_info "Device build errors:" grep -E "(error:|warning:)" /tmp/xcodebuild_device.log | head -30 fi if [ -f "/tmp/xcodebuild_simulator.log" ]; then log_info "Simulator build errors:" grep -E "(error:|warning:)" /tmp/xcodebuild_simulator.log | head -30 fi exit 1 fi # Build Android if [[ "$PLATFORM" == "android" || "$PLATFORM" == "all" ]]; then log_step "Building Android app..." cd "$PROJECT_ROOT/android" if [ ! -f "gradlew" ]; then log_error "Gradle wrapper not found. Run: cd android && ./gradlew wrapper" exit 1 fi # Build Android app if ! ./gradlew :app:assembleDebug; then log_error "Android build failed" exit 1 fi APK_PATH="app/build/outputs/apk/debug/app-debug.apk" if [ -f "$APK_PATH" ]; then log_info "✓ Android APK: $APK_PATH" else log_error "Android APK not found at $APK_PATH" exit 1 fi log_info "" fi # Build iOS if [[ "$PLATFORM" == "ios" || "$PLATFORM" == "all" ]]; then log_step "Building iOS app..." cd "$PROJECT_ROOT/ios" # Check if CocoaPods is installed if ! command -v pod &> /dev/null; then log_error "CocoaPods not found. Install with: gem install cocoapods" exit 1 fi # Install CocoaPods dependencies log_step "Installing CocoaPods dependencies..." if [ ! -f "Podfile.lock" ] || [ "Podfile" -nt "Podfile.lock" ]; then pod install else log_info "CocoaPods dependencies up to date" fi # Check if App workspace exists if [ ! -d "App/App.xcworkspace" ] && [ ! -d "App/App.xcodeproj" ]; then log_warn "iOS app Xcode project not found" log_info "The iOS app may need to be initialized with Capacitor" log_info "Try: cd ios && npx cap sync ios" log_info "" log_info "Attempting to build plugin framework only..." # Build plugin framework only cd "$PROJECT_ROOT/ios" if [ -d "DailyNotificationPlugin.xcworkspace" ]; then WORKSPACE="DailyNotificationPlugin.xcworkspace" SCHEME="DailyNotificationPlugin" CONFIG="Debug" log_step "Building plugin framework for simulator..." xcodebuild build \ -workspace "$WORKSPACE" \ -scheme "$SCHEME" \ -configuration "$CONFIG" \ -sdk iphonesimulator \ -destination 'generic/platform=iOS Simulator' \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGNING_ALLOWED=NO || log_warn "Plugin framework build failed (may need Xcode project setup)" else log_error "Cannot find iOS workspace or project" exit 1 fi else # Build iOS app cd "$PROJECT_ROOT/ios/App" # Determine workspace vs project if [ -d "App.xcworkspace" ]; then WORKSPACE="App.xcworkspace" BUILD_CMD="xcodebuild -workspace" elif [ -d "App.xcodeproj" ]; then PROJECT="App.xcodeproj" BUILD_CMD="xcodebuild -project" else log_error "Cannot find iOS workspace or project" exit 1 fi SCHEME="App" CONFIG="Debug" SDK="iphonesimulator" log_step "Building iOS app for simulator..." if [ -n "$WORKSPACE" ]; then BUILD_OUTPUT=$(xcodebuild build \ -workspace "$WORKSPACE" \ -scheme "$SCHEME" \ -configuration "$CONFIG" \ -sdk "$SDK" \ -destination 'generic/platform=iOS Simulator' \ -derivedDataPath build/derivedData \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGNING_ALLOWED=NO \ 2>&1) else BUILD_OUTPUT=$(xcodebuild build \ -project "$PROJECT" \ -scheme "$SCHEME" \ -configuration "$CONFIG" \ -sdk "$SDK" \ -destination 'generic/platform=iOS Simulator' \ -derivedDataPath build/derivedData \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGNING_ALLOWED=NO \ 2>&1) fi if echo "$BUILD_OUTPUT" | grep -q "BUILD SUCCEEDED"; then log_info "✓ iOS app build completed successfully" # Find built app APP_PATH=$(find build/derivedData -name "*.app" -type d -path "*/Build/Products/*-iphonesimulator/*.app" | head -1) if [ -n "$APP_PATH" ]; then log_info "✓ iOS app bundle: $APP_PATH" fi elif echo "$BUILD_OUTPUT" | grep -q "error:"; then log_error "iOS app build failed" echo "$BUILD_OUTPUT" | grep -E "(error:|warning:)" | head -20 exit 1 else log_warn "iOS app build completed with warnings" echo "$BUILD_OUTPUT" | grep -E "(warning:|error:)" | head -10 fi fi log_info "" fi log_info "==========================================" log_info "✅ Build Complete!" log_info "==========================================" log_info "" # Summary if [[ "$PLATFORM" == "android" || "$PLATFORM" == "all" ]]; then log_info "Android APK: android/app/build/outputs/apk/debug/app-debug.apk" log_info "Install: adb install android/app/build/outputs/apk/debug/app-debug.apk" fi if [[ "$PLATFORM" == "ios" || "$PLATFORM" == "all" ]]; then log_info "iOS App: ios/App/build/derivedData/Build/Products/Debug-iphonesimulator/App.app" log_info "Install: xcrun simctl install booted " fi log_info "" log_info "For deployment scripts, see:" log_info " - scripts/build-and-deploy-native-ios.sh (iOS native app)" log_info " - test-apps/daily-notification-test/scripts/build-and-deploy-ios.sh (Vue 3 test app)"