Swift Package Manager#
يُستخدم Swift Package Manager (SPM) لبناء الكود المصدري لمشروعك واعتمادياته. بما أن Vapor يعتمد بشكل كبير على SPM، فمن الجيد فهم أساسيات كيفية عمله.
يشبه SPM كلاً من Cocoapods وRuby gems وNPM. يمكنك استخدام SPM من سطر الأوامر بأوامر مثل swift build وswift test أو مع بيئات التطوير المتكاملة (IDEs) المتوافقة. ومع ذلك، وبخلاف بعض مديري الحزم الآخرين، لا يوجد فهرس حزم مركزي لحزم SPM. بدلاً من ذلك، يعتمد SPM على عناوين URL لمستودعات Git ويُصدر الاعتماديات باستخدام وسوم Git.
بيان الحزمة (Package Manifest)#
أول مكان يبحث فيه SPM في مشروعك هو بيان الحزمة. يجب أن يكون هذا دائماً موجوداً في الدليل الجذري لمشروعك وأن يُسمّى Package.swift.
اطّلع على مثال بيان الحزمة هذا.
// swift-tools-version:5.8
import PackageDescription
let package = Package(
name: "MyApp",
platforms: [
.macOS(.v12)
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", from: "4.76.0"),
],
targets: [
.executableTarget(
name: "App",
dependencies: [
.product(name: "Vapor", package: "vapor")
]
),
.testTarget(name: "AppTests", dependencies: [
.target(name: "App"),
.product(name: "XCTVapor", package: "vapor"),
])
]
)
يُشرح كل جزء من البيان في الأقسام التالية.
إصدار الأدوات (Tools Version)#
يشير السطر الأول من بيان الحزمة إلى إصدار أدوات Swift المطلوب. يحدد هذا الحد الأدنى لإصدار Swift الذي تدعمه الحزمة. قد تتغير أيضاً واجهة برمجة تطبيقات وصف الحزمة (Package description API) بين إصدارات Swift، لذا يضمن هذا السطر أن يعرف Swift كيفية تحليل بيانك.
اسم الحزمة (Package Name)#
الوسيط الأول لـ Package هو اسم الحزمة. إذا كانت الحزمة عامة، فيجب عليك استخدام آخر جزء من عنوان URL لمستودع Git كاسم لها.
المنصّات (Platforms)#
يحدد مصفوفة platforms المنصّات التي تدعمها هذه الحزمة. بتحديد .macOS(.v12)، تتطلب هذه الحزمة macOS 12 أو أحدث. عندما يحمّل Xcode هذا المشروع، سيقوم تلقائياً بتعيين الحد الأدنى لإصدار النشر إلى macOS 12 حتى تتمكن من استخدام جميع واجهات API المتاحة.
الاعتماديات (Dependencies)#
الاعتماديات هي حزم SPM أخرى تعتمد عليها حزمتك. تعتمد جميع تطبيقات Vapor على حزمة Vapor، ولكن يمكنك إضافة أي عدد تريده من الاعتماديات الأخرى.
في المثال أعلاه، يمكنك أن ترى أن vapor/vapor الإصدار 4.76.0 أو أحدث هو اعتمادية لهذه الحزمة. عند إضافة اعتمادية إلى حزمتك، يجب عليك بعد ذلك الإشارة إلى أي أهداف (targets) تعتمد على الوحدات المتاحة حديثاً.
الأهداف (Targets)#
الأهداف هي جميع الوحدات والملفات التنفيذية والاختبارات التي تحتوي عليها حزمتك. ستحتوي معظم تطبيقات Vapor على هدفين، مع أنه يمكنك إضافة أي عدد تريده لتنظيم كودك. يعلن كل هدف عن الوحدات التي يعتمد عليها. يجب عليك إضافة أسماء الوحدات هنا لتتمكن من استيرادها في كودك. يمكن أن يعتمد الهدف على أهداف أخرى في مشروعك أو أي وحدات تكشفها الحزم التي أضفتها إلى مصفوفة الاعتماديات الرئيسية.
هيكل المجلدات#
فيما يلي هيكل المجلدات النموذجي لحزمة SPM.
.
├── Sources
│ └── App
│ └── (Source code)
├── Tests
│ └── AppTests
└── Package.swift
يتوافق كل .target أو .executableTarget مع مجلد في مجلد Sources.
يتوافق كل .testTarget مع مجلد في مجلد Tests.
Package.resolved#
في المرة الأولى التي تبني فيها مشروعك، سيُنشئ SPM ملف Package.resolved الذي يخزّن إصدار كل اعتمادية. في المرة التالية التي تبني فيها مشروعك، ستُستخدم هذه الإصدارات نفسها حتى لو كانت هناك إصدارات أحدث متاحة.
لتحديث اعتمادياتك، نفّذ swift package update.
Xcode#
إذا كنت تستخدم Xcode 11 أو أحدث، فستحدث التغييرات على الاعتماديات والأهداف والمنتجات وما إلى ذلك تلقائياً كلما عُدّل ملف Package.swift.
إذا كنت تريد التحديث إلى أحدث الاعتماديات، فاستخدم File → Swift Packages → Update To Latest Swift Package Versions.
قد ترغب أيضاً في إضافة ملف .swiftpm إلى .gitignore الخاص بك. هذا هو المكان الذي سيخزّن فيه Xcode تكوين مشروع Xcode الخاص بك.