# من تويست v3 إلى v4 {#from-tuist-v3-to-v4}
مع إصدار [تويست 4] (https://github.com/tuist/tuist/releases/tag/4.0.0)، انتهزنا
الفرصة لإدخال بعض التغييرات العاجلة على المشروع، والتي نعتقد أنها ستجعل المشروع
أسهل في الاستخدام والصيانة على المدى الطويل. يوضح هذا المستند التغييرات التي
ستحتاج إلى إجرائها على مشروعك للترقية من تويست 3 إلى تويست 4.
### إدارة الإصدار المسقط من خلال `tuistenv` {#dropped-version-management-through-tuistenv}
قبل تويست 4، كان البرنامج النصي للتثبيت يقوم بتثبيت أداة `tuistenv` ، والتي ستتم
إعادة تسميتها إلى `tuist` في وقت التثبيت. كانت الأداة تهتم بتثبيت وتفعيل إصدارات
تويست لضمان الحتمية عبر البيئات. وبهدف الحد من سطح ميزات تويست، قررنا التخلي عن
`tuistenv` لصالح [Mise] (https://mise.jdx.dev/)، وهي أداة تقوم بنفس المهمة
ولكنها أكثر مرونة ويمكن استخدامها عبر أدوات مختلفة. إذا كنت تستخدم `tuistenv` ،
فسيتعين عليك إلغاء تثبيت الإصدار الحالي من تويست عن طريق تشغيل `curl -Ls
https://uninstall.tuist.io | bash` ثم تثبيته باستخدام طريقة التثبيت التي
تختارها. نحن نوصي بشدة باستخدام Mise لأنه قادر على تثبيت الإصدارات وتفعيلها بشكل
حتمي عبر البيئات.
:::: code-group
```bash [Uninstall tuistenv]
curl -Ls https://uninstall.tuist.io | bash
```
::::
::: warning التحذير من الاختلاط في بيئات CI ومشاريع XCODE
إذا قررت أن تتبنى الحتمية التي يجلبها Mise في جميع المجالات، نوصي بالاطلاع على
الوثائق الخاصة بكيفية استخدام Mise في [بيئات CI]
(https://mise.jdx.dev/continuous-integration.html) و [مشاريع Xcode]
(https://mise.jdx.dev/ide-integration.html#xcode).
:::
::: info مدعومة من المنزل
لاحظ أنه لا يزال بإمكانك تثبيت تويست باستخدام Homebrew، وهو مدير حزم شهير لنظام
macOS. يمكنك العثور على الإرشادات الخاصة بكيفية تثبيت Tuist باستخدام Homebrew في
دليل التثبيت .
:::
### تم إسقاط `بدء` المنشئات من `وصف المشروع` النماذج {#dropped-init-constructors-from-projectdescription-models}
بهدف تحسين سهولة القراءة والتعبير عن واجهات برمجة التطبيقات، قررنا إزالة مُنشئات
`init` من جميع نماذج `ProjectDescription`. يوفر كل نموذج الآن منشئ ثابت يمكنك
استخدامه لإنشاء مثيلات للنماذج. إذا كنت تستخدم مُنشئ `init` البادئ ، فسيتعين
عليك تحديث مشروعك لاستخدام المنشئات الثابتة بدلاً من ذلك.
::: tip تسمية الاتفاقية
اصطلاح التسمية الذي نتبعه هو استخدام اسم النموذج كاسم المنشئ الثابت. على سبيل
المثال، المنشئ الثابت للنموذج `Target` هو `Target.target.target`.
:::
### تمت إعادة تسمية `--لا ذاكرة تخزين مؤقت` إلى `--لا ذاكرة تخزين مؤقت ثنائية` {#renamed-nocache-to-nobinarycache}
نظرًا لأن العلامة `--no-cache` كانت غامضة، قررنا إعادة تسميتها إلى `--no-cache`
لتوضيح أنها تشير إلى ذاكرة التخزين المؤقت الثنائية. إذا كنت تستخدم العلامة
`--لا-لا-ذاكرة تخزين مؤقت` ، فسيتعين عليك تحديث مشروعك لاستخدام العلامة
`--لا-ذاكرة تخزين مؤقت ثنائية` بدلاً من ذلك.
### أعيدت التسمية `tuist fetch` إلى `tuist install` {#renamed-tuist-fetch-to-tuist-install}
لقد أعدنا تسمية الأمر `tuist fetch` إلى الأمر `tuist install` ليتماشى مع العرف
السائد في المجال. إذا كنت تستخدم الأمر `tuist fetch` ، فسيتعين عليك تحديث مشروعك
لاستخدام الأمر `tuist install` بدلاً من ذلك.
### [اعتماد `Package.swift.swift` كـ DSL للتبعيات] (https://github.com/tuist/tuist/pull/5862) {#adopt-packageswift-as-the-dsl-for-dependencieshttpsgithubcomtuisttuistpull5862}
قبل تويست 4، كان بإمكانك تحديد التبعيات في ملف `Dependencies.swift.`. هذه الصيغة
الخاصة عطلت الدعم في أدوات مثل [Dependabot] (https://github.com/dependabot) أو
[Renovatebot] (https://github.com/renovatebot/renovate) لتحديث التبعيات
تلقائيًا. وعلاوةً على ذلك، فقد أدخلت عمليات توجيه غير ضرورية للمستخدمين. ولذلك،
قررنا اعتماد `Package.swift` كطريقة وحيدة لتحديد التبعيات في تويست. إذا كنت
تستخدم ملف `Dependencies.swift.swift` ، فسيتعين عليك نقل المحتوى من ملف
`Tuist/Dependencies.swift` إلى `Package.swift` في الجذر، واستخدام التوجيه `#f
TUIST` لتهيئة التكامل. يمكنك قراءة المزيد حول كيفية دمج تبعيات حزمة سويفت
هنا
### أعيدت تسميته `ذاكرة التخزين المؤقت الدافئة` إلى `ذاكرة التخزين المؤقت الدافئة` {#renamed-tuist-cache-warm-to-tuist-cache}
للإيجاز، قررنا إعادة تسمية الأمر `tuist cache warm` إلى الأمر `tuist cache`. إذا
كنت تستخدم الأمر `tuist cache warm` ، فسيتعين عليك تحديث مشروعك لاستخدام الأمر
`tuist cache` بدلاً من ذلك.
### أعيدت التسمية `tuist cache print-hashes` إلى `tuist cache --print-hashes` {#renamed-tuist-cache-printhashes-to-tuist-cache-printhashes}
لقد قررنا إعادة تسمية الأمر `tuist cache print-hashes` إلى الأمر `tuist cache
--print-hashes` لتوضيح أنه علم للأمر `tuist cache`. إذا كنت تستخدم الأمر `tuist
cache print-hashes` ، فسيتعين عليك تحديث مشروعك لاستخدام العلامة `tuist cache
--print-hashes` بدلاً من ذلك.
### ملفات تعريف التخزين المؤقت التي تمت إزالتها {#removed-caching-profiles}
قبل تويست 4، كان بإمكانك تحديد ملفات تعريف التخزين المؤقت في
`Tuist/Config.swift` والتي كانت تحتوي على تكوين لذاكرة التخزين المؤقت. لقد قررنا
إزالة هذه الميزة لأنها قد تؤدي إلى حدوث ارتباك عند استخدامها في عملية الإنشاء مع
ملف تعريف آخر غير الذي تم استخدامه لإنشاء المشروع. علاوة على ذلك، يمكن أن يؤدي
ذلك إلى استخدام المستخدمين لملف تعريف التصحيح لإنشاء إصدار من التطبيق، مما قد
يؤدي إلى نتائج غير متوقعة. بدلاً من ذلك، قدمنا الخيار `--configuration` ، والذي
يمكنك استخدامه لتحديد التكوين الذي تريد استخدامه عند إنشاء المشروع. إذا كنت
تستخدم ملفات تعريف التخزين المؤقت، فسيتعين عليك تحديث مشروعك لاستخدام الخيار `--
التكوين` بدلاً من ذلك.
### تمت الإزالة `---تخطي ذاكرة التخزين المؤقت` لصالح الحجج {#removed-skipcache-in-favor-of-arguments}
لقد أزلنا العلامة `-تخطي ذاكرة التخزين المؤقت` من الأمر `توليد` لصالح التحكم في
الأهداف التي يجب تخطي ذاكرة التخزين المؤقت الثنائية لها باستخدام الوسيطات. إذا
كنت تستخدم العلامة `-تخطي ذاكرة التخزين المؤقت` ، فسيتعين عليك تحديث مشروعك
لاستخدام الوسيطات بدلاً من ذلك.
:::: code-group
```bash [Before]
tuist generate --skip-cache Foo
```
```bash [After]
tuist generate Foo
```
::::
### [إمكانيات التوقيع المسقطة] (https://github.com/tuist/tuist/pull/5716) {#dropped-signing-capabilitieshttpsgithubcomtuisttuistpull5716}
تم حل مشكلة التوقيع بالفعل من خلال أدوات المجتمع مثل [Fastlane]
(https://fastlane.tools/) و Xcode نفسه، والتي تقوم بعمل أفضل بكثير في ذلك. شعرنا
أن التوقيع كان هدفًا ممتدًا لـ Tuist، وأنه من الأفضل التركيز على الميزات
الأساسية للمشروع. إذا كنت تستخدم إمكانيات توقيع تويست، والتي تتألف من تشفير
الشهادات والملفات الشخصية في المستودع وتثبيتها في الأماكن الصحيحة في وقت
الإنشاء، فقد ترغب في تكرار هذا المنطق في البرامج النصية الخاصة بك التي تعمل قبل
إنشاء المشروع. على وجه الخصوص:
- برنامج نصي يقوم بفك تشفير الشهادات وملفات التعريف باستخدام مفتاح مخزن إما في
نظام الملفات أو في متغير بيئة، وتثبيت الشهادات في سلسلة المفاتيح، وملفات
تعريف التزويد في الدليل `~ / Library/MobileDevice/Provisioning\ Profile`.
- برنامج نصي يمكنه أخذ ملفات التعريف والشهادات الموجودة وتشفيرها.
::: tip متطلبات توقيع الإكرامية
يتطلب التوقيع أن تكون الشهادات الصحيحة موجودة في سلسلة المفاتيح وأن تكون ملفات
تعريف التزويد موجودة في الدليل `~/مكتبة/مكتبة/موبايل ديفيديفيس/ملفات تعريف
التزويد`. يمكنك استخدام أداة سطر الأوامر `الأمان` لتثبيت الشهادات في سلسلة
المفاتيح والأمر `cp` لنسخ ملفات تعريف التزويد إلى الدليل الصحيح.
:::
### تم إسقاط تكامل قرطاج عبر `Dependendenciesswift.swift` {#dropped-carthage-integration-via-dependenciesswift}
قبل تويست 4، كان يمكن تعريف تبعيات قرطاج في ملف `Dependencies.swift` ، والذي
يمكن للمستخدمين بعد ذلك جلبه عن طريق تشغيل `tuist fetch`. لقد شعرنا أيضًا أن هذا
كان هدفًا ممتدًا لـ Tuist، خاصةً بالنظر إلى المستقبل حيث سيكون Swift Package
Manager هو الطريقة المفضلة لإدارة التبعيات. إذا كنت تستخدم تبعيات قرطاج، فسيتعين
عليك استخدام `قرطاج` مباشرةً لسحب الأطر المجمعة مسبقًا و XCFrameworks إلى دليل
قرطاج القياسي، ثم الرجوع إلى تلك الثنائيات من التاغيتات الخاصة بك باستخدام
`TargetDependency.xcframework` و `TargetDependency.framework`.
::: info لا يزال CARTHAGE مدعومًا
فهم بعض المستخدمين أننا أسقطنا دعم قرطاج. لم نفعل ذلك. العقد بين تويست ومخرجات
قرطاج هو للأطر المخزنة في النظام و XCFrameworks. الشيء الوحيد الذي تغير هو من
المسؤول عن جلب التبعيات. كان تويست من خلال قرطاج، والآن قرطاج.
:::
### تم إسقاط `TargetDependency.packagePlugin` API {#dropped-the-targetdependencypackageplugin-api}
قبل تويست 4، كان بإمكانك تحديد تبعية مكون إضافي للحزمة باستخدام حالة
`TargetDependency.packagePlugin`. بعد رؤية مدير حزم Swift Package Manager يقدم
أنواعًا جديدة من الحزم، قررنا أن نكرر واجهة برمجة التطبيقات نحو شيء أكثر مرونة
وملائمًا للمستقبل. إذا كنت تستخدم `TargetDependency.packagePlugin` ، فسيتعين
عليك استخدام `TargetDependency.package` بدلاً من ذلك، وتمرير نوع الحزمة التي
تريد استخدامها كوسيطة.
### [واجهات برمجة التطبيقات المهملة] (https://github.com/tuist/tuist/pull/5560) (https://github.com/tuist/tuist/pull/5560) {#dropped-deprecated-apishttpsgithubcomtuisttuistpull5560}
لقد أزلنا واجهات برمجة التطبيقات التي تم تمييزها على أنها مهملة في Tuist 3. إذا
كنت تستخدم أيًا من واجهات برمجة التطبيقات المهملة، فسيتعين عليك تحديث مشروعك
لاستخدام واجهات برمجة التطبيقات الجديدة.