# new project

---

هذه شاشة اختيار القالب في Xcode عند إنشاء مشروع جديد. ما يظهر هنا:

![صورة](https://alimoustafa.in/mentor/storage/uploads/j5MTYNT6CjfjzmDibKGtYpodPsNwe7wE8RqTXnSw.png)

شاشة إعداد مشروع جديد في Xcode – شرح كل خانة:

- **Product Name**: اسم التطبيق/الموديول. سيظهر للمستخدمين (يمكن تغييره لاحقاً) ويُستخدم أيضاً في أسماء الملفات/المجلدات داخل المشروع.
- **Team**: حساب Apple Developer الذي سيستخدم في التوقيع (Code Signing). اختَر حسابك أو الفريق كي تتمكن من التشغيل على جهاز حقيقي ورفع التطبيق للمتجر. لو تركته None سيعمل على السيموليتر فقط حتى تضبط التوقيع لاحقاً.
- **Organization Identifier**: معرّف عكسي لشركتك أو نطاقك (مثلاً `com.company`). Xcode يدمجه مع اسم المنتج لتكوين الـ Bundle ID. يجب أن يكون فريداً لك.
- **Bundle Identifier**: يُولَّد تلقائياً بصيغة `orgId.ProductName`، ويجب أن يكون فريداً عالمياً لكل تطبيق على App Store أو TestFlight. يمكنك تغييره يدوياً إذا احتجت.
- **Interface**: اختيار إطار الواجهات:
  - `SwiftUI`: واجهات مبنية بـ SwiftUI declarative.
  - `Storyboard`/`UIKit`: لو اخترتها سترى Storyboard بدلاً من SwiftUI (غير ظاهر هنا لكن يظهر في قائمة الاختيار).
- **Language**: لغة الكود الرئيسية (Swift أو Objective‑C). هنا محدد Swift.
- **Testing System**: نظام الاختبار الذي يضاف تلقائياً:
  - `XCTest` (يظهر كـ “Unit Tests” و “UI Tests”) أو `None` لتعطيل إنشاء أهداف الاختبار مبدئياً.
- **Storage**: إضافة تهيئة للبيانات:
  - `None`: بدون تهيئة.
  - `Core Data`: يضيف نموذج Core Data و boilerplate.
  - إذا فعّلت Core Data، يظهر خيار “Host in CloudKit” لتخزين البيانات في iCloud عبر CloudKit؛ يتطلب إعداد Capability والتوقيع.
- **Host in CloudKit** (رمادي هنا لأنه معطّل بدون اختيار Core Data): يمكّن مزامنة Core Data مع iCloud.

اختصارات عملية:
- لو ستنشر: اضبط Team + Bundle ID فريد.  
- لو تريد أقل إعدادات: اترك Storage = None، Testing = None، واختر SwiftUI/Swift كما هو.  
- تغيير Organization Identifier لاحقاً يغيّر Bundle ID، لذا احسمه من البداية.

![صورة](https://alimoustafa.in/mentor/storage/uploads/P4AXMMKjBo9X2XFJxA5L8YQv1vpPC4MT3cMph6B0.png)

الخيار ده يعني: “أنشئ مستودع Git للمشروع على جهازي”. إذا فعّلته، Xcode سيعمل `git init` في مجلد المشروع ويضيف ملفات التتبع تلقائياً.

متى تفعّله؟
- مشروع جديد وتريد بدء التحكم في الإصدارات فوراً.
- ناوي تدفع الكود لاحقاً إلى GitHub أو Bitbucket.

متى تطفئه؟
- لو عندك بالفعل مستودع (ستعمل `git clone` مثلاً) أو ستستخدم إدارة مختلفة.
- لو تريد إنشاء المشروع داخل مستودع مهيّأ مسبقاً (تفادي إنشاء Git داخل Git).

![صورة](https://alimoustafa.in/mentor/storage/uploads/FFjpd1aVl7BfymYsXg2DTF9OnerrHhhqa69ekk0L.png)

اللي على اليمين اسمه
Inspector Panel
اللي على اليسار اسمه
Project Navigator
اللي تحت اسمه
Debug Area
وفيه Code review
وفيه ال editor
وفيه ال ال tool bar

```
┌─────────────────────────────────────┐
│           Toolbar ⬆️                 │
├──────────┬──────────────┬───────────┤
│ Project  │              │ Inspector │
│Navigator │    Editor    │   Panel   │
│  ⬅️      │    🖊️        │    ➡️     │
├──────────┴──────────────┴───────────┤
│           Debug Area ⬇️             │
└─────────────────────────────────────┘
```

![صورة](https://alimoustafa.in/mentor/storage/uploads/MXsfsW6Ey71JyfB3VTj1J9tq6yj90wTZXpGuRihS.png)

![صورة](https://alimoustafa.in/mentor/storage/uploads/7HyYYpRIft2mFn5onXmmMSjHoJsbtYGMrPhK5Nop.png)

# قائمة الـ Editor في Xcode 📝

---

## 1️⃣ Show Editor Only `⌘↩`
يخفي كل حاجة ويخليك شايف **الكود بس** بدون Canvas أو أي حاجة تانية.

---

## 2️⃣ Canvas `⌥⌘↩`
يظهر/يخفي **المعاينة** (الـ Preview) على اليمين.

---

## 3️⃣ Assistant `^⌥⌘↩`
يفتح **ملف تاني** جنب الكود، مفيد لما تعمل UI وكود مع بعض.

---

## 4️⃣ Layout
تحكم في **ترتيب النوافذ** جنب بعض.

---

## 5️⃣ Inline Comparison
مقارنة التغييرات **جوه نفس الملف**.

---

## 6️⃣ Side By Side Comparison ✅
مقارنة **ملفين جنب بعض** *(مفعّل عندك دلوقتي)*.

---

## 7️⃣ Minimap ✅ `^⇧⌘M`
الخريطة الصغيرة على **يمين الكود** للتنقل السريع.

---

## 8️⃣ Authors `^⇧⌘A`
بيظهر **مين كتب كل سطر** في الكود ومتى (Git).

---

## 9️⃣ Code Coverage `^⇧⌘A`
بيظهر **أي أجزاء من الكود اتاختبرت** بالـ Tests.

---

## 🔟 Invisibles ✅
بيظهر **المسافات والـ Tabs** كرموز صغيرة في الكود.

---

## 1️⃣1️⃣ Wrap Lines ✅ `^⇧⌘L`
السطر الطويل **بيلف لسطر جديد** بدل ما يختفي على اليمين.

---

> الأكتر استخداماً: **Canvas + Minimap + Wrap Lines** 🎯

Project Settings أو Project Configuration
وبتوصلها لما بتضغط على اسم المشروع في الـ Project Navigator.

# نعم! ✅ بس المسمى الأدق هو...

**Project Settings** أو **Project Configuration**

> ببساطة: دي **صفحة إعدادات المشروع كله** 🎯

وبتوصلها لما بتضغط على **اسم المشروع** في الـ Project Navigator.

---

## اللي شايفه في الصفحة دي:

### 🗂️ التبويبات فوق:
| التبويب | وظيفته |
|---------|---------|
| **General** | الإعدادات الأساسية *(أنت فيه دلوقتي)* |
| **Signing & Capabilities** | شهادات النشر على App Store |
| **Resource Tags** | تحميل الملفات عند الطلب |
| **Info** | معلومات التطبيق |
| **Build Settings** | إعدادات البناء المتقدمة |
| **Build Phases** | مراحل بناء التطبيق |
| **Build Rules** | قواعد البناء |

---

## 📋 اللي شايفه في General:

- **Supported Destinations** — التطبيق هيشتغل على إيه؟ *(iPhone, iPad, Mac, Vision Pro)*
- **Minimum Deployments** — أقل iOS يشتغل عليه = **iOS 26.2**
- **Identity** — معلومات التطبيق:
  - **Bundle Identifier** = `iti.firstswiftui` *(الـ ID الفريد للتطبيق)*
  - **Version** = 1.0
  - **Build** = 1
- **Deployment Info** — اتجاهات الشاشة *(Portrait, Landscape...)*

# قسم الـ Identity 🪪

ده بيحدد **هوية التطبيق** — يعني معلوماته الأساسية.

---

## شرح كل حقل:

### 🗂️ App Category — `None`
- فئة التطبيق على الـ **App Store**
- مثلاً: Education, Games, Health...
- مهم لما تنشر التطبيق

---

### 📛 Display Name — فاضي
- **الاسم اللي هيظهر تحت أيقونة التطبيق** على الموبايل
- لو فاضي هيأخذ اسم المشروع تلقائياً
- مثلاً: لو كتبت "My App" ده اللي هيظهر على الهاتف

---

### 🔑 Bundle Identifier — `iti.firstswiftui`
- **الـ ID الفريد للتطبيق في العالم كله**
- مثل البصمة — مفيش تطبيقين ليهم نفس الـ Bundle ID
- الصيغة دايماً: `اسم_الشركة.اسم_التطبيق`
- مهم جداً للنشر على الـ App Store

---

### 🔢 Version — `1.0`
- **رقم الإصدار** اللي بيشوفه المستخدم
- بيتغير مع كل **تحديث كبير** للتطبيق
- مثلاً: 1.0 ← 1.1 ← 2.0

---

### 🏗️ Build — `1`
- **رقم داخلي** للمطور وـ Apple
- بيزيد مع كل **رفع للـ App Store** حتى لو نفس الـ Version
- المستخدم مش بيشوفه

---

> ببساطة: **Identity = بطاقة تعريف التطبيق** 🎯

---

# قسم الـ Deployment Info 📱

ده بيحدد **كيفية تشغيل التطبيق** على الأجهزة.

---

## 📐 iPhone Orientation — اتجاهات الشاشة على iPhone

| الخيار | الحالة | المعنى |
|--------|--------|---------|
| **Portrait** | ✅ | الهاتف عمودي *(الوضع الطبيعي)* |
| **Upside Down** | ❌ | عمودي بس مقلوب |
| **Landscape Left** | ✅ | أفقي لليسار |
| **Landscape Right** | ✅ | أفقي لليمين |

> **Upside Down مش مفعّل على iPhone** لأن Apple شالته من الـ iPhone من زمان

---

## 📐 iPad Orientation — اتجاهات الشاشة على iPad

| الخيار | الحالة |
|--------|--------|
| **Portrait** | ✅ |
| **Upside Down** | ✅ |
| **Landscape Left** | ✅ |
| **Landscape Right** | ✅ |

> على الـ **iPad كل الاتجاهات مفعّلة** لأن المستخدم بيمسكه بكل الطرق

---

## 🔲 Status Bar Style — `Default`
شريط الوقت والبطارية فوق الشاشة، عنده 3 خيارات:
- **Default** = تلقائي حسب الخلفية
- **Light** = أبيض دايماً
- **Dark** = أسود دايماً

---

## 👁️ Hide during application launch
لو اتفعّل = **يخفي الـ Status Bar** لحظة فتح التطبيق

---

## 🎬 Scene Manifest
إعدادات متقدمة لإدارة **نوافذ التطبيق** (مهم للـ iPad و Mac)

---

> ببساطة: **Deployment Info = بتحدد شكل وسلوك التطبيق على الجهاز** 🎯

# قسم App Icons and Launch Screen 🎨

ده بيحدد **أيقونة التطبيق وشاشة البداية**.

---

## 🖼️ App Icon — `AppIcon`
- ده اسم مجموعة الأيقونات في الـ **Assets**
- بتروح لـ Assets وتحط فيه أيقونات بأحجام مختلفة
- Apple محتاجة أحجام كتير مثلاً:
  - 20x20, 29x29, 40x40, 60x60... إلخ

---

## 📦 App Icons Source — `Include all app icon assets`
- لو اتفعّل = يشمل **كل الأيقونات** من الـ Assets
- مفيد لو عندك أيقونات بديلة للتطبيق

---

## 🚀 Launch Screen File — فاضي
- **شاشة السبلاش** = الشاشة اللي بتظهر لحظة فتح التطبيق
- لو فاضي = شاشة بيضاء فاضية
- ممكن تعمل ملف **LaunchScreen** وتحدده هنا

---

## الفرق بين الاتنين:

```
فتح التطبيق
      ↓
Launch Screen 🚀  ← شاشة البداية (ثواني)
      ↓
App Icon 🖼️       ← الأيقونة على الهوم سكرين
```

---

> ببساطة: **أيقونة التطبيق + أول شاشة بتظهر لما يفتح** 🎯

![صورة](https://alimoustafa.in/mentor/storage/uploads/34Dk6LnlvwKHL1Co69MoEiV5vD6sdRzK2UkNUpjb.png)