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
175 lines
4.8 KiB
Bash
Executable File
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
|