Some checks failed
Test macOS Build Action / test-macos-build (push) Has been cancelled
159 lines
5.3 KiB
Bash
Executable File
159 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 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"
|
||
elif [ -f "$PROJECT_ROOT/LuckyRobots.entitlements" ]; then
|
||
ENTITLEMENTS_FILE="$PROJECT_ROOT/LuckyRobots.entitlements"
|
||
else
|
||
echo "Warning: No entitlements file found. This might affect notarization."
|
||
ENTITLEMENTS_FILE=""
|
||
fi
|
||
|
||
# For debugging: print paths and config
|
||
echo "Project root: $PROJECT_ROOT"
|
||
echo "Project file: $PROJECT_FILE"
|
||
echo "Archive directory: $ARCHIVE_DIR"
|
||
echo "Entitlements file: $ENTITLEMENTS_FILE"
|
||
|
||
# Clean up previous build artifacts
|
||
rm -rf DerivedDataCache Intermediate Binaries Saved
|
||
|
||
# Generate project files
|
||
"$UE_ROOT/Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh" -project="$PROJECT_FILE" -game -engine
|
||
|
||
# Run the build command
|
||
"$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)
|
||
|
||
echo ""
|
||
echo "🦾 Build completed. Application path:"
|
||
APP_PATH=$(find "$ARCHIVE_DIR" -name "*.app" -type d | head -n 1)
|
||
echo "$APP_PATH"
|
||
|
||
if [ -n "$APP_PATH" ]; then
|
||
echo ""
|
||
echo "🔍 Binary files that will need signing:"
|
||
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))"
|
||
|
||
echo ""
|
||
echo "🔍 Checking for PhysX and other special libraries (often need special handling):"
|
||
find "$APP_PATH" -name "*PhysX*" -o -name "*APEX*"
|
||
fi
|
||
|
||
# Bundle ID'yi proje ayarlarında güncelle
|
||
echo ""
|
||
echo "🔧 Updating bundle ID in UE config..."
|
||
CONFIG_FILE="$PROJECT_ROOT/Config/DefaultGame.ini"
|
||
if [ -f "$CONFIG_FILE" ]; then
|
||
# Mevcut bölümü kontrol et veya ekle
|
||
if grep -q "\[/Script/MacTargetPlatform\.MacTargetSettings\]" "$CONFIG_FILE"; then
|
||
# Bölüm var, ayarı güncelleyebiliriz
|
||
sed -i '' 's/BundleIdentifier=.*/BundleIdentifier=com.luckyrobots.luckyworld/g' "$CONFIG_FILE"
|
||
else
|
||
# Bölüm yok, eklememiz gerekiyor
|
||
echo "" >> "$CONFIG_FILE"
|
||
echo "[/Script/MacTargetPlatform.MacTargetSettings]" >> "$CONFIG_FILE"
|
||
echo "BundleIdentifier=com.luckyrobots.luckyworld" >> "$CONFIG_FILE"
|
||
fi
|
||
echo "Updated bundle ID in project config"
|
||
fi
|
||
|
||
# Build sonrası işlemler - bundle ID ayarlama
|
||
echo ""
|
||
echo "🔧 Performing post-build fix for bundle ID..."
|
||
if [ -n "$APP_PATH" ]; then
|
||
INFO_PLIST="$APP_PATH/Contents/Info.plist"
|
||
if [ -f "$INFO_PLIST" ]; then
|
||
echo "Setting bundle identifier to com.luckyrobots.luckyworld"
|
||
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.luckyrobots.luckyworld" "$INFO_PLIST"
|
||
echo "Updated bundle ID: $(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "$INFO_PLIST")"
|
||
else
|
||
echo "⚠️ Info.plist not found at $INFO_PLIST"
|
||
fi
|
||
fi
|
||
|
||
# Kütüphaneleri kontrol et ve gerekirse post-processing yap
|
||
echo ""
|
||
echo "🔍 Checking for unsigned libraries..."
|
||
if [ -n "$APP_PATH" ]; then
|
||
# Uygulamanın tüm executable ve kütüphanelerini bul
|
||
find "$APP_PATH" -type f -perm +111 | while read -r binary; do
|
||
# Codesign durumunu kontrol et
|
||
if ! codesign -v "$binary" &>/dev/null; then
|
||
echo "⚠️ Unsigned binary found: $binary"
|
||
# Bu dosyayı imzalamak için entitlements kullan
|
||
if [ -n "$ENTITLEMENTS_FILE" ]; then
|
||
echo "Re-signing binary with ad-hoc signature..."
|
||
codesign --force --options runtime --deep --sign - --timestamp --entitlements "$ENTITLEMENTS_FILE" "$binary"
|
||
fi
|
||
fi
|
||
done
|
||
|
||
# Hardened Runtime için ek kontroller
|
||
echo "Ensuring Hardened Runtime flags are set for main executable..."
|
||
MAIN_EXECUTABLE="$APP_PATH/Contents/MacOS/$(basename "$APP_PATH" .app)"
|
||
if [ -f "$MAIN_EXECUTABLE" ]; then
|
||
codesign --force --options runtime --deep --sign - --timestamp --entitlements "$ENTITLEMENTS_FILE" "$MAIN_EXECUTABLE"
|
||
fi
|
||
fi
|
||
|
||
echo ""
|
||
echo "✅ Build and post-processing completed successfully!"
|