Files
daily-notification-plugin/scripts/build-all.sh
Matthew Raymer 8ded555a21 fix(ios): resolve compilation errors and enable successful build
Fixed critical compilation errors preventing iOS plugin build:
- Updated logger API calls from logger.debug(TAG, msg) to logger.log(.debug, msg)
  across all iOS plugin files to match DailyNotificationLogger interface
- Fixed async/await concurrency in makeConditionalRequest using semaphore pattern
- Fixed NotificationContent immutability by creating new instances instead of mutation
- Changed private access control to internal for extension-accessible methods
- Added iOS 15.0+ availability checks for interruptionLevel property
- Fixed static member references using Self.MEMBER_NAME syntax
- Added missing .scheduling case to exhaustive switch statement
- Fixed variable initialization in retry state closures

Added DailyNotificationStorage.swift implementation matching Android pattern.

Updated build scripts with improved error reporting and full log visibility.

iOS plugin now compiles successfully. All build errors resolved.
2025-11-04 22:22:02 -08:00

246 lines
7.6 KiB
Bash
Executable File

#!/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 <APP_PATH>"
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)"