مقدمة

وينتظر المستعملون المتنقلون الحديثون الوصول الفوري إلى المعلومات، ويقلل البحث على مستوى النظام في نظام خدمات التشغيل الخاص بكم بشكل كبير من الاحتكاك، مما يتيح للمستعملين العثور على محتوى دون فتح ملفكم الأول.() وعندما يظهر نظام " دليل الأداء " (FLT:1]) (Aspotlight) الذي يربط بين مؤشرات الأداء الرئيسية وبين فهرسة التطبيقات في البحث العالمي عن الأجهزة.

فهم الضوء الأساسي وفوائده

إن الضوء الأساسي هو نظام فهرسة خفيف الوزن، ومناسب للخصوصية، ويعيش في حالة من الارتفاع تماما - ولا تترك أي بيانات هاتف المستخدم إلا إذا استخدمتم الكلاودكيت صراحة، وهذا يجعله مثاليا للمحتوى الشخصي مثل الملاحظات أو الاتصالات أو الوثائق أو أي بيانات من صنع المستعملين، وتشمل الفوائد الرئيسية ما يلي:

  • زيادة الالتزام ] - يكتشف المستخدمون محتوى ربما يكون قد نسيوه، مما يعزز استخدامه في تكراره.
  • Seamless navigation] — Tapping a search result can open your app directly to the relevant screen.
  • Offline capacity] - لا تزال الأصناف المفهرسة قابلة للبحث حتى بدون وصلة الإنترنت.
  • Low implementation cost] – The API is small, well-documented, and integrates easily with existing data models.

Core Spotlight works alongside NSUserActivity] indexing, but for static or frequently updated content, direct CSSearchable Item indexing gives you finer control.

الشروط الأساسية والإنشاءات

قبل كتابة الرمز، ضمان أن مشروعك مصمم بشكل صحيح:

  1. يجب أن يستهدف تطبيقك iOS 9 أو فيما بعد ] (الطلب المنفذ مُنَفَّذ مع iOS 9).
  2. Enable Core Spotlight] capacity in Xcode — under ]Signing & Capabilities add the “Core Spotlight” entitlement and this is often automatically included when importing the framework.
  3. Import the Core Spotlight framework and MobileCoreServices (for type identifiers): and ].

ولا يلزم إنشاء أي شكل إضافي للخواديم أو إذن للمستعملين، ويحدث الفهرسة في الخلفية.

إنشاء وفهرسة البنود القابلة للبحث

The core of Core Spotlight is the ] object. each item consists of:

  • A unique identifier (e.g., ) - used later to handle selection or updates.
  • An optional domain identifier — groups related items (e.g., .
  • An attribute set] (]) — describes the content with properties like , , , , and more.

وهنا مثال كامل على " سويفت " يفهرس ملاحظة واحدة:

import CoreSpotlight
import MobileCoreServices

func indexNote(note: Note) {
 let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
 attributeSet.title = note.title
 attributeSet.contentDescription = note.body
 attributeSet.keywords = [note.title] + note.tags
 if let imageData = note.thumbnail?.pngData() {
 attributeSet.thumbnailData = imageData
 }

 let item = CSSearchableItem(
 uniqueIdentifier: "com.yourapp.note.\(note.id)",
 domainIdentifier: "com.yourapp.notes",
 attributeSet: attributeSet
 )
 // Optionally set expiration date (default is one month)
 // item.expirationDate = Date.distantFuture

 CSSearchableIndex.default().indexSearchableItems([item]) { error in
 if let error = error {
 print("Indexing error: \(error.localizedDescription)")
 } else {
 print("Note indexed successfully.")
 }
 }
}

ألف - المساهمون في مجموعة المبادئ التوجيهية

The inherits from and offers dozens of properties. For most apps the following are essential:

  • - نص قصير وصفي يبدو بارزا.
  • - قنبل أطول يرد تحت العنوان.
  • - Array of ] for alternate search terms.
  • or – Visual preview.
  • - يربط بين البنود معاً (مثلاً، مذكرات الوالدين بشأن الطفل).

For media content, use type —specific properties like , , or .]

تحديث وحذف المحتوى المفهرس

وعندما يتغير محتوى تطبيقك، يجب أن تبقي الرقم القياسي متزامناً، وأن تستخدم نفس الأساليب :

تحديث بند

Call with the same unique identifier — the API automatically replaces the old entry.

حذف البنود

Use or to remove stale content:

CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.note.123"]) { error in
 // handle
}

وتُعتبر عمليات الصيد فعالة: صفائف مرور إلى أو .

التعامل مع نشاط المستعملين وربطهم بعمق

وعندما يستغل المستخدم نتيجة لرحلة قصيرة، يتلقى تطبيقك دعوة من خلال استمرار ، وينفذ طريقة المندوبين التالية في أو :

func application(_ application: UIApplication,
 continue userActivity: NSUserActivity,
 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

 if userActivity.activityType == CSSearchableItemActionType {
 if let userInfo = userActivity.userInfo,
 let identifier = userInfo[CSSearchableItemActivityIdentifier] as? String {
 // Navigate to the item with this identifier
 navigateToContent(identifier: identifier)
 return true
 }
 }
 return false
}

الدولة المُعادة

For a smoother experience, also implement to show a loading state. In scene-based apps (iOS 13+), use the ]] method .

Deep Linking with NSUserActivity

كما تعمل الكشافة الأساسية مع آلية ، وإذا كنت قد وضعت بالفعل مؤشرا للأنشطة عن طريق ، فيمكنك إضافة العلم ، ومع ذلك، بالنسبة لرقابة رقيقة على الألقاب والأوصاف، تستخدم مباشرة.

أفضل الممارسات في مجال المؤشرات الفعالة

وتتبع هذه المبادئ التوجيهية تضمن أن محتوىكم المفهرس لا يزال ذا صلة وأنجز:

1 - المؤشر فقط المقصد

لا تُفهّم كل جزء صغير من البيانات، فالتركيز على مستعملي الأصناف يُحتمل أن يبحثوا عن الوثائق الحديثة، أو الصفحات العالية القيمة، أو المحتوى المميز.

2 - تحديد مواعيد انتهاء الخدمة

وتنتهي البنود، في حالة التقصير، بعد شهر واحد، بالنسبة للمحتوى الثابت، المحدد .() وتُستخدم البيانات الحساسة من حيث الوقت (مثلاً، رسائل تذكيرية بالأحداث) تاريخاً واقعياً.

3 - استخدام مُحدِّدات الهوية الرئيسية

(د) تسمح لك أجهزة تحديد الهوية بحذف جميع الأصناف من المجموعة في الحال، مثلاً، إذا قام المستخدم بحذف ملف، اتصل .

4- توفير كلمات رئيسية متقنة

تشمل الأسماء المترادفة، والمغالطات المشتركة، والأسماء البديلة، وتفادي الإفراط في الإفراط في الإفراط في الإفراط في التعبئة؛ وتكفي الكلمات الرئيسية من 5 إلى 10 كلمات حسنة الصنع.

5- تجنب فهرسة مكررة

إذا كررتِ البنود (مثل نفس العنوان في مجالات مختلفة)، فإن المستعملين يرون نتائج مُربكة.

6 - عمليات الصيد المتعلقة بالمستجدات المتعلقة بالمجموعات

وعندما يتزامن العديد من البنود (مثلاً، بعد استعادة السحابة)، يربطها بصفوف تتراوح بين 50 و100 لتجنب عرقلة الخيط الرئيسي، استخدمها [(FLT:44]) بمصفوفة، وليس بمكالمات واحدة متعددة.

اعتبارات الأداء والبطاريات

ويدير الضوء الأساسي عملية خلفية منخفضة الأولوية، ولكن سوء التنفيذ يمكن أن يستنفد أداء النظام بالبطارية أو يتدهور:

  • لترهيب تردد المؤشرات - فقط إعادة التصنيف عندما تتغير البيانات فعليا، وليس على كل عملية إطلاق للتطبيق.
  • Throttle large operations] – Use and ] (available on ) fortom updates.
  • تجنب الصور الثقيلة ] - ينبغي أن تكون صغيرة (مثل 64x64 نقطة، وJPEGضغط).
  • Usese the default index — is sufficient for almost all apps. Creating custom indexes is rarely needed.

وتؤكد وثائق آبل ]FLT:0[Core Spotlight documentation أنه ينبغي معاملة الفهرسة على أنها " إطلاق نار ونسيان " - لا تنتظر بشكل متزامن استكمال عمليات الاسترجاع على الخيط الرئيسي.

اختبار التكامل في مجال الأضواء الأساسية

ويمكن أن تكون نتائج الاضواء المسببة للضباب الخادعة صعبة لأنها لا تظهر دائما على الفور، وأن تتبع استراتيجية الاختبار هذه:

  1. Simulator testing] - Use iOS Simulator (iOS 15 or later). After indexing, wait a few seconds, then draw down the Home screen to search. Be aware that results may take longer in the Simulator.
  2. اختبارات الديفيس - اختبار دائم على جهاز مادي، فهرس الضوء يتصرّف بشكل أكثر عدائية على الأجهزة الحقيقية.
  3. Reset the index] – Use the Settings app: General ⁇ Spotlight search ⁇ toggle your app off and on. This clears the index and forces a fresh start.
  4. Verify deletion] - بعد حذف بند، ضمان عدم ظهور النتيجة القديمة، وأحياناً نتائج النظام المكتش؛ التخلي عنه لمدة 30 ثانية.
  5. Check the debug console] – Enable ] logging by passing in Xcode’s scheme arguments.

A useful resource is WDC 2015 “Introducing Core Spotlight”], which covers foundational concepts still applicable today.

خاتمة

إن نظام المعلومات المسبقة عن علم هو أداة قوية غير مستعملة على نحو كاف يمكن أن تحول كيفية تفاعل المستخدمين مع تطبيقكم، وبإضافة محتوى ذي صلة ومستكمل إلى الرقم القياسي للبحث في النظام، توفرون مسارا لا يفترق من البحث إلى المحتوى - تعزيز المشاركة والاحتفاظ بها، وتبدأون بصغر حجمها: فهرسة محتوىكم الأول، وتختبرون بدقة، ثم تتوسعون لتشمل المواد الثانوية.

For further reading, consult the official Core Spotlight Framework Reference] and the ]App search Programming Guide].