العمل مع S3 والتخزين السحابي في Swift (iOS/macOS): مكتبة AWSS3

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

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

ابدأ الدورة

العمل مع S3 والتخزين السحابي في Swift (iOS/macOS)

\n\n

في التطوير الحديث لتطبيقات iOS وmacOS، غالباً ما تنشأ الحاجة لدمج التخزين السحابي المتوافق مع بروتوكول Amazon S3 (Simple Storage Service). يمكن أن يكون هذا إما AWS S3 الرسمي أو حلول الاستضافة الذاتية مثل MinIO أو DigitalOcean Spaces. بالنسبة لـ Swift، توجد أداة قوية - مكتبة AWSS3 من AWS SDK for Swift، والتي تتيح إدارة الكائنات في الحاويات بسهولة: الرفع والتنزيل والحذف والحصول على البيانات الوصفية.

\n\n

في هذه المقالة، سنشرح كيفية إعداد AWSS3 في المشروع، وتنفيذ العمليات الأساسية مع الملفات، ومعالجة الأخطاء المحتملة. المحتوى مناسب لتطبيقات iOS وmacOS المكتوبة بلغة Swift 5.7+.

\n\n

تثبيت وإعداد AWSS3

\n\n

للعمل مع AWSS3، يجب إضافة التبعية عبر Swift Package Manager (SPM) أو CocoaPods. سننظر في SPM - الطريقة الأكثر حداثة.

\n\n
    \n
  1. افتح Xcode، وانتقل إلى File → Add Packages...
  2. \n
  3. أدخل عنوان المستودع: https://github.com/awslabs/aws-sdk-swift.git
  4. \n
  5. اختر الحزمة AWSS3 وحدد الإصدار (يوصى باستخدام أحدث إصدار مستقر).
  6. \n
  7. أضف الحزمة إلى الهدف المستهدف.
  8. \n
\n\n

بعد التثبيت، قم باستيراد الوحدة في الملف الذي سيتم فيه العمل مع التخزين:

\n\n
import AWSS3\n
\n\n

تكوين عميل S3

\n\n

للاتصال بالتخزين المتوافق مع S3، يجب إنشاء تكوين ببيانات الاعتماد (Access Key, Secret Key) ونقطة النهاية (endpoint). بالنسبة لـ AWS S3، يمكن حذف نقطة النهاية - سيقوم SDK تلقائياً بتحديد المنطقة. بالنسبة لـ MinIO أو الخدمات الأخرى، نقطة النهاية إلزامية.

\n\n
// مثال على التكوين لـ MinIO (خادم محلي)\nlet endpoint = "http://localhost:9000"\nlet accessKey = "YOUR_ACCESS_KEY"\nlet secretKey = "YOUR_SECRET_KEY"\n\nlet credentials = AWSCredentials(accessKey: accessKey, secretAccessKey: secretKey)\nlet region = AWSRegion.useast1 // أو منطقة أخرى\n\nlet configuration = AWSS3Configuration(\n    region: region,\n    endpoint: endpoint,\n    credentialsProvider: .static(credentials),\n    useFIPS: false,\n    useDualStack: false\n)\n\nlet s3Client = try await AWSS3Client(configuration: configuration)\n
\n\n

بالنسبة لـ AWS S3، التكوين أبسط - يكفي تحديد المنطقة والحصول على بيانات الاعتماد من دور IAM أو متغيرات البيئة:

\n\n
let configuration = AWSS3Configuration(\n    region: .useast1,\n    credentialsProvider: .default\n)\nlet s3Client = try await AWSS3Client(configuration: configuration)\n
\n\n

العمليات الأساسية مع كائنات S3

\n\n

1. رفع ملف (Upload)

\n\n

لرفع البيانات إلى الحاوية، استخدم الطريقة putObject. يمكن أن تكون البيانات من نوع Data أو String أو تدفق.

\n\n
func uploadFile(bucket: String, key: String, data: Data) async throws {\n    let putObjectInput = PutObjectInput(\n        body: .data(data),\n        bucket: bucket,\n        key: key\n    )\n    let response = try await s3Client.putObject(input: putObjectInput)\n    print("تم رفع الملف. ETag: \\(response.eTag ?? "غير معروف")")\n}\n
\n\n

2. تنزيل ملف (Download)

\n\n

للحصول على كائن، استخدم getObject:

\n\n
func downloadFile(bucket: String, key: String) async throws -> Data {\n    let getObjectInput = GetObjectInput(\n        bucket: bucket,\n        key: key\n    )\n    let response = try await s3Client.getObject(input: getObjectInput)\n    guard let body = response.body else {\n        throw NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "محتوى الاستجابة فارغ"])\n    }\n    let data = try await body.readData()\n    return data\n}\n
\n\n

3. الحصول على قائمة الكائنات في الحاوية

\n\n

الطريقة listObjectsV2 ترجع قائمة بالمفاتيح (أسماء الملفات) في الحاوية:

\n\n

                
    
    

توصيات