ذاكرة التخزين المؤقت للوحدة النمطية
REQUIREMENTS
توفر ذاكرة التخزين المؤقت لوحدات Tuist Module Storage طريقة قوية لتحسين أوقات الإنشاء الخاصة بك عن طريق تخزين وحداتك النمطية كثنائيات (.xcframeworks) ومشاركتها عبر بيئات مختلفة. تسمح لك هذه الإمكانية بالاستفادة من الثنائيات التي تم إنشاؤها مسبقًا، مما يقلل من الحاجة إلى التجميع المتكرر وتسريع عملية التطوير.
الاحترار
يستغل تويست بكفاءة يستخدم تجزئة لكل هدف في الرسم البياني للتبعية لاكتشاف التغييرات. وباستخدام هذه البيانات، يقوم بإنشاء وتعيين معرّفات فريدة للثنائيات المشتقة من هذه الأهداف. في وقت إنشاء الرسم البياني، يستبدل تويست الأهداف الأصلية بسلاسة بالنسخ الثنائية المقابلة لها.
تنتج هذه العملية، المعروفة باسم "التسخين"، ثنائيات للاستخدام المحلي أو للمشاركة مع زملاء الفريق وبيئات CI عبر Tuist. عملية تسخين ذاكرة التخزين المؤقت مباشرة ويمكن أن تبدأ بأمر بسيط:
bash
tuist cacheيعيد الأمر استخدام الثنائيات لتسريع العملية.
الاستخدام
بشكل افتراضي، عندما تستلزم أوامر Tuist إنشاء مشروع، فإنها تستبدل التبعيات تلقائيًا بمكافئاتها الثنائية من ذاكرة التخزين المؤقت، إذا كانت متوفرة. بالإضافة إلى ذلك، إذا قمت بتحديد قائمة بالأهداف المراد التركيز عليها، فسيقوم تويست أيضًا باستبدال أي أهداف تابعة بثنائياتها المخزنة مؤقتًا، شريطة أن تكون متوفرة. بالنسبة لأولئك الذين يفضلون نهجًا مختلفًا، هناك خيار لإلغاء الاشتراك في هذا السلوك تمامًا باستخدام علامة محددة:
bash
tuist generate # Only dependencies
tuist generate Search # Dependencies + Search dependencies
tuist generate Search Settings # Dependencies, and Search and Settings dependencies
tuist generate --no-binary-cache # No cache at allbash
tuist testWARNING
التخزين المؤقت الثنائي هو ميزة مصممة لسير عمل التطوير مثل تشغيل التطبيق على جهاز محاكاة أو جهاز، أو تشغيل الاختبارات. وهي غير مخصصة لإصدارات الإصدار. عند أرشفة التطبيق، قم بإنشاء مشروع مع المصادر باستخدام العلامة --no-binary-cache.
ملفات تعريف ذاكرة التخزين المؤقت
يدعم تويست ملفات تعريف ذاكرة التخزين المؤقت للتحكم في كيفية استبدال الأهداف بقوة بالثنائيات المخزنة مؤقتًا عند إنشاء المشاريع.
- مدمجة:
خارجي فقط: استبدال التبعيات الخارجية فقط (افتراضي للنظام)كل ما يمكن: استبدال أكبر عدد ممكن من الأهداف (بما في ذلك الأهداف الداخلية)لا شيء: لا تستبدل أبدًا بالثنائيات المخزنة مؤقتًا
حدد ملف تعريف باستخدام - ملف تعريف ذاكرة التخزين المؤقت على توليد:
bash
# Built-in profiles
tuist generate --cache-profile all-possible
# Custom profiles (defined in Tuist Config)
tuist generate --cache-profile development
# Use config default (no flag)
tuist generate
# Focus on specific targets (implies all-possible)
tuist generate MyModule AnotherTarget
# Disable binary replacement entirely (backwards compatible)
tuist generate --no-binary-cache # equivalent to --cache-profile noneالأسبقية عند حل السلوك الفعال (من الأعلى إلى الأدنى):
--لا يوجد ذاكرة تخزين مؤقت ثنائية→ الملف الشخصيلا شيء- التركيز على الهدف (تمرير الأهداف إلى
توليد) → الملف الشخصيكل شيء ممكن --ملف تعريف ذاكرة التخزين المؤقت <القيمة>- التكوين الافتراضي (إذا تم تعيينه)
- النظام الافتراضي (
فقط-خارجي)
المنتجات المدعومة
المنتجات المستهدفة التالية فقط هي التي يمكن تخزينها مؤقتًا بواسطة Tuist:
- أطر العمل (الثابتة والديناميكية) التي لا تعتمد على [XCTest] (https://developer.apple.com/documentation/xctest)
- الحزم
- وحدات ماكرو سويفت
نحن نعمل على دعم المكتبات والأهداف التي تعتمد على XCTest.
UPSTREAM DEPENDENCIES
عندما يكون الهدف غير قابل للتخزين المؤقت، فإنه يجعل الأهداف الأولية غير قابلة للتخزين المؤقت أيضًا. على سبيل المثال، إذا كان لديك الرسم البياني التبعي A > B ، حيث يعتمد A على B، إذا كان B غير قابل للتخزين المؤقت، فإن A سيكون غير قابل للتخزين المؤقت أيضًا.
الكفاءة
يعتمد مستوى الكفاءة التي يمكن تحقيقها باستخدام التخزين المؤقت الثنائي بشكل كبير على بنية الرسم البياني. لتحقيق أفضل النتائج، نوصي بما يلي:
- تجنب الرسوم البيانية التبعية المتداخلة جداً. كلما كان الرسم البياني ضحلًا، كان ذلك أفضل.
- عرّف التبعيات بأهداف البروتوكول/الواجهة بدلاً من أهداف التنفيذ، وتطبيقات حقن التبعية من الأهداف العليا.
- قم بتقسيم الأهداف التي يتم تعديلها بشكل متكرر إلى أهداف أصغر يكون احتمال تغييرها أقل.
الاقتراحات المذكورة أعلاه هي جزء من البنية المعيارية، والتي نقترحها كطريقة لهيكلة مشاريعك لتحقيق أقصى قدر من الفوائد ليس فقط من التخزين المؤقت الثنائي ولكن أيضًا من قدرات Xcode.
الإعداد الموصى به
نوصي بوجود مهمة CI التي تعمل في كل التزام في الفرع الرئيسي لتدفئة ذاكرة التخزين المؤقت. سيضمن ذلك احتواء ذاكرة التخزين المؤقت دائمًا على ثنائيات للتغييرات في الرئيسي بحيث يتم بناء الفرع المحلي وفرع CI بشكل تدريجي عليها.
CACHE WARMING USES BINARIES
ويستفيد الأمر tuist cache أيضًا من ذاكرة التخزين المؤقت الثنائية لتسريع عملية التسخين.
فيما يلي بعض الأمثلة على عمليات سير العمل الشائعة:
مطور يبدأ العمل على ميزة جديدة
- ينشئون فرعًا جديدًا من
الرئيسي. - يتم تشغيلها
تويست توليد. - يقوم تويست بسحب أحدث الثنائيات من
الرئيسيويُنشئ المشروع بها.
مطور يدفع بالتغييرات إلى الأعلى
- سيقوم خط أنابيب CI بتشغيل
xcodebuild buildأوtuist testلبناء أو اختبار المشروع. - سيقوم سير العمل بسحب أحدث الثنائيات من
الرئيسيوإنشاء المشروع بها. - ثم يقوم بعد ذلك ببناء المشروع أو اختباره بشكل تدريجي.
التكوين
حد التزامن في ذاكرة التخزين المؤقت
بشكل افتراضي، يقوم تويست بتنزيل وتحميل القطع الأثرية من ذاكرة التخزين المؤقت دون أي حد للالتزامن، مما يزيد من الإنتاجية. يمكنك التحكم في هذا السلوك باستخدام متغير البيئة TUIST_CACHE_CONCACHE_CONCURRENCY_LIMIT:
bash
# Set a specific concurrency limit
export TUIST_CACHE_CONCURRENCY_LIMIT=10
tuist generate
# Use "none" for no limit (default behavior)
export TUIST_CACHE_CONCURRENCY_LIMIT=none
tuist generateيمكن أن يكون هذا مفيداً في البيئات ذات النطاق الترددي المحدود للشبكة أو لتقليل حمل النظام أثناء عمليات التخزين المؤقت.
استكشاف الأخطاء وإصلاحها
لا يستخدم الثنائيات لأهدافي
تأكد من أن تكون التجزئة حتمية عبر البيئات وعمليات التشغيل. قد يحدث هذا إذا كان المشروع يحتوي على مراجع للبيئة، على سبيل المثال من خلال مسارات مطلقة. يمكنك استخدام الأمر diff لمقارنة المشاريع التي تم إنشاؤها بواسطة استدعاءين متتاليين للأمر tuist توليد أو عبر البيئات أو عمليات التشغيل.
تأكد أيضًا من أن الهدف لا يعتمد بشكل مباشر أو غير مباشر على هدف غير قابل للتخزين المؤقت.
الرموز المفقودة
عند استخدام المصادر، يمكن لنظام بناء Xcode، من خلال البيانات المشتقة، حل التبعيات التي لم يتم الإعلان عنها صراحةً. ومع ذلك، عند الاعتماد على ذاكرة التخزين المؤقت الثنائي، يجب الإعلان عن التبعيات بشكل صريح؛ وإلا سترى على الأرجح أخطاء في التحويل البرمجي عندما يتعذر العثور على الرموز. لتصحيح هذا الأمر، نوصي باستخدام الأمر tuist فحص الواردات الضمنية وإعداده في CI لمنع حدوث انحدارات في الربط الضمني.
