#!/usr/bin/env bash # # build-to-moh.sh # يبني تطبيق Fchaty وينشئ نسخة باسم "to-moh" على سطح المكتب # هذه النسخة جاهزة للإرسال لرفيقك محمد # # الاستخدام: # chmod +x scripts/build-to-moh.sh # ./scripts/build-to-moh.sh # set -euo pipefail REPOSITORY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PROJECT_DIR="$REPOSITORY_DIR/FchatyApp" BUILD_DIR="$PROJECT_DIR/.build" PRODUCT_NAME="FchatyApp" ICON_PATH="$PROJECT_DIR/Resources/Fchaty.icns" # النسخة على سطح المكتب DESKTOP_DIR="$HOME/Desktop" OUTPUT_APP="$DESKTOP_DIR/to-moh.app" OUTPUT_ZIP="$DESKTOP_DIR/to-moh.zip" STAGING_DIR="$(mktemp -d "${TMPDIR:-/tmp}/fchaty-to-moh.XXXXXX")" STAGING_APP="$STAGING_DIR/to-moh.app" cleanup() { rm -rf "$STAGING_DIR" } trap cleanup EXIT # ─── التحقق من المتطلبات ───────────────────────────────────────────────────── if [[ ! -f "$PROJECT_DIR/Package.swift" ]]; then echo "ERROR: FchatyApp package not found: $PROJECT_DIR" >&2 exit 1 fi if [[ ! -f "$ICON_PATH" ]]; then echo "ERROR: Application icon not found: $ICON_PATH" >&2 exit 1 fi # ─── البناء ─────────────────────────────────────────────────────────────────── echo "========================================" echo " بناء نسخة to-moh من Fchaty" echo "========================================" echo "" echo "[1/5] تنظيف الـ build القديم..." rm -rf "$BUILD_DIR" echo "[2/5] تشغيل الاختبارات..." swift test --package-path "$PROJECT_DIR" echo "[3/5] بناء النسخة النهائية (release)..." swift build --configuration release --package-path "$PROJECT_DIR" EXECUTABLE_PATH="$PROJECT_DIR/.build/release/$PRODUCT_NAME" if [[ ! -x "$EXECUTABLE_PATH" ]]; then echo "ERROR: Release executable not found: $EXECUTABLE_PATH" >&2 exit 1 fi echo "[4/5] إنشاء app bundle باسم to-moh..." mkdir -p "$STAGING_APP/Contents/MacOS" "$STAGING_APP/Contents/Resources" # نسخ Info.plist مع تعديل اسم العرض cp "$PROJECT_DIR/Info.plist" "$STAGING_APP/Contents/Info.plist" # تغيير اسم العرض (اختياري — يبقى الاسم الداخلي Fchaty لكن الأيقونة والملف باسم to-moh) cp "$EXECUTABLE_PATH" "$STAGING_APP/Contents/MacOS/$PRODUCT_NAME" cp "$ICON_PATH" "$STAGING_APP/Contents/Resources/Fchaty.icns" # التوقيع (ad-hoc — كافي للاستخدام الشخصي) codesign --force --sign - --timestamp=none --entitlements "$PROJECT_DIR/FchatyApp.entitlements" "$STAGING_APP" # ─── النسخ لسطح المكتب ─────────────────────────────────────────────────────── echo "[5/5] نقل النسخة لسطح المكتب..." # حذف نسخة قديمة إذا موجودة if [[ -e "$OUTPUT_APP" ]]; then rm -rf "$OUTPUT_APP" fi if [[ -e "$OUTPUT_ZIP" ]]; then rm -f "$OUTPUT_ZIP" fi mv "$STAGING_APP" "$OUTPUT_APP" # إنشاء ملف zip جاهز للإرسال echo "إنشاء ملف zip للإرسال..." cd "$DESKTOP_DIR" zip -r -q "to-moh.zip" "to-moh.app" echo "" echo "========================================" echo " تم بنجاح!" echo "========================================" echo "" echo "الملفات على سطح المكتب:" echo " - to-moh.app (التطبيق — يمكنك تجربته)" echo " - to-moh.zip (مضغوط — أرسله لمحمد)" echo "" echo "ملاحظات مهمة:" echo " - محمد لازم يفك الضغط ويحط التطبيق بمجلد Applications" echo " - أول مرة يفتحه رح يطلعله تحذير أمان" echo " - يروح على System Settings → Privacy & Security → يسمح بالتطبيق" echo " - أو يضغط كليك يمين على التطبيق → Open" echo "" echo "النسخة التي تشغلها أنت:" echo " شغّل: ./scripts/run-macos-app.sh" echo " هذا يثبت النسخة بـ /Applications/Fchaty.app" echo ""