تكوين تطبيقات Swift (iOS/macOS): الأدوات والمكتبات
تكوين التطبيقات المحمولة وسطح المكتب بلغة Swift هو مرحلة تطوير رئيسية تحدد المرونة والأمان وسهولة صيانة الكود. في هذه المقالة، سنستعرض الأساليب والمكتبات والأدوات الأساسية لإعداد التطبيقات على iOS وmacOS، والتي ستساعدك في إدارة المعاملات في وقت التشغيل، وتخزين البيانات الحساسة، وتكييف السلوك مع بيئات مختلفة.
1. آليات التكوين المدمجة في Swift
قبل اللجوء إلى المكتبات الخارجية، يجدر إتقان الأدوات الأصلية التي توفرها Apple.
1.1 UserDefaults — تخزين بسيط للإعدادات
UserDefaults هي الطريقة الأكثر شيوعًا لتخزين كميات صغيرة من البيانات: تفضيلات المستخدم، العلامات، السلاسل النصية، الأرقام. مثال على الاستخدام:
import Foundation
// حفظ قيمةUserDefaults.standard.set(true, forKey: "isDarkModeEnabled")UserDefaults.standard.set("ar", forKey: "appLanguage")
// قراءةlet isDarkMode = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")let language = UserDefaults.standard.string(forKey: "appLanguage")هام: لا تستخدم UserDefaults لتخزين كلمات المرور أو الرموز المميزة أو كميات كبيرة من البيانات — لهذا الغرض استخدم Keychain و Core Data.
1.2 Property Wrappers — نهج Swift الحديث
بدءًا من Swift 5.1، يمكنك استخدام @AppStorage (لـ SwiftUI) و Property Wrappers المخصصة لتغليف منطق التكوين:
import SwiftUI
struct SettingsView: View { @AppStorage("isDarkModeEnabled") var isDarkMode: Bool = false @AppStorage("appLanguage") var language: String = "en"
var body: some View { Toggle("الوضع الداكن", isOn: $isDarkMode) Picker("اللغة", selection: $language) { Text("العربية").tag("ar") Text("English").tag("en") } }}هذا الكود يتزامن تلقائيًا مع UserDefaults ويقوم بتحديث واجهة المستخدم.
1.3 ملفات plist و Info.plist
.plist (Property List) هو تنسيق لتخزين التكوين يُستخدم للبيانات الثابتة: إصدار التطبيق، معرف الحزمة، الأذونات. يمكنك أيضًا إنشاء ملفات plist مخصصة لتخزين تكوين البيئات (dev/stage/prod):
// تحميل من plist مخصصif let path = Bundle.main.path(forResource: "Config", ofType: "plist"), let config = NSDictionary(contentsOfFile: path) as? [String: Any] { let apiURL = config["apiBaseURL"] as? String ?? "" print(apiURL)}2. مكتبات للتكوين المتقدم
2.1 XCConfig — إدارة مخططات البناء
ملفات .xcconfig هي أداة قياسية في Xcode لتعيين متغيرات البيئة. تتيح لك تبديل نقاط نهاية API والمفاتيح والعلامات دون تغيير الكود:
// Config.xcconfigAPI_BASE_URL = https://api.dev.example.comAPI_KEY = dev_key_123في الكود، استخدم Bundle.main.infoDictionary أو مديرًا مخصصًا:
struct AppConfig { static let apiBaseURL: String = { Bundle.main.infoDictionary?["API_BASE_URL"] as? String ?? "" }()}2.2 SwiftUI Environment — تمرير التكوين عبر البيئة
في SwiftUI، يمكنك حقن كائنات التكوين عبر @EnvironmentObject أو EnvironmentValues. هذا مناسب للإعدادات العامة (مثل السمة، اللغة، المهلات):
class AppConfiguration: ObservableObject { @Published var isPremium: Bool = false @Published var apiVersion: String = "v2"}
struct ContentView: View { @EnvironmentObject var config: AppConfiguration
var body: some View { Text("إصدار API: \\(config.apiVersion)") }}<