عن المشروع

# حول قاعدة بيانات Realm Realm هي قاعدة بيانات محمولة تعمل مباشرة داخل الهواتف أو الأجهزة اللوحية أو الأجهزة القابلة للارتداء. يحتوي هذا المستودع على الكود المصدري لإصدارات iOS وmacOS وtvOS وwatchOS من Realm Swift وRealm Objective-C. ## لماذا استخدام Realm * **بديهية للمطورين:** نموذج البيانات الكائني التوجه في Realm سهل التعلم، ولا يحتاج إلى ORM، ويتيح لك كتابة كود أقل. * **مصممة للجوال:** Realm كاملة الميزات وخفيفة الوزن وتستخدم الذاكرة ومساحة القرص وعمر البطارية بكفاءة. * **مصممة للاستخدام دون اتصال:** قاعدة البيانات المحلية في Realm تحفظ البيانات على القرص، لذا تعمل التطبيقات دون اتصال بنفس كفاءة عملها عبر الإنترنت. ## كائني التوجه: تبسيط الكود الخاص بك تم بناء Realm لمطوري الجوال مع مراعاة البساطة. يمكن لنموذج البيانات الكائني التوجه أن يوفر عليك آلاف الأسطر من الكود. ```swift // عرّف نماذجك مثل فئات Swift العادية class Dog: Object { @Persisted var name: String @Persisted var age: Int } class Person: Object { @Persisted(primaryKey: true) var _id: String @Persisted var name: String @Persisted var age: Int // أنشئ علاقات بتوجيه حقل Object إلى فئة أخرى @Persisted var dogs: List<Dog> } // استخدمها مثل كائنات Swift العادية let dog = Dog() dog.name = "Rex" dog.age = 1 print("name of dog: \(dog.name)") // احصل على Realm الافتراضي let realm = try! Realm() // احفظ بياناتك بسهولة باستخدام معاملة كتابة try! realm.write { realm.add(dog) } ``` ## كائنات حية: بناء تطبيقات تفاعلية تعني الكائنات الحية في Realm أن البيانات المحدثة في أي مكان يتم تحديثها تلقائيًا في كل مكان. ```swift // افتح Realm الافتراضي. let realm = try! Realm() var token: NotificationToken? let dog = Dog() dog.name = "Max" // أنشئ كلبًا في Realm. try! realm.write { realm.add(dog) } // قم بإعداد المستمع ومراقبة إشعارات الكائن. token = dog.observe { change in switch change { case .change(let properties): for property in properties { print("Property '\(property.name)' changed to '\(property.newValue!)'"); } case .error(let error): print("An error occurred: (error)") case .deleted: print("The object was deleted.") } } // حدّث اسم الكلب لترى التأثير. try! realm.write { dog.name = "Wolfie" } ``` ### SwiftUI يتكامل Realm مباشرة مع SwiftUI، ويحدّث عروضك بحيث لا تضطر إلى ذلك. ```swift struct ContactsView: View { @ObservedResults(Person.self) var persons var body: some View { List { ForEach(persons) { person in Text(person.name) } .onMove(perform: $persons.move) .onDelete(perform: $persons.remove) }.navigationBarItems(trailing: Button("Add") { $persons.append(Person()) } ) } } ``` ## مشفر بالكامل يمكن تشفير البيانات أثناء النقل وأثناء التخزين، مما يحافظ على أمان حتى أكثر البيانات حساسية. ```swift // قم بتوليد مفتاح تشفير عشوائي var key = Data(count: 64) _ = key.withUnsafeMutableBytes { (pointer: UnsafeMutableRawBufferPointer) in guard let baseAddress = pointer.baseAddress else { fatalError("Failed to obtain base address") } SecRandomCopyBytes(kSecRandomDefault, 64, baseAddress) } // أضف مفتاح التشفير إلى الإعدادات وافتح Realm let config = Realm.Configuration(encryptionKey: key) let realm = try Realm(configuration: config) // استخدم Realm كالمعتاد let dogs = realm.objects(Dog.self).filter("name contains 'Fido'") ``` ## البدء ندعم تثبيت Realm عبر Swift Package Manager وCocoaPods وCarthage أو عن طريق استيراد XCFramework ديناميكي. لمزيد من المعلومات، راجع [دليل البدء السريع](docs/guides/quick-start.md). ## التوثيق يمكن العثور على التوثيق في دليل [docs/](docs/README.md). يمكن توليد مرجع API من المصدر باستخدام [jazzy](https://github.com/realm/jazzy/) عن طريق تشغيل `sh build.sh docs` من جذر هذا المستودع. ## الحصول على المساعدة - **هل تحتاج مساعدة في الكود الخاص بك؟**: ابحث عن الأسئلة السابقة التي تحمل [وسم `realm`](https://stackoverflow.com/questions/tagged/realm?sort=newest) على Stack Overflow أو [اطرح سؤالًا جديدًا](https://stackoverflow.com/questions/ask?tags=realm). للنقاش العام الذي قد يعتبر واسعًا جدًا لـ Stack Overflow، استخدم [منتدى المجتمع](https://developer.mongodb.com/community/forums/tags/c/realm-sdks/58/swift/). - **هل لديك خطأ للإبلاغ عنه؟** [افتح مشكلة على GitHub](https://github.com/realm/realm-swift/issues/new). إذا أمكن، قم بتضمين إصدار Realm وسجل كامل وملف Realm ومشروع يوضح المشكلة. - **هل لديك طلب ميزة؟** [افتح مشكلة على GitHub](https://github.com/realm/realm-swift/issues/new). أخبرنا بما يجب أن تفعله الميزة ولماذا تريدها. ## بناء Realm في حال كنت لا تريد استخدام الإصدار المجمّع مسبقًا، يمكنك بناء Realm بنفسك من المصدر. المتطلبات الأساسية: * يتطلب بناء Realm إصدار Xcode 15.3 أو أحدث. * يتطلب بناء توثيق Realm [jazzy](https://github.com/realm/jazzy) بمجرد توفر جميع المتطلبات الأساسية اللازمة، يستغرق بناء Realm أمرًا واحدًا فقط: `sh build.sh build`. ستحتاج إلى اتصال بالإنترنت في المرة الأولى التي تبني فيها Realm لتنزيل النواة الثنائية. سينتج عن ذلك ملفات Realm.xcframework وRealmSwift.xcframework في `build/Release/`. قم بتشغيل `sh build.sh help` لرؤية جميع الإجراءات التي يمكنك تنفيذها (بناء ios/osx، توليد التوثيق، الاختبار، إلخ). ## المساهمة راجع [CONTRIBUTING.md](CONTRIBUTING.md) لمزيد من التفاصيل! ## مدونة قواعد السلوك يلتزم هذا المشروع بـ [مدونة قواعد سلوك MongoDB](https://www.mongodb.com/community-code-of-conduct). بمشاركتك، يُتوقع منك الالتزام بهذه المدونة. يرجى الإبلاغ عن السلوك غير المقبول إلى [community-conduct@mongodb.com](mailto:community-conduct@mongodb.com). ## الترخيص يتم نشر Realm Objective-C وRealm Swift بموجب ترخيص Apache 2.0. يتم أيضًا نشر Realm Core بموجب ترخيص Apache 2.0 وهو متاح [هنا](https://github.com/realm/realm-core). ## الملاحظات **_إذا كنت تستخدم Realm وكنت سعيدًا به، فيرجى التفكير في إرسال تغريدة تذكر [@realm](https://twitter.com/realm) لمشاركة أفكارك!_** **_وإذا لم يعجبك، فيرجى إخبارنا بما ترغب في تحسينه حتى نتمكن من إصلاحه!_**