تكوين تطبيقات Swift (iOS/macOS): أفضل الممارسات والأدوات

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

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

ابدأ الدورة

تكوين تطبيقات Swift (iOS/macOS): نظرة عامة على الأدوات والمكتبات



يعد تكوين التطبيقات أحد الجوانب الرئيسية للتطوير لنظامي iOS وmacOS. تعتمد مرونة منتجك وقابليته للاختبار وأمانه على الإدارة الصحيحة للإعدادات. في هذه المقالة، سنستعرض آليات التكوين القياسية في Swift، بالإضافة إلى المكتبات والأدوات الشائعة التي تسهل إدارة معلمات التطبيق.



آليات التكوين المضمنة في Swift



1. Info.plist و Xcconfig

الطريقة الأساسية لتخزين البيانات الوصفية للتطبيق هي ملف Info.plist. يحتوي على إصدار الحزمة، والمعرّف، واسم التطبيق، ومعلمات النظام الأخرى. لإدارة أكثر مرونة للتكوين (على سبيل المثال، قيم مختلفة لـ Debug/Release)، يتم استخدام ملفات .xcconfig.



// Example.xcconfigAPP_NAME = MyAppAPI_BASE_URL = https://api.example.comBUNDLE_ID_SUFFIX = .dev


في Swift، يمكن الحصول على هذه القيم عبر Bundle.main:



func getConfigValue(key: String) -> String? {    guard let value = Bundle.main.object(forInfoDictionaryKey: key) as? String else {        return nil    }    return value}

let baseURL = getConfigValue(key: "API_BASE_URL")


2. UserDefaults

لتخزين إعدادات المستخدم (السمة، اللغة، حجم الخط)، يتم استخدام UserDefaults. هذه طريقة بسيطة وسريعة لحفظ كميات صغيرة من البيانات.



// حفظUserDefaults.standard.set(true, forKey: "isDarkMode")UserDefaults.standard.set("ru", forKey: "language")

// قراءةlet isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")let language = UserDefaults.standard.string(forKey: "language") ?? "en"


3. SwiftUI AppStorage

في SwiftUI، يوجد property wrapper مدمج @AppStorage والذي يتم مزامنته تلقائياً مع UserDefaults:



struct SettingsView: View {    @AppStorage("isDarkMode") private var isDarkMode = false    @AppStorage("fontSize") private var fontSize = 14.0

var body: some View { Form { Toggle("السمة الداكنة", isOn: $isDarkMode) Slider(value: $fontSize, in: 10...30) { Text("حجم الخط") } } }}


مكتبات خارجية للتكوين



على الرغم من أن الأدوات القياسية تغطي السيناريوهات الأساسية، إلا أن المشاريع الحقيقية غالباً ما تتطلب حلولاً أكثر تقدماً. دعنا نستعرض بعض المكتبات الشائعة.



1. SwiftyUserDefaults

غلاف حول UserDefaults بمفاتيح محددة النوع ودعم Codable. يسمح بتجنب الأخطاء المتعلقة بالمفاتيح النصية.



  • دعم جميع الأنواع القياسية و Codable
  • توليد الكود عبر Sourcery (اختياري)
  • صيغة بسيطة وموجزة


import SwiftyUserDefaults

extension DefaultsKeys { var isDarkMode: DefaultsKey<Bool> { .init("isDarkMode", defaultValue: false) } var userName: DefaultsKey<String?> { .init("userName") }}

// الاستخدامDefaults[\\.isDarkMode] = truelet name = Defaults[\\.userName] ?? "ضيف"


2. PropertyKit

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



  • دعم الأقسام والمجموعات المتداخلة
  • التحقق من صحة القيم في الوقت الفعلي
  • التكامل مع Combine لتحديث واجهة المستخدم التفاعلي


import PropertyKit

struct AppConfig: PropertyGroup { @Property(key: "api_url", default: "https://api.example.com") var apiURL: String

@Property(key: "max_retries", default: 3, validator: { $0 > 0 && $0 < 10 }) var maxRetries: Int

@Property(key: "feature_x_enabled", default: false) var featureXEnabled: Bool

توصيات