لماذا Swift ليس فقط لتطوير التطبيقات
\n\nعندما تسمع "Swift"، أول ما يتبادر إلى ذهنك هو تطوير iOS وXcode ولوحات القصص والقيود التي لا تنتهي. ولكن هناك جانب آخر لهذه اللغة لا يعرفه الكثيرون. Swift هي أداة قوية لـ أتمتة المهام على macOS. نحن لا نتحدث عن تجميع التطبيقات، بل عن الأمور اليومية البسيطة: إعادة تسمية مئات الملفات، تحليل تقرير CSV، إرسال إشعار في الساعة 6 مساءً، أو جمع السجلات من الخادم.
\n\nلماذا Swift بدلاً من Python أو Bash؟ لأن Swift:
\n- \n
- يعمل بشكل أصلي مع macOS (الوصول إلى
FoundationوDispatchوUserNotifications); \n - لا يتطلب بيئة افتراضية أو تبعيات (إذا لم تستخدم SPM); \n
- يعطي أخطاء ترجمة واضحة — لن تضيع ساعة في البحث عن مسافة زائدة كما في Bash; \n
- يمكن تشغيله كسكريبت بسطر واحد:
swift myScript.swift. \n
في هذه المقالة، سأعرض لكم عدة سيناريوهات حقيقية للأتمتة باستخدام Swift. يمكنكم نسخ الكود وتشغيله على أجهزتكم، والأهم من ذلك، فهم كيفية كتابة أدواتكم الخاصة. هيا بنا!
\n\nكيف يعمل سكريبت Swift: الحد الأدنى من النظرية
\n\nلكتابة أتمتة في Swift، لست بحاجة إلى Xcode. يكفي الطرفية وأي محرر نصوص. أنشئ ملفًا باسم script.swift وقم بتشغيله بالأمر:
swift script.swift\n\nسيقوم Swift بتجميع وتنفيذ الكود تلقائيًا. إذا كان السكريبت كبيرًا وتريد تسريع عمليات التشغيل المتكررة، يمكنك تجميعه مسبقًا: swiftc -O script.swift -o script وتشغيل الملف الثنائي مباشرة.
كل ما سنكتبه لاحقًا يعمل فورًا — بدون أي مكتبات خارجية. فقط Foundation الذي يتم تحميله تلقائيًا.
السيناريو الأول: إعادة تسمية الملفات بشكل مجمّع
\n\nتخيل: لديك مجلد به صور IMG_001.jpg و IMG_002.jpg ... و IMG_100.jpg. تريد إعادة تسميتها إلى Vacation_1.jpg و Vacation_2.jpg وهكذا. يدويًا — 100 عملية. بسكريبت — 0.5 ثانية.
import Foundation\n\nlet fileManager = FileManager.default\nlet currentPath = fileManager.currentDirectoryPath\n\nguard let files = try? fileManager.contentsOfDirectory(atPath: currentPath) else {\n print("فشل في قراءة المجلد")\n exit(1)\n}\n\nlet imageFiles = files.filter { $0.hasSuffix(".jpg") || $0.hasSuffix(".png") }\n\nfor (index, file) in imageFiles.enumerated() {\n let newName = "Vacation_\\(index + 1)." + (file.hasSuffix(".jpg") ? "jpg" : "png")\n let oldURL = URL(fileURLWithPath: currentPath).appendingPathComponent(file)\n let newURL = URL(fileURLWithPath: currentPath).appendingPathComponent(newName)\n \n do {\n try fileManager.moveItem(at: oldURL, to: newURL)\n print("✅ \\(file) ← \\(newName)")\n } catch {\n print("❌ خطأ مع الملف \\(file): \\(error.localizedDescription)")\n }\n}\n\nكيف يعمل هذا:
\n- \n
FileManager.default— الوصول إلى نظام الملفات; \n contentsOfDirectory— الحصول على قائمة الملفات في المجلد الحالي; \n - تصفية الصور فقط; \n
- إعادة التسمية عبر
moveItem(نعم، في Swift إعادة التسمية هي نقل). \n
يمكنك بسهولة تعديل السكريبت: تغيير البادئة، الامتدادات، إضافة التاريخ إلى الاسم. هذا بالفعل سكريبت Swift مفيد يوفر الوقت كل يوم.
\n\nميزة إضافية: إضافة التاريخ
\n\nlet dateFormatter = DateFormatter()\ndateFormatter.dateFormat = "yyyy-MM-dd"\nlet dateString = dateFormatter.string(from: Date())\n\nfor (index, file) in imageFiles.enumerated() {\n let newName = "\\(dateString)_\\(index + 1).jpg"\n // ... الباقي كما في المثال أعلاه\n}\n\n