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.
5.6 KiB
5.6 KiB
Building Everything from Console
Author: Matthew Raymer
Date: November 4, 2025
Quick Start
Build everything (plugin + iOS + Android):
./scripts/build-all.sh
Build specific platform:
./scripts/build-all.sh ios # iOS only
./scripts/build-all.sh android # Android only
./scripts/build-all.sh all # Everything (default)
What Gets Built
1. Plugin Build
- Compiles TypeScript to JavaScript
- Builds native iOS code (Swift)
- Builds native Android code (Kotlin/Java)
- Creates plugin frameworks/bundles
2. Android Build
- Builds Android app (
android/app) - Creates debug APK
- Output:
android/app/build/outputs/apk/debug/app-debug.apk
3. iOS Build
- Installs CocoaPods dependencies
- Builds iOS app (
ios/App) - Creates simulator app bundle
- Output:
ios/App/build/derivedData/Build/Products/Debug-iphonesimulator/App.app
Detailed Build Process
Step-by-Step Build
# 1. Build plugin (TypeScript + Native)
./scripts/build-native.sh --platform all
# 2. Build Android app
cd android
./gradlew :app:assembleDebug
cd ..
# 3. Build iOS app
cd ios
pod install
cd App
xcodebuild -workspace App.xcworkspace \
-scheme App \
-configuration Debug \
-sdk iphonesimulator \
-destination 'generic/platform=iOS Simulator' \
CODE_SIGN_IDENTITY="" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
Platform-Specific Builds
Android Only
# Build plugin for Android
./scripts/build-native.sh --platform android
# Build Android app
cd android
./gradlew :app:assembleDebug
# Install on device/emulator
adb install app/build/outputs/apk/debug/app-debug.apk
iOS Only
# Build plugin for iOS
./scripts/build-native.sh --platform ios
# Install CocoaPods dependencies
cd ios
pod install
# Build iOS app
cd App
xcodebuild -workspace App.xcworkspace \
-scheme App \
-configuration Debug \
-sdk iphonesimulator \
CODE_SIGN_IDENTITY="" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
# Deploy to simulator (see deployment scripts)
../scripts/build-and-deploy-native-ios.sh
Build Scripts
Main Build Script
scripts/build-all.sh
- Builds plugin + iOS + Android
- Handles dependencies automatically
- Provides clear error messages
Platform-Specific Scripts
scripts/build-native.sh
- Builds plugin only (TypeScript + native code)
- Supports
--platform ios,--platform android,--platform all
scripts/build-and-deploy-native-ios.sh
- Builds iOS plugin + app
- Deploys to simulator automatically
- Includes booting simulator and launching app
test-apps/daily-notification-test/scripts/build-and-deploy-ios.sh
- Builds Vue 3 test app
- Syncs web assets
- Deploys to simulator
Build Outputs
Android
android/app/build/outputs/apk/debug/app-debug.apk
iOS
ios/App/build/derivedData/Build/Products/Debug-iphonesimulator/App.app
Plugin
ios/build/derivedData/Build/Products/*/DailyNotificationPlugin.framework
android/plugin/build/outputs/aar/plugin-release.aar
Prerequisites
For All Platforms
- Node.js and npm
- Git
For Android
- Android SDK
- Java JDK (8 or higher)
- Gradle (or use Gradle wrapper)
For iOS
- macOS
- Xcode Command Line Tools
- CocoaPods (
gem install cocoapods)
Troubleshooting
Build Fails
# Clean and rebuild
./scripts/build-native.sh --platform all --clean
# Android: Clean Gradle cache
cd android && ./gradlew clean && cd ..
# iOS: Clean Xcode build
cd ios/App && xcodebuild clean && cd ../..
Dependencies Out of Date
# Update npm dependencies
npm install
# Update CocoaPods
cd ios && pod update && cd ..
# Update Android dependencies
cd android && ./gradlew --refresh-dependencies && cd ..
iOS Project Not Found
If ios/App/App.xcworkspace doesn't exist:
# Initialize iOS app with Capacitor
cd ios
npx cap sync ios
pod install
Android Build Issues
# Verify Android SDK
echo $ANDROID_HOME
# Clean build
cd android
./gradlew clean
./gradlew :app:assembleDebug
CI/CD Integration
GitHub Actions Example
name: Build All Platforms
on: [push, pull_request]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- name: Build Everything
run: ./scripts/build-all.sh all
Android-Only CI
name: Build Android
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/setup-java@v2
- name: Build Android
run: ./scripts/build-all.sh android
Verification
After building, verify outputs:
# Android APK exists
test -f android/app/build/outputs/apk/debug/app-debug.apk && echo "✓ Android APK"
# iOS app bundle exists
test -d ios/App/build/derivedData/Build/Products/Debug-iphonesimulator/App.app && echo "✓ iOS app"
# Plugin frameworks exist
test -d ios/build/derivedData/Build/Products/*/DailyNotificationPlugin.framework && echo "✓ iOS plugin"
test -f android/plugin/build/outputs/aar/plugin-release.aar && echo "✓ Android plugin"
Next Steps
After building:
- Deploy Android:
adb install android/app/build/outputs/apk/debug/app-debug.apk - Deploy iOS: Use
scripts/build-and-deploy-native-ios.sh - Test: Run plugin tests and verify functionality
- Debug: Use platform-specific debugging tools