Files
RSSuper/scripts/build-ios.sh
Michael Freno d346b527e6
Some checks failed
CI - Multi-Platform Native / Build iOS (RSSuper) (push) Has been cancelled
CI - Multi-Platform Native / Build macOS (push) Has been cancelled
CI - Multi-Platform Native / Build Android (push) Has been cancelled
CI - Multi-Platform Native / Build Linux (push) Has been cancelled
CI - Multi-Platform Native / Build Summary (push) Has been cancelled
migration start
2026-03-29 14:12:17 -04:00

175 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# RSSuper iOS/macOS Build Script
# Adapted from Nessa build scripts
set -e
# Configuration
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
IOS_PROJECT_DIR="$PROJECT_ROOT/native-route/ios/RSSuper"
IOS_PROJECT="$IOS_PROJECT_DIR/RSSuper.xcodeproj"
IOS_SCHEME="RSSuper"
# Default values
CONFIGURATION="${1:-Debug}"
PLATFORM="${2:-iOS}"
DESTINATION="${3:-generic/platform=iOS}"
ACTION="${4:-build}"
# Show help
show_help() {
echo "RSSuper iOS/macOS Build Script"
echo ""
echo "Usage: $0 [CONFIGURATION] [PLATFORM] [DESTINATION] [ACTION]"
echo ""
echo "Arguments:"
echo " CONFIGURATION Build configuration (Debug|Release) [Default: Debug]"
echo " PLATFORM Target platform (iOS|macOS) [Default: iOS]"
echo " DESTINATION xcodebuild destination [Default: generic/platform=iOS]"
echo " ACTION Action to perform (build|test|clean) [Default: build]"
echo ""
echo "Examples:"
echo " $0 # Build Debug for iOS"
echo " $0 Release # Build Release for iOS"
echo " $0 Debug iOS 'platform=iOS Simulator,name=iPhone 15' # Build for simulator"
echo " $0 clean # Clean build"
}
# Check if xcodebuild is available
check_prerequisites() {
if ! command -v xcodebuild &> /dev/null; then
echo "Error: xcodebuild not found. Please install Xcode."
exit 1
fi
if [ ! -d "$IOS_PROJECT_DIR" ]; then
echo "Error: iOS project directory not found: $IOS_PROJECT_DIR"
exit 1
fi
if [ ! -f "$IOS_PROJECT/project.pbxproj" ]; then
echo "Error: Xcode project not found: $IOS_PROJECT"
exit 1
fi
}
# Select appropriate Xcode version
select_xcode() {
echo "Checking Xcode installation..."
echo "=== Current xcode-select path ==="
xcode-select -p 2>/dev/null || echo "xcode-select failed"
echo "=== Current Xcode version ==="
xcodebuild -version 2>/dev/null || echo "xcodebuild failed"
# Try common Xcode paths in order of preference
for path in \
"/Applications/Xcode_16.3.app/Contents/Developer" \
"/Applications/Xcode_16.2.app/Contents/Developer" \
"/Applications/Xcode_16.1.app/Contents/Developer" \
"/Applications/Xcode_16.0.app/Contents/Developer" \
"/Applications/Xcode_15.4.app/Contents/Developer" \
"/Applications/Xcode_15.3.app/Contents/Developer" \
"/Applications/Xcode_15.2.app/Contents/Developer" \
"/Applications/Xcode_15.1.app/Contents/Developer" \
"/Applications/Xcode_15.0.app/Contents/Developer" \
"/Applications/Xcode.app/Contents/Developer"
do
if [ -d "$path" ]; then
CURRENT_PATH=$(xcode-select -p 2>/dev/null || echo "")
if [ "$CURRENT_PATH" != "$path" ]; then
echo "Switching Xcode to: $path"
xcode-select -s "$path" || true
else
echo "Xcode already selected at: $path"
fi
break
fi
done
echo "=== Selected Xcode ==="
xcodebuild -version
}
# Clean build artifacts
clean_build() {
echo "Cleaning build artifacts..."
cd "$IOS_PROJECT_DIR"
xcodebuild clean \
-project "$IOS_PROJECT" \
-scheme "$IOS_SCHEME" \
-configuration "$CONFIGURATION" \
-destination "$DESTINATION"
echo "Clean completed"
}
# Build the project
build_project() {
echo "Building $PLATFORM $CONFIGURATION..."
cd "$IOS_PROJECT_DIR"
# Capture build output
BUILD_LOG=$(mktemp)
set +e
xcodebuild $ACTION \
-project "$IOS_PROJECT" \
-scheme "$IOS_SCHEME" \
-configuration "$CONFIGURATION" \
-destination "$DESTINATION" \
> "$BUILD_LOG" 2>&1
BUILD_EXIT=$?
set -e
# Show build output
cat "$BUILD_LOG"
if [ "$BUILD_EXIT" = "0" ]; then
echo "Build completed successfully!"
return 0
else
echo "Build failed with exit code: $BUILD_EXIT"
# Extract and show errors
echo ""
echo "Errors found:"
grep -E "\.swift:[0-9]+:[0-9]+: error:" "$BUILD_LOG" | head -10 || true
return $BUILD_EXIT
fi
}
# Run tests
run_tests() {
echo "Running tests for $PLATFORM..."
cd "$IOS_PROJECT_DIR"
xcodebuild test \
-project "$IOS_PROJECT" \
-scheme "$IOS_SCHEME" \
-configuration "$CONFIGURATION" \
-destination "$DESTINATION" \
ONLY_ACTIVE_ARCH=NO
}
# Main
case "$ACTION" in
clean)
check_prerequisites
select_xcode
clean_build
;;
test)
check_prerequisites
select_xcode
run_tests
;;
build|*)
check_prerequisites
select_xcode
build_project
;;
esac