diff --git a/apps/rebreak-native/clean-ios.sh b/apps/rebreak-native/clean-ios.sh index 95253e5..f243070 100755 --- a/apps/rebreak-native/clean-ios.sh +++ b/apps/rebreak-native/clean-ios.sh @@ -64,8 +64,12 @@ if [ "$SKIP_PODS" = "1" ]; then else # 3. Prebuild: regeneriert ios/ aus app.config.ts + Config-Plugins # Dank with-fmt-consteval-fix-Plugin wird das Podfile auto-gepatcht. - echo "→ pnpm expo prebuild --clean" - pnpm expo prebuild --clean + # ⚠️ --platform ios: NUR ios/ regenerieren, android/ NICHT anfassen. Ein + # 'prebuild --clean' ohne --platform will auch android/ löschen; hält ein + # Gradle-Daemon dort build/.gradle offen, failt das rmdir mit ENOTEMPTY und + # hinterlässt ein halb-gewischtes android/ (Source weg, gelocktes build/ bleibt). + echo "→ pnpm expo prebuild --clean --platform ios" + pnpm expo prebuild --clean --platform ios # 4. Pod install echo "→ cd ios && pod install" diff --git a/apps/rebreak-native/deploy.sh b/apps/rebreak-native/deploy.sh index 9d9ae26..bae1fa3 100755 --- a/apps/rebreak-native/deploy.sh +++ b/apps/rebreak-native/deploy.sh @@ -389,6 +389,18 @@ ASC_API_KEY_PATH="${ASC_API_KEY_PATH:-}" ASC_API_KEY_ID="${ASC_API_KEY_ID:-}" ASC_API_KEY_ISSUER="${ASC_API_KEY_ISSUER:-}" +# Stoppt laufende Gradle-Daemons + entfernt android-Build-Output, BEVOR ein +# 'expo prebuild --clean' android/ löschen will. Ein Daemon (von Builds, lebt ~3h) +# hält sonst android/build|.gradle offen → 'rmdir android' failt mit ENOTEMPTY → +# android/ wird nur halb gewischt (Source weg, gelocktes build/ bleibt). Idempotent. +release_android_locks() { + if [[ -x "$ANDROID_DIR/gradlew" ]]; then + ( cd "$ANDROID_DIR" && ./gradlew --stop >/dev/null 2>&1 ) || true + fi + pkill -f "GradleDaemon" 2>/dev/null || true + rm -rf "$ANDROID_DIR/build" "$ANDROID_DIR/.gradle" "$ANDROID_DIR/app/build" 2>/dev/null || true +} + # Stellt sicher dass ios/ oder android/ ein VOLLSTÄNDIGES Prebuild ist — sonst # Auto-(Re)Prebuild (fehlt komplett → prebuild; halb-gewischt → prebuild --clean). # Usage: ensure_native_dir ios | ensure_native_dir android @@ -414,6 +426,9 @@ ensure_native_dir() { if [[ -d "$target_dir" && ! -f "$marker" ]]; then warn "$platform/ ist unvollständig (Marker $(basename "$marker") fehlt) — regeneriere via prebuild --clean" + # Vor dem android-Clean Gradle-Daemons stoppen + Build-Output entfernen, sonst + # kann 'prebuild --clean' am gelockten android/build mit ENOTEMPTY scheitern. + [[ "$platform" == "android" ]] && release_android_locks # --clean wischt + regeneriert NUR $platform/ (die andere Plattform bleibt # unangetastet) und räumt den kaputten Halb-Zustand sauber auf. run_quiet "expo prebuild --clean ($platform)" "$LOG_DIR/prebuild-$platform-$TIMESTAMP.log" \