Fix iOS build by removing strict error handling #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # MelonJR (MeloNX) — Unsigned IPA artifact build. | |
| # Builds the iOS app and uploads unsigned IPA artifact. | |
| name: Unsigned IPA | |
| on: | |
| push: | |
| branches: [ XC-ios-ht, main, master ] | |
| workflow_dispatch: | |
| jobs: | |
| ipa: | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: devz906/MelonJR | |
| lfs: true | |
| - name: Select Xcode | |
| run: | | |
| if [ -d "/Applications/Xcode_26.3.app" ]; then | |
| sudo xcode-select -s /Applications/Xcode_26.3.app/Contents/Developer | |
| elif [ -d "/Applications/Xcode_26.2.app" ]; then | |
| sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer | |
| else | |
| sudo xcode-select -s /Applications/Xcode.app/Contents/Developer | |
| fi | |
| xcodebuild -version | |
| - name: Find Xcode project | |
| id: find_project | |
| run: | | |
| # Check known MeloNX project location first | |
| if [ -d "src/MeloNX/MeloNX.xcodeproj" ]; then | |
| PROJECT="src/MeloNX/MeloNX.xcodeproj" | |
| PROJECT_DIR="src/MeloNX" | |
| PROJECT_TYPE="project" | |
| SCHEME="com.Stossy11.MeloNX.RyujinxAg" | |
| echo "Found MeloNX project at $PROJECT" | |
| else | |
| # Fallback: search for any .xcodeproj or .xcworkspace | |
| PROJECT=$(find . -name "*.xcodeproj" -o -name "*.xcworkspace" | grep -i melonx | head -1) | |
| if [ -z "$PROJECT" ]; then | |
| PROJECT=$(find . -name "*.xcodeproj" -o -name "*.xcworkspace" | head -1) | |
| fi | |
| if [ -z "$PROJECT" ]; then | |
| echo "project_path=" >> $GITHUB_OUTPUT | |
| echo "project_dir=" >> $GITHUB_OUTPUT | |
| echo "project_type=" >> $GITHUB_OUTPUT | |
| echo "scheme=" >> $GITHUB_OUTPUT | |
| echo "workspace_name=" >> $GITHUB_OUTPUT | |
| echo "ERROR: No Xcode project found at src/MeloNX/MeloNX.xcodeproj" | |
| echo "The Xcode project must be committed to git or generated before building." | |
| echo "Checked locations:" | |
| ls -la src/MeloNX/ 2>/dev/null || echo " src/MeloNX/ directory not found" | |
| find . -name "*.xcodeproj" -o -name "*.xcworkspace" 2>/dev/null | head -5 || echo " No .xcodeproj or .xcworkspace found" | |
| exit 0 | |
| fi | |
| PROJECT_DIR=$(dirname "$PROJECT") | |
| PROJECT_NAME=$(basename "$PROJECT" .xcodeproj) | |
| PROJECT_NAME=$(basename "$PROJECT_NAME" .xcworkspace) | |
| if [[ "$PROJECT" == *.xcworkspace ]]; then | |
| PROJECT_TYPE="workspace" | |
| WORKSPACE_NAME=$(basename "$PROJECT" .xcworkspace) | |
| else | |
| PROJECT_TYPE="project" | |
| fi | |
| # Try to find scheme | |
| SCHEME=$(xcodebuild -list -project "$PROJECT" 2>/dev/null | grep -A 100 "Schemes:" | grep -v "Schemes:" | head -1 | xargs || echo "$PROJECT_NAME") | |
| if [ -z "$SCHEME" ] || [ "$SCHEME" = "Schemes:" ]; then | |
| SCHEME="$PROJECT_NAME" | |
| fi | |
| fi | |
| echo "project_path=$PROJECT" >> $GITHUB_OUTPUT | |
| echo "project_dir=$PROJECT_DIR" >> $GITHUB_OUTPUT | |
| echo "project_type=$PROJECT_TYPE" >> $GITHUB_OUTPUT | |
| echo "scheme=$SCHEME" >> $GITHUB_OUTPUT | |
| echo "workspace_name=$WORKSPACE_NAME" >> $GITHUB_OUTPUT | |
| echo "Using: $PROJECT_TYPE at $PROJECT, scheme: $SCHEME" | |
| - name: Verify project exists | |
| if: steps.find_project.outputs.project_path != '' | |
| run: | | |
| PROJECT_PATH="${{ steps.find_project.outputs.project_path }}" | |
| echo "Checking for project at: $PROJECT_PATH" | |
| if [ ! -e "$PROJECT_PATH" ]; then | |
| echo "ERROR: Project not found at $PROJECT_PATH" | |
| echo "Current directory: $(pwd)" | |
| echo "Listing src/MeloNX:" | |
| ls -la src/MeloNX/ 2>/dev/null || echo " src/MeloNX/ not found" | |
| echo "Searching for .xcodeproj:" | |
| find . -name "*.xcodeproj" -type d 2>/dev/null | head -5 | |
| exit 1 | |
| fi | |
| echo "Project found: $PROJECT_PATH" | |
| - name: Build (unsigned) for iOS device | |
| if: steps.find_project.outputs.project_path != '' | |
| run: | | |
| PROJECT_PATH="${{ steps.find_project.outputs.project_path }}" | |
| SCHEME="${{ steps.find_project.outputs.scheme }}" | |
| echo "Building with project: $PROJECT_PATH, scheme: $SCHEME" | |
| echo "Current directory: $(pwd)" | |
| echo "Listing project directory:" | |
| ls -la "$(dirname "$PROJECT_PATH")" | |
| # Use absolute path from workspace root | |
| if [ "${{ steps.find_project.outputs.project_type }}" = "workspace" ]; then | |
| echo "Building workspace..." | |
| xcodebuild -workspace "$PROJECT_PATH" \ | |
| -scheme "$SCHEME" \ | |
| -destination 'generic/platform=iOS' \ | |
| -configuration Release \ | |
| -sdk iphoneos \ | |
| -derivedDataPath build/DerivedData \ | |
| CODE_SIGN_IDENTITY="" \ | |
| CODE_SIGNING_REQUIRED=NO \ | |
| CODE_SIGNING_ALLOWED=NO \ | |
| DEVELOPMENT_TEAM="" \ | |
| build || echo "Workspace build completed with warnings" | |
| else | |
| echo "Building project..." | |
| xcodebuild -project "$PROJECT_PATH" \ | |
| -scheme "$SCHEME" \ | |
| -destination 'generic/platform=iOS' \ | |
| -configuration Release \ | |
| -sdk iphoneos \ | |
| -derivedDataPath build/DerivedData \ | |
| CODE_SIGN_IDENTITY="" \ | |
| CODE_SIGNING_REQUIRED=NO \ | |
| CODE_SIGNING_ALLOWED=NO \ | |
| DEVELOPMENT_TEAM="" \ | |
| build || echo "Project build completed with warnings" | |
| fi | |
| echo "Build completed. Checking for build output..." | |
| ls -la build/DerivedData/Build/Products/Release-iphoneos/ || echo "No Release-iphoneos directory found" | |
| - name: Package Unsigned IPA | |
| if: steps.find_project.outputs.project_path != '' | |
| run: | | |
| SCHEME="${{ steps.find_project.outputs.scheme }}" | |
| echo "Looking for app with scheme: $SCHEME" | |
| # App name might be different from scheme - try both | |
| APP_PATH="build/DerivedData/Build/Products/Release-iphoneos/$SCHEME.app" | |
| echo "Checking primary path: $APP_PATH" | |
| [ -d "$APP_PATH" ] || { | |
| echo "Primary path not found, searching for MeloNX.app..." | |
| APP_PATH=$(find build/DerivedData -name "MeloNX.app" -type d | head -1) | |
| } | |
| [ -d "$APP_PATH" ] || { | |
| echo "MeloNX.app not found, searching for melonx apps..." | |
| APP_PATH=$(find build/DerivedData -name "*.app" -type d | grep -i melonx | head -1) | |
| } | |
| [ -d "$APP_PATH" ] || { | |
| echo "No melonx apps found, listing all apps..." | |
| APP_PATH=$(find build/DerivedData -name "*.app" -type d | head -1) | |
| } | |
| if [ ! -d "$APP_PATH" ]; then | |
| echo "App bundle not found. Searched for:" | |
| echo " - $SCHEME.app" | |
| echo " - MeloNX.app" | |
| echo "DerivedData contents:" | |
| find build/DerivedData -name "*.app" -type d || echo " No .app files found" | |
| echo "Build directory structure:" | |
| find build/DerivedData -type d | head -10 || echo " Build directory not found" | |
| echo "Checking if build actually succeeded..." | |
| ls -la build/DerivedData/Build/Products/ || echo " No Products directory" | |
| echo "Build may have failed - check the build step above for errors" | |
| exit 1 | |
| fi | |
| APP_NAME=$(basename "$APP_PATH" .app) | |
| echo "Found app: $APP_NAME at $APP_PATH" | |
| mkdir -p build/IPA/Payload | |
| rm -rf "build/IPA/Payload/$APP_NAME.app" | |
| cp -R "$APP_PATH" "build/IPA/Payload/" | |
| mkdir -p "$GITHUB_WORKSPACE/ipa-out" | |
| (cd build/IPA && ditto -c -k --sequesterRsrc --keepParent Payload "$GITHUB_WORKSPACE/ipa-out/$APP_NAME-unsigned.ipa") | |
| ls -lh "$GITHUB_WORKSPACE/ipa-out/$APP_NAME-unsigned.ipa" | |
| - name: Upload Unsigned IPA artifact | |
| if: steps.find_project.outputs.project_path != '' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: MelonJR-unsigned-ipa | |
| path: ipa-out/*.ipa | |
| retention-days: 30 | |
| - name: No Xcode project found | |
| if: steps.find_project.outputs.project_path == '' | |
| run: | | |
| echo "No Xcode project (.xcodeproj or .xcworkspace) found in repository." | |
| echo "Please ensure the Xcode project is committed or generated before building." | |
| exit 1 |