Swift CLI مع ArgumentParser: إنشاء أدوات سطر أوامر قوية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إطار عمل CLI لـ Swift (iOS/macOS): ArgumentParser



في عالم التطوير لنظام Apple البيئي، غالبًا ما تنشأ الحاجة لإنشاء ليس فقط تطبيقات رسومية، بل أيضًا أدوات سطر أوامر قوية. سواء كان ذلك لأتمتة البناء، معالجة البيانات، أو إنشاء أدوات مساعدة لـ iOS/macOS — لا يمكن الاستغناء عن CLI (واجهة سطر الأوامر) عالي الجودة. لهذه الأغراض، تقدم Apple إطار العمل الرسمي ArgumentParser، المضمن في Swift Package Manager. إنها أداة حديثة، آمنة من حيث الأنواع، وتصريحية، تتيح لك إنشاء تطبيقات سطر أوامر بلغة Swift بأقل جهد.



على عكس التحليل البسيط للوسائط عبر CommandLine.arguments، يوفر ArgumentParser نهجًا منظمًا: تصف الأوامر، العلامات، والخيارات كخصائص لهياكلك، ويقوم الإطار تلقائيًا بإنشاء التعليمات، معالجة الأخطاء، والتحقق من صحة الإدخال. دعنا نتعرف على كيفية استخدام هذا الإطار لـ macOS و iOS (عبر Swift Package Manager).



التثبيت والإضافة



لا يتطلب ArgumentParser تثبيتًا منفصلًا — فهو متاح ضمن المكتبة القياسية لـ Swift (بدءًا من Swift 5.5). لاستخدامه في مشروعك، أضف التبعية في ملف Package.swift:



// swift-tools-version:5.7import PackageDescription

let package = Package( name: "MyCLI", dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser", from: "1.2.0") ], targets: [ .executableTarget( name: "MyCLI", dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser") ] ) ])


بالنسبة لمشاريع iOS، يمكن إضافة الإطار عبر Swift Package Manager في Xcode، مع تحديد نفس المستودع. ومع ذلك، تجدر الإشارة إلى أن تطبيقات CLI تُنشأ عادةً لـ macOS، ولكن يمكن استخدام المكتبة أيضًا في تطبيقات iOS للتحليل الداخلي للنصوص.



المفاهيم الأساسية



يُبنى ArgumentParser حول ثلاث كيانات رئيسية:



  • الأوامر (ParsableCommand) — العنصر الأساسي، يمثل أمرًا واحدًا في CLI. كل أمر هو هيكل يطبق بروتوكول ParsableCommand.
  • الوسائط (@Argument) — معاملات موضعية، إلزامية الإدخال.
  • الخيارات (@Option) — معاملات مسماة بعلامات طويلة (--name) وقصيرة (-n).
  • العلامات (@Flag) — مفاتيح تشغيل منطقية (--verbose, --quiet).


مثال: إنشاء آلة حاسبة بسيطة عبر CLI



لننشئ تطبيق سطر أوامر لـ macOS يقوم بإجراء العمليات الحسابية الأساسية:



import ArgumentParser

struct Calculator: ParsableCommand { static let configuration = CommandConfiguration( commandName: "calc", abstract: "آلة حاسبة بسيطة لسطر الأوامر", discussion: "تدعم الجمع، الطرح، الضرب، والقسمة." )

@Argument(help: "الرقم الأول") var firstNumber: Double

@Argument(help: "الرقم الثاني") var secondNumber: Double

@Option(name: [.short, .long], help: "العملية: add, sub, mul, div") var operation: String = "add"

@Flag(name: [.short, .long], help: "إخراج مفصل") var verbose: Bool = false

mutating func run() throws { let result: Double switch operation { case "add": result = firstNumber + secondNumber case "sub": result = firstNumber - secondNumber case "mul": result = firstNumber * secondNumber case "div": guard secondNumber != 0 else { throw ValidationError("القسمة على صفر!") } result = firstNumber / s

توصيات