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

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

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

ابدأ الدورة

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



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



لماذا نحتاج S3 في تطبيقات Swift؟

يوفر S3 تخزيناً قابلاً للتوسع وآمناً ومنخفض التكلفة للكائنات. استخدام S3 في Swift يتيح:

  • تفريغ عبء تخزين الملفات من الجهاز إلى السحابة.
  • ضمان الوصول إلى البيانات من أي جهاز للمستخدم.
  • استخدام آليات التشفير والتحكم في الوصول المدمجة.
  • التكامل مع خدمات AWS الأخرى (Lambda, Cognito, CloudFront).


إعداد البيئة

للبدء، ستحتاج إلى:

  • حساب AWS وحاوية S3 منشأة.
  • Xcode 14+ ومشروع Swift (iOS 15+ / macOS 12+).
  • تثبيت التبعيات عبر Swift Package Manager (SPM).


تثبيت AWSS3 عبر SPM

أضف الحزمة في Package.swift أو عبر واجهة Xcode:

// File → Add Packages → بحث: https://github.com/aws-amplify/aws-sdk-ios-spm// اختر "AWSS3" من قائمة المنتجات.

في الكود، استورد المكتبة:

import AWSS3


مثال أساسي: رفع ملف إلى S3

لنستعرض سيناريو بسيطاً — رفع صورة من معرض المستخدم. للمصادقة، يُستخدم Cognito Identity Pool، لكن في وضع الاختبار يمكن تمرير المفاتيح مباشرة (غير موصى به للإنتاج).



تهيئة الخدمة

let credentialsProvider = AWSStaticCredentialsProvider(    accessKey: "YOUR_ACCESS_KEY",    secretKey: "YOUR_SECRET_KEY")let configuration = AWSServiceConfiguration(    region: .USEast1,    credentialsProvider: credentialsProvider)AWSServiceManager.default().defaultServiceConfiguration = configuration


رفع الملف (upload)

func uploadImageToS3(imageData: Data, bucketName: String, key: String) {    let request = AWSS3TransferManagerUploadRequest()!    request.bucket = bucketName    request.key = key    request.body = imageData    request.contentLength = Int64(imageData.count)

let transferManager = AWSS3TransferManager.default() transferManager?.upload(request).continueWith { task -> Any? in if let error = task.error { print("خطأ في الرفع: \\(error.localizedDescription)") } else { print("تم رفع الملف بنجاح: \\(bucketName)/\\(key)") } return nil }}


تنزيل الملف (download)

func downloadFromS3(bucketName: String, key: String, localURL: URL) {    let request = AWSS3TransferManagerDownloadRequest()!    request.bucket = bucketName    request.key = key    request.downloadingFileURL = localURL

let transferManager = AWSS3TransferManager.default() transferManager?.download(request).continueWith { task -> Any? in if let error = task.error { print("خطأ في التنزيل: \\(error.localizedDescription)") } else { print("تم حفظ الملف في \\(localURL.path)") } return nil }}


استخدام Amplify Storage لـ S3

يوفر Amplify واجهة برمجة تطبيقات أبسط، تخفي تفاصيل العمل مع S3. يتطلب إعداداً مسبقاً عبر CLI أو ملف amplifyconfiguration.json.



تثبيت Amplify

// أضف الحزمة: https://github.com/aws-ampl                    

توصيات