Swift (iOS/macOS) में S3 और क्लाउड स्टोरेज के साथ काम करना
iOS और macOS ऐप डेवलपमेंट में अक्सर Amazon S3 (Simple Storage Service) प्रोटोकॉल के साथ संगत क्लाउड स्टोरेज को इंटीग्रेट करने की ज़रूरत होती है। यह आधिकारिक AWS S3 हो सकता है या MinIO या DigitalOcean Spaces जैसे self-hosted समाधान। Swift के लिए एक शक्तिशाली टूल है — AWSS3 लाइब्रेरी, जो AWS SDK for Swift का हिस्सा है। यह आपको बकेट में ऑब्जेक्ट को आसानी से मैनेज करने की सुविधा देती है: अपलोड, डाउनलोड, डिलीट और मेटाडेटा प्राप्त करना।
इस लेख में हम सीखेंगे कि प्रोजेक्ट में AWSS3 को कैसे सेटअप करें, फाइलों के साथ बुनियादी ऑपरेशन कैसे करें और संभावित एरर को कैसे हैंडल करें। यह सामग्री Swift 5.7+ में लिखे iOS और macOS ऐप के लिए उपयुक्त है।
AWSS3 की स्थापना और कॉन्फ़िगरेशन
AWSS3 के साथ काम करने के लिए Swift Package Manager (SPM) या CocoaPods के माध्यम से डिपेंडेंसी जोड़ना ज़रूरी है। आइए SPM का उपयोग करें — यह सबसे आधुनिक तरीका है।
- Xcode खोलें,
File → Add Packages...पर जाएं - रिपॉजिटरी URL डालें:
https://github.com/awslabs/aws-sdk-swift.git AWSS3पैकेज चुनें और वर्जन (नवीनतम स्थिर वर्जन) सेट करें- पैकेज को अपने टार्गेट में जोड़ें
इंस्टॉलेशन के बाद, जहाँ स्टोरेज के साथ काम करना है, वहाँ मॉड्यूल इम्पोर्ट करें:
import AWSS3
S3 क्लाइंट कॉन्फ़िगरेशन
S3-संगत स्टोरेज से कनेक्ट करने के लिए क्रेडेंशियल (Access Key, Secret Key) और endpoint के साथ कॉन्फ़िगरेशन बनाना होगा। AWS S3 के लिए endpoint डालने की ज़रूरत नहीं — SDK अपने आप रीजन डिटेक्ट कर लेगा। MinIO या अन्य सर्विस के लिए endpoint अनिवार्य है।
// MinIO (लोकल सर्वर) के लिए कॉन्फ़िगरेशन उदाहरण
let endpoint = "http://localhost:9000"
let accessKey = "YOUR_ACCESS_KEY"
let secretKey = "YOUR_SECRET_KEY"
let credentials = AWSCredentials(accessKey: accessKey, secretAccessKey: secretKey)
let region = AWSRegion.useast1 // या कोई अन्य रीजन
let configuration = AWSS3Configuration(
region: region,
endpoint: endpoint,
credentialsProvider: .static(credentials),
useFIPS: false,
useDualStack: false
)
let s3Client = try await AWSS3Client(configuration: configuration)
AWS S3 के लिए कॉन्फ़िगरेशन आसान है — बस रीजन बताएं और IAM-रोल या एनवायरनमेंट वेरिएबल से क्रेडेंशियल लें:
let configuration = AWSS3Configuration(
region: .useast1,
credentialsProvider: .default
)
let s3Client = try await AWSS3Client(configuration: configuration)
S3 ऑब्जेक्ट के साथ बुनियादी ऑपरेशन
1. फाइल अपलोड करना
बकेट में डेटा अपलोड करने के लिए putObject मेथड का उपयोग करें। डेटा Data, String या स्ट्रीम हो सकता है।
func uploadFile(bucket: String, key: String, data: Data) async throws {
let putObjectInput = PutObjectInput(
body: .data(data),
bucket: bucket,
key: key
)
let response = try await s3Client.putObject(input: putObjectInput)
print("फाइल अपलोड हो गई। ETag: \(response.eTag ?? "अज्ञात")")
}
2. फाइल डाउनलोड करना
ऑब्जेक्ट प्राप्त करने के लिए getObject का उपयोग करें:
func downloadFile(bucket: String, key: String) async throws -> Data {
let getObjectInput = GetObjectInput(
bucket: bucket,
key: key
)
let response = try await s3Client.getObject(input: getObjectInput)
guard let body = response.body else {
throw NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "खाली रिस्पॉन्स बॉडी"])
}
let data = try await body.readData()
return data
}
3. बकेट में ऑब्जेक्ट की सूची प्राप्त करना
listObjectsV2 मेथड बकेट में की (फाइल नाम) की सूची लौटाता है:
func listFiles(bucket: String) async throws -> [String] {
let listInput = ListObjectsV2Input(bucket: bucket)
let response = try await s3Client.listObjectsV2(input: listInput)
return response.contents?.compactMap { $0.key } ?? []
}
4. फाइल डिलीट करना
बकेट से ऑब्जेक्ट हटाने के लिए deleteObject का उपयोग करें:
func deleteFile(bucket: String, key: String) async throws {
let deleteInput = DeleteObjectInput(bucket: bucket, key: key)
_ = try await s3Client.deleteObject(input: deleteInput)
print("फाइल डिलीट हो गई: \(key)")
}
एरर हैंडलिंग और बेस्ट प्रैक्टिसेज
S3 ऑपरेशन के दौरान नेटवर्क एरर, एक्सेस डिनायड या बकेट न मिलने जैसी समस्याएं हो सकती हैं। इन्हें सही तरीके से हैंडल करना ज़रूरी है:
do {
try await uploadFile(bucket: "my-bucket", key: "file.txt", data: fileData)
} catch let error as AWSServiceError {
switch error.errorCode {
case "NoSuchBucket":
print("बकेट मौजूद नहीं है")
case "AccessDenied":
print("एक्सेस अस्वीकार किया गया")
default:
print("S3 एरर: \(error.message ?? "अज्ञात एरर")")
}
} catch {
print("अन्य एरर: \(error.localizedDescription)")
}
निष्कर्ष
AWSS3 लाइब्रेरी Swift डेवलपर्स को S3-संगत क्लाउड स्टोरेज को आसानी से इंटीग्रेट करने की सुविधा देती है। चाहे आप AWS S3, MinIO या कोई अन्य S3-संगत सर्विस इस्तेमाल कर रहे हों, यह लाइब्रेरी फाइल अपलोड, डाउनलोड, लिस्टिंग और डिलीशन जैसे सभी बुनियादी ऑपरेशन को सपोर्ट करती है।
अपने प्रोजेक्ट में AWSS3 का उपयोग करके आप अपने iOS/macOS ऐप में स्केलेबल और विश्वसनीय क्लाउड स्टोरेज जोड़ सकते हैं। अधिक जानकारी के लिए AWS SDK for Swift डॉक्यूमेंटेशन देखें।