مشاركة الرموز
أحد مضايقات Xcode عندما نستخدمه مع المشاريع الكبيرة هو أنه لا يسمح بإعادة
استخدام عناصر المشاريع بخلاف إعدادات الإنشاء من خلال .xcconfig الملفات. إن
القدرة على إعادة استخدام تعريفات المشروع مفيدة للأسباب التالية:
- إنه يسهل عملية الصيانة الصيانة لأنه يمكن تطبيق التغييرات في مكان واحد وتحصل جميع المشاريع على التغييرات تلقائيًا.
- يجعل من الممكن تحديد الاتفاقيات التي يمكن أن تتوافق معها المشاريع الجديدة.
- تكون المشاريع أكثر اتساقًا متناسقة وبالتالي فإن احتمالية تعطل عمليات الإنشاء بسبب التناقضات أقل بكثير.
- تصبح إضافة مشاريع جديدة مهمة سهلة لأنه يمكننا إعادة استخدام المنطق الحالي.
إعادة استخدام التعليمات البرمجية عبر ملفات البيان ممكنة في تويست بفضل مفهوم مساعدي وصف المشروع **** .
تحب العديد من المنظمات تويست لأنها ترى في مساعدي وصف المشروع منصة لفرق المنصة لتقنين اصطلاحاتها الخاصة والتوصل إلى لغتها الخاصة لوصف مشاريعها. على سبيل المثال، يتعين على مولدي المشاريع المستندة إلى YAML أن يتوصلوا إلى حل خاص بهم قائم على YAML، أو إجبار المؤسسات على بناء أدواتهم على أساسه.
مساعدو وصف المشروع#
مساعِدات وصف المشروع هي ملفات سويفت التي يتم تجميعها في وحدة نمطية
ProjectDescriptionHelpers ، والتي يمكن لملفات البيان استيرادها. يتم تجميع
الوحدة النمطية عن طريق تجميع جميع الملفات الموجودة في الدليل تويست/مساعدو وصف المشروع.
يمكنك استيرادها إلى ملف البيان الخاص بك عن طريق إضافة عبارة استيراد في أعلى الملف:
// Project.swift
import ProjectDescription
import ProjectDescriptionHelpers
يتوفر ProjectDespeccriptionHelpers في البيانات التالية:
مشروع.سويفتالحزمة.سويفت(فقط خلف علامة المترجم#TUIST)مساحة العمل.سويفت
مثال على ذلك#
تحتوي المقتطفات أدناه على مثال على كيفية توسيع نموذج Project لإضافة منشئات
ثابتة وكيفية استخدامها من ملف Project.swift.:
:::: مجموعة الرموز
import ProjectDescription
extension Project {
public static func featureFramework(name: String, dependencies: [TargetDependency] = []) -> Project {
return Project(
name: name,
targets: [
.target(
name: name,
destinations: .iOS,
product: .framework,
bundleId: "dev.tuist.\(name)",
infoPlist: "\(name).plist",
sources: ["Sources/\(name)/**"],
resources: ["Resources/\(name)/**",],
dependencies: dependencies
),
.target(
name: "\(name)Tests",
destinations: .iOS,
product: .unitTests,
bundleId: "dev.tuist.\(name)Tests",
infoPlist: "\(name)Tests.plist",
sources: ["Sources/\(name)Tests/**"],
resources: ["Resources/\(name)Tests/**",],
dependencies: [.target(name: name)]
)
]
)
}
}
import ProjectDescription
import ProjectDescriptionHelpers
let project = Project.featureFramework(name: "MyFeature")
:::
لاحظ كيف أننا من خلال الدالة نحدد اصطلاحات حول اسم الأهداف، ومعرف الحزمة، وبنية المجلدات.