migration start
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
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
This commit is contained in:
174
scripts/build-ios.sh
Executable file
174
scripts/build-ios.sh
Executable file
@@ -0,0 +1,174 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user