إدارة الإصدارات وحل التعارضات وإضافات Swift
أديروا نطاقات الإصدارات وحلّوا تعارضات التبعيات واستخدموا إضافات أدوات البناء.
إدارة الإصدارات وحل التعارضات وإضافات Swift درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
الإصدار الدلالي في SPM
يستخدم SPM الإصدار الدلالي: MAJOR.MINOR.PATCH. عرّف المتطلبات باستخدام from: أو exact: أو .upToNextMajor.
.package(url: "https://github.com/apple/swift-log", from: "1.5.0"),
.package(url: "https://github.com/vapor/vapor", exact: "4.83.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture",
.upToNextMajor(from: "1.0.0"))Package.resolved
يثبّت Package.resolved الإصدارات الدقيقة لجميع التبعيات. أدرجه في التطبيقات، واحذفه من المكتبات.
// Package.resolved (auto-generated):
// Pins exact commit hash and version for every dependency
// Run "swift package update" to update pinned versionsحل تعارضات الإصدارات
عندما تتطلب حزمتان إصدارين مختلفين من التبعية نفسها، يحاول SPM العثور على إصدار متوافق. وتؤدي التعارضات التي يتعذر حلها إلى حدوث خطأ في البناء.
// PackageA requires Logging 1.4.0
// PackageB requires Logging 1.5.0
// SPM resolves to 1.5.0 (satisfies both >= 1.x)
// Conflict: PackageA requires Logging 1.x, PackageB requires 2.xفرض إصدار محدد
أضف التبعية المتعارضة مباشرةً إلى Package.swift الخاص بتطبيقك لتجاوز الإصدار الذي سيختاره SPM خلاف ذلك.
// Force Logging 1.5.0 by declaring it directly:
.package(url: "https://github.com/apple/swift-log", exact: "1.5.0")إضافات أدوات البناء
تعمل إضافات أدوات البناء أثناء عملية البناء لإنشاء الشيفرة المصدرية، أو معالجة الموارد، أو تشغيل أدوات فحص الشيفرة تلقائيًا.
// In Package.swift:
.plugin(
name: "SourceGenerator",
capability: .buildTool()
)تنفيذ إضافة لأداة بناء
تلتزم إضافة أداة البناء بالبروتوكول BuildToolPlugin، وتعيد عناصر من النوع BuildCommand أو PrebuildCommand.
import PackagePlugin
@main
struct SourceGenerator: BuildToolPlugin {
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
let output = context.pluginWorkDirectory.appending("Generated.swift")
return [.buildCommand(
displayName: "Generating sources",
executable: try context.tool(named: "gen-tool").path,
arguments: ["--output", output],
outputFiles: [output]
)]
}
}إضافات الأوامر
تعمل إضافات الأوامر عند الطلب من Xcode أو سطر الأوامر، وهي مفيدة لتنسيق الشيفرة، أو فحصها، أو إنشاء الوثائق.
// In Package.swift:
.plugin(
name: "FormatPlugin",
capability: .command(intent: .sourceCodeFormatting())
)تشغيل إضافة أوامر
نفّذ إضافات الأوامر من الطرفية أو من قائمة النقر بزر الفأرة الأيمن في Xcode.
// CLI:
swift package plugin format-source-code
// Xcode: right-click target → "Format Source Code"استخدام SwiftLint كإضافة بناء
يأتي SwiftLint على شكل إضافة لـ SPM تعمل تلقائيًا مع كل عملية بناء.
.package(url: "https://github.com/realm/SwiftLint", from: "0.54.0"),
// In target:
.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint")بيئة الإضافة المعزولة
تعمل الإضافات في بيئة معزولة ذات وصول محدود إلى نظام الملفات لأسباب أمنية. ولا يمكنها الكتابة إلا في دليل العمل المخصص لها.
// Accessible from plugins:
// context.pluginWorkDirectory — writable work dir
// context.package.directory — read-only source
// target.sourceFiles — source file listتحقق سريع
ما الغرض من Package.resolved في حزمة Swift؟
مراجعة الدرس
استخدم نطاقات الإصدار الدلالي في Package.swift. أدرج Package.resolved في التطبيقات لضمان عمليات بناء قابلة لإعادة الإنتاج. عالج تعارضات الإصدارات بتعريف التبعية مباشرةً. تعمل إضافات أدوات البناء تلقائيًا أثناء البناء، مثل أدوات فحص الشيفرة ومولّدات الشيفرة. وتعمل إضافات الأوامر عند الطلب. أما الإضافات فتعمل في بيئة معزولة لأسباب أمنية.
الأسئلة الشائعة
هل درس «إدارة الإصدارات وحل التعارضات وإضافات Swift» مجاني؟
نعم — نص درس «إدارة الإصدارات وحل التعارضات وإضافات Swift» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «إدارة الإصدارات وحل التعارضات وإضافات Swift»؟
أديروا نطاقات الإصدارات وحلّوا تعارضات التبعيات واستخدموا إضافات أدوات البناء. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «إدارة الإصدارات وحل التعارضات وإضافات Swift»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Package.swift: الأهداف والمنتجات والتبعيات
- الحزم المحلية ووحدات الميزات
- الأهداف الثنائية وXCFrameworks
- إدارة الإصدارات وحل التعارضات وإضافات Swift