Application Support হলো iOS অ্যাপ স্যান্ডবক্সের একটি ডিরেক্টরি যা অ্যাপের কাজ করার জন্য প্রয়োজনীয় সহায়ক ডেটা সংরক্ষণের জন্য ডিজাইন করা হয়েছে, কিন্তু ব্যবহারকারী দ্বারা সরাসরি তৈরি করা হয় না। Apple File System Basics (2024) অনুসারে, এই ডিরেক্টরিটি কনফিগারেশন ফাইল, Core Data SQLite ডেটাবেস, ক্যাশে করা ডকুমেন্ট এবং অন্যান্য ডেটার জন্য সর্বোত্তম যা অ্যাপ নিজেই জেনারেট করে। Documents Directory-এর বিপরীতে, Application Support iTunes File Sharing-এ প্রদর্শিত হয় না এবং ব্যবহারকারীর এটিতে সরাসরি অ্যাক্সেস নেই, যা সার্ভিস ডেটাকে আকস্মিক মুছে ফেলা থেকে রক্ষা করে।
মূল বিষয়
Application Support হলো iOS অ্যাপ স্যান্ডবক্সের একটি ডিরেক্টরি যা অ্যাপ তার কাজের জন্য তৈরি এবং ব্যবহার করে এমন ডেটা সংরক্ষণের জন্য ডিজাইন করা হয়েছে, কিন্তু যা ব্যবহারকারীর ডকুমেন্ট নয়। এটি কনফিগারেশন, ডেটাবেস, ক্যাশে করা মেটাডেটা এবং অন্যান্য সহায়ক ফাইলের জন্য প্রাথমিক অবস্থান।
iOS, Application Support-কে Documents (ব্যবহারকারী ডেটা) এবং Caches (অস্থায়ী ডেটা)-এর মধ্যে একটি মধ্যবর্তী স্তর হিসেবে নির্ধারণ করে। Application Support-এর ফাইলগুলি তুলনামূলকভাবে স্থায়ী হতে পারে, কিন্তু ব্যবহারকারীর সেগুলিতে সরাসরি অ্যাক্সেস থাকা উচিত নয় — এটিই একে Documents Directory থেকে আলাদা করে।
Apple Developer Documentation (2024) অনুসারে, Application Support হল Core Data SQLite ডেটাবেস, Realm ফাইল, JSON/plist ফরম্যাটে কনফিগারেশন, ডাউনলোড করা রেফারেন্স উপকরণ এবং অন্যান্য ডেটা সংরক্ষণের জন্য প্রস্তাবিত স্থান যা অ্যাপ ব্যবহার করে কিন্তু ব্যবহারকারী স্পষ্টভাবে তৈরি করেনি।
গুরুত্বপূর্ণ: ডিফল্টরূপে, Application Support iCloud এবং iTunes ব্যাকআপে অন্তর্ভুক্ত। যদি অ্যাপ এই ডিরেক্টরিতে大量 ডেটা সংরক্ষণ করে যা পুনরায় তৈরি করা যেতে পারে (যেমন ডাউনলোড করা গাইড), তাহলে প্রাসঙ্গিক ফাইলগুলির জন্য isExcludedFromBackup ফ্ল্যাগ সেট করা প্রয়োজন।
Swift-এ, Application Support Directory-এর পাথ FileManager.urls(for: .applicationSupportDirectory)-এর মাধ্যমে পাওয়া যায়। Apple ডেটা বিচ্ছিন্নতার জন্য Application Support-এর ভিতরে অ্যাপ নাম সহ একটি সাবডিরেক্টরি তৈরি করার পরামর্শ দেয়।
import Foundation
let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first else { return }
// Create app subdirectory
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
at: appDir,
withIntermediateDirectories: true
)
Objective-C, NSApplicationSupportDirectory-এর সাথে NSSearchPathForDirectoriesInDomains ব্যবহার করে। Swift-এর মতোই, অ্যাপ নাম সহ একটি চাইল্ড ডিরেক্টরি তৈরি করার পরামর্শ দেওয়া হয়।
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSApplicationSupportDirectory,
NSUserDomainMask,
YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];
প্রথম লঞ্চে, Application Support ডিরেক্টরি বিদ্যমান নাও থাকতে পারে — এটি createDirectory(at:withIntermediateDirectories:) ব্যবহার করে তৈরি করতে হবে। এটি একে Documents Directory থেকে আলাদা করে, যা সিস্টেম স্বয়ংক্রিয়ভাবে তৈরি করে।
Application Support বিস্তৃত পরিসরের ডেটার জন্য উপযুক্ত যা অ্যাপ তার কাজের জন্য ব্যবহার করে। এই ডিরেক্টরির জন্য সঠিক ডেটা নির্বাচন ফাইল সিস্টেম সংগঠন উন্নত করে এবং ব্যাকআপ সহজ করে।
Core Data-র SQLite ফাইলগুলি ডিফল্টরূপে Application Support-এ তৈরি হয়। Realm-ও এই ডিরেক্টরিতে ডেটাবেস রাখার পরামর্শ দেয়। এটি ব্যবহারকারীর ডকুমেন্টগুলিকে অ্যাপের অভ্যন্তরীণ ডেটাবেস থেকে আলাদা করে।
অ্যাপ সেটিংস, Feature Flags, ক্যাশে করা ব্যবহারকারী মেটাডেটা (কিন্তু প্রমাণীকরণ টোকেন নয় — সেগুলির জন্য Keychain ব্যবহার করুন) সহ JSON, plist, XML ফাইল।
| ডেটার ধরন | Application Support | বিকল্প |
|---|---|---|
| SQLite Core Data | হ্যাঁ (ডিফল্ট) | — |
| কনফিগারেশন .plist / .json | হ্যাঁ | UserDefaults (সাধারণের জন্য) |
| ডাউনলোড করা রেফারেন্স উপকরণ | হ্যাঁ | Documents (যদি ব্যবহারকারীর জন্য) |
| অ্যাপ লগ | শর্তসাপেক্ষে | Caches (লগের জন্য) |
| প্রমাণীকরণ টোকেন | না | Keychain |
নির্বাচনের মানদণ্ড: যদি ডেটা অ্যাপ দ্বারা তৈরি এবং ব্যবহৃত হয়, ব্যবহারকারী দ্বারা নয়, এবং লঞ্চের মধ্যে স্থায়ী হওয়া উচিত — তার স্থান Application Support-এ।
Core Data Application Support-এর প্রধান ব্যবহারকারীদের মধ্যে একটি। NSPersistentContainer তৈরি করার সময়, Core Data স্বয়ংক্রিয়ভাবে SQLite ফাইলগুলি Library/Application Support-এ মডেল নামের উপর ভিত্তি করে একটি অনন্য নাম সহ রাখে।
Core Data কোথায় ফাইল সংরক্ষণ করে তা বোঝা মাইগ্রেশন, ব্যাকআপ এবং ডিবাগিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ। প্রধান ফাইলগুলি: .sqlite (ডেটা), .sqlite-wal (Write-Ahead Log), .sqlite-shm (Shared Memory)।
import CoreData
// Create Core Data container
let container = NSPersistentContainer(name: "MyAppModel")
// Custom store URL directory
guard let appSupportURL = FileManager.default
.urls(for: .applicationSupportDirectory,
in: .userDomainMask).first else { return }
let storeURL = appSupportURL
.appendingPathComponent("MyAppModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [description]
CloudKit Core Data সিঙ্ক ব্যবহার করার সময়, SQLite ফাইল Application Support-এ থাকে এবং CloudKit একটি পরিবহন স্তর হিসেবে কাজ করে। এই ক্ষেত্রে, ব্যাকআপ থেকে ফাইলগুলি বাদ না দেওয়া গুরুত্বপূর্ণ — অন্যথায় ডিভাইসগুলির মধ্যে সিঙ্ক্রোনাইজেশন ভেঙে যেতে পারে।
Application Support এবং Documents-এর মধ্যে পার্থক্য iOS অ্যাপ ফাইল কাঠামো সঠিকভাবে সংগঠিত করার জন্য সবচেয়ে গুরুত্বপূর্ণ। ভুল নির্বাচনের ফলে ব্যবহারকারী গুরুত্বপূর্ণ অ্যাপ ডেটা আকস্মিকভাবে মুছে ফেলতে পারে বা, বিপরীতভাবে, তার ফাইলগুলি খুঁজে পেতে অক্ষম হতে পারে।
| প্যারামিটার | Application Support | Documents Directory |
|---|---|---|
| ব্যবহারকারীর অ্যাক্সেস | না (লুকানো) | iTunes File Sharing-এর মাধ্যমে |
| ডেটার ধরন | অ্যাপ সার্ভিস ডেটা | ব্যবহারকারীর ডকুমেন্ট |
| iCloud ব্যাকআপ | হ্যাঁ (ডিফল্ট) | হ্যাঁ (ডিফল্ট) |
| মুছে ফেলার ঝুঁকি | কম (কোনো অ্যাক্সেস নেই) | মধ্যম (ব্যবহারকারীর জন্য অ্যাক্সেসযোগ্য) |
| উদাহরণ | SQLite Core Data | এক্সপোর্ট করা PDF |
সহজ নিয়ম: যদি ব্যবহারকারীর ফাইলটি দেখা এবং মুছে ফেলতে সক্ষম হওয়া উচিত — Documents ব্যবহার করুন। যদি ফাইলটি অ্যাপের কাজ করার জন্য প্রয়োজনীয় কিন্তু ব্যবহারকারীর এটি সম্পর্কে জানার প্রয়োজন নেই — Application Support ব্যবহার করুন। যদি ডেটা পুনরায় তৈরি করা যেতে পারে — Caches ব্যবহার করুন।
Application Support-এর সাথে কাজ করার জন্য বেশ কয়েকটি বৈশিষ্ট্য বিবেচনা করা প্রয়োজন যা এটিকে অন্যান্য স্যান্ডবক্স ডিরেক্টরি থেকে আলাদা করে। এই অনুশীলনগুলি অনুসরণ করলে ডেটা ক্ষতি, মাইগ্রেশন সমস্যা এবং অপ্রত্যাশিত অ্যাপ আচরণ এড়াতে সাহায্য করে।
Documents-এর বিপরীতে, Application Support প্রথম লঞ্চে বিদ্যমান নাও থাকতে পারে। withIntermediateDirectories: true প্যারামিটার সহ createDirectory(at:withIntermediateDirectories:) ব্যবহার করুন যাতে সাবডিরেক্টরির সম্পূর্ণ চেইন তৈরি নিশ্চিত হয়।
Application Support-এর ভিতরে Bundle Identifier সহ একটি সাবডিরেক্টরি তৈরি করুন। এটি আপনার অ্যাপের ডেটাকে অন্যান্য অ্যাপের ডেটা থেকে আলাদা করে (যদিও স্যান্ডবক্স ইতিমধ্যে বিচ্ছিন্নতা প্রদান করে) এবং প্রদানকারী পরিবর্তন করার সময় মাইগ্রেশন সহজ করে।
import Foundation
enum AppSupport {
static func ensureDirectory() throws -> URL {
let fm = FileManager.default
let baseURL = try fm.url(
for: .applicationSupportDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true
)
let appDir = baseURL
.appendingPathComponent(Bundle.main.bundleIdentifier ?? "default")
try fm.createDirectory(at: appDir, withIntermediateDirectories: true)
return appDir
}
}
এই অনুশীলনগুলি অনুসরণ করলে নিশ্চিত হয় যে অ্যাপের সার্ভিস ডেটা সঠিকভাবে সংগঠিত, ব্যবহারকারীর আকস্মিক মুছে ফেলা থেকে সুরক্ষিত এবং ব্যাকআপ থেকে সঠিকভাবে পুনরুদ্ধার করা হয়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, Application Support অ্যাপ ইনস্টল করার সময় স্বয়ংক্রিয়ভাবে তৈরি হয় না। Documents এবং Caches-এর বিপরীতে, যা সিস্টেম প্রথম লঞ্চে তৈরি করে, Application Support ডেভেলপার দ্বারা FileManager.createDirectory(at:withIntermediateDirectories:) ব্যবহার করে তৈরি করতে হবে। এটি সাধারণত application(_:didFinishLaunchingWithOptions:) মেথডে করা হয়।
না, স্ট্যান্ডার্ড iOS ইন্টারফেস (Files, iTunes)-এর মাধ্যমে ব্যবহারকারীর Application Support-এ অ্যাক্সেস নেই। তবে, যখন অ্যাপ নিজেই মুছে ফেলা হয়, তখন সম্পূর্ণ স্যান্ডবক্স, Application Support সহ, সম্পূর্ণরূপে মুছে যায়। iCloud ব্যাকআপ পুনরুদ্ধার বা ম্যানুয়াল মুছে ফেলা পর্যন্ত থাকে।
ব্যবহারকারীর জন্য ডাউনলোড করা ভিডিওর জন্য, Documents Directory ব্যবহার করা ভাল যাতে ব্যবহারকারী Files-এর মাধ্যমে এই ফাইলগুলি পরিচালনা করতে পারে। যদি ভিডিও অ্যাপের অভ্যন্তরীণ ক্যাশের অংশ হয় (যেমন অফলাইন প্রশিক্ষণ সামগ্রী), তাহলে বড় ফাইলগুলির জন্য isExcludedFromBackup ফ্ল্যাগ সহ Application Support ব্যবহার করা যেতে পারে।
Application Support-এর ভিতরে সাবডিরেক্টরিগুলির ভার্সনিং যোগ করুন। আপডেট করার সময়, বর্তমান ডেটা সংস্করণ পরীক্ষা করুন এবং প্রয়োজনে একটি নতুন সাবডিরেক্টরি তৈরি করুন, পুরানোটিকে রোলব্যাকের জন্য রাখুন। পুরানো ডিরেক্টরিটি শুধুমাত্র তখনই মুছুন যখন নিশ্চিত হন যে সমস্ত ব্যবহারকারী সফলভাবে ডেটার নতুন সংস্করণে মাইগ্রেট হয়েছে।
পরোক্ষভাবে — হ্যাঁ। যদি Application Support-এ হাজার হাজার ছোট ফাইল থাকে, তাহলে FileManager.enumerator ইনিশিয়ালাইজেশন ধীর করতে পারে। Application Support-এ ফাইলের সংখ্যা সীমিত (1000-এর বেশি না) রাখা এবং কাঠামোবদ্ধ ডেটার জন্য অনেকগুলি পৃথক ফাইলের পরিবর্তে ডেটাবেস (Core Data, Realm) ব্যবহার করার পরামর্শ দেওয়া হয়।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন