#!/bin/bash set -e # Exit on any error # Get the user's home directory USER_HOME="$HOME" # Set up Unreal Engine paths UE_ROOT="/Users/Shared/Epic Games/UE_5.5" UE_EDITOR="$UE_ROOT/Engine/Binaries/Mac/UnrealEditor.app/Contents/MacOS/UnrealEditor" UE_UAT="$UE_ROOT/Engine/Build/BatchFiles/RunUAT.command" # Set up project paths PROJECT_ROOT="$(pwd)" PROJECT_FILE="$PROJECT_ROOT/LuckyWorld.uproject" ARCHIVE_DIR="$PROJECT_ROOT/Builds" # Check for entitlements file if [ -f "$PROJECT_ROOT/LuckyWorld.entitlements" ]; then ENTITLEMENTS_FILE="$PROJECT_ROOT/LuckyWorld.entitlements" echo "โœ… Using entitlements file: $ENTITLEMENTS_FILE" else echo "โš ๏ธ Warning: No entitlements file found. This might affect notarization." ENTITLEMENTS_FILE="" fi # Print paths and config for debugging echo "Project root: $PROJECT_ROOT" echo "Project file: $PROJECT_FILE" echo "Archive directory: $ARCHIVE_DIR" # More selective cleanup - don't remove DerivedDataCache echo "๐Ÿงน Cleaning build artifacts..." rm -rf DerivedDataCache Intermediate Binaries Saved mkdir -p "$ARCHIVE_DIR" # Generate project files echo "๐Ÿ“ Generating project files..." "$UE_ROOT/Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh" -project="$PROJECT_FILE" -game -engine # Run the build command with simplified parameters and more diagnostics echo "๐Ÿ”จ Starting build process..." "$UE_UAT" -ScriptsForProject="$PROJECT_FILE" Turnkey \ -command=VerifySdk \ -platform=Mac \ -UpdateIfNeeded \ -EditorIO \ -EditorIOPort=59484 \ -project="$PROJECT_FILE" \ BuildCookRun \ -nop4 \ -utf8output \ -cook \ -project="$PROJECT_FILE" \ -target=LuckyWorld \ -unrealexe="$UE_EDITOR" \ -platform=Mac \ -installed \ -stage \ -archive \ -package \ -build \ -iterativecooking \ -pak \ -iostore \ -compressed \ -prereqs \ -archivedirectory="$ARCHIVE_DIR" \ -CrashReporter \ -clientconfig=Shipping \ # -nocompile \ # -nocompileuat \ # -nocompileeditor \ # -skipbuildeditor \ # enable these if you want to test build without pak and iostore (you're just testing the build) # -skipiostore \ # -skippak \ (disable -pak and -iostore) #!/bin/bash # Check for errors in the build process BUILD_STATUS=$? if [ $BUILD_STATUS -ne 0 ]; then echo "โŒ ERROR: Build command failed with exit code $BUILD_STATUS" exit $BUILD_STATUS fi echo "" echo "๐Ÿ” Looking for built application..." APP_PATH=$(find "$ARCHIVE_DIR" -name "*.app" -type d | head -n 1) # Check if the build actually succeeded by verifying the app exists if [ -z "$APP_PATH" ] || [ ! -d "$APP_PATH" ]; then echo "โŒ ERROR: Build failed or did not produce an app bundle!" echo "Check the logs above for build errors." # List all files in the archive directory to help debug echo "Contents of archive directory:" find "$ARCHIVE_DIR" -type f -o -type d | sort exit 1 fi echo "โœ… Build completed successfully! Application path:" echo "$APP_PATH" if [ -n "$APP_PATH" ]; then echo "" echo "๐Ÿ” Binary files summary:" DYLIB_COUNT=$(find "$APP_PATH" -name "*.dylib" | wc -l) SO_COUNT=$(find "$APP_PATH" -name "*.so" | wc -l) FRAMEWORKS=$(find "$APP_PATH" -path "*.framework/*" -type f -perm +111 | wc -l) EXECUTABLES=$(find "$APP_PATH" -type f -perm +111 -not -path "*.framework/*" -not -name "*.dylib" -not -name "*.so" | wc -l) echo "- $DYLIB_COUNT .dylib libraries" echo "- $SO_COUNT .so libraries" echo "- $FRAMEWORKS framework executables" echo "- $EXECUTABLES other executables" echo "Total binary files: $((DYLIB_COUNT + SO_COUNT + FRAMEWORKS + EXECUTABLES))" # Check bundle ID (for information only, no modifications) INFO_PLIST="$APP_PATH/Contents/Info.plist" if [ -f "$INFO_PLIST" ]; then BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "$INFO_PLIST") echo "" echo "๐Ÿ“ฆ App Bundle ID: $BUNDLE_ID" fi fi echo "" echo "โœ… Build complete!" echo "App location: $APP_PATH"