يتم تقديم تطبيق Swift iOS (المدمج في XCode 6.1.1) كمثال للمطورين المهتمين بالنظام البيئي Kardia.io. تم تشفيره حاليًا للاتصال بالبيانات وقراءتها من وحدات RedBearLabs Blend Micro المحملة بالبرامج الثابتة الموصى بها من قبل موقع RedBearLabs على الويب. لقد قمنا ببرمجة هذه الوحدات لإصدار بيانات وهمية تحاكي تتبعًا حقيقيًا لتخطيط القلب. يقوم هذا التطبيق بتوصيل الهاتف بالجهاز وينقل البيانات المنبعثة إلى الخوادم (node.js وpython) في Kardia.io. يستمع التطبيق أيضًا إلى التحليلات الواردة من الخوادم ويعرضها.
استنساخ الريبو وفتحه في XCode. قم بتحميل التطبيق على هاتفك. سيتصل التطبيق تلقائيًا بوحدات BLE القريبة باستخدام الخدمة المناسبة ومعرفات UUID المميزة (انظر أدناه) ويبدأ تدفق البيانات إلى kardia.io. تعود البيانات التي تم تحليلها إلى التطبيق في الوقت الفعلي. سيتم تسجيل أي أحداث غير طبيعية (عدم انتظام ضربات القلب) في عرض الجدول الذي يمكن الوصول إليه عن طريق التمرير إلى اليسار أو اليمين. يمكن حذف هذه الأحداث عن طريق سحبها إلى اليسار.
يبحث التطبيق عن الخدمة UUID 713D0000-503E-4C75-BA94-3148F18D941E التي تحتوي على UUID المميز 713D0002-503E-4C75-BA94-3148F18D941E الذي يتوافق مع البيانات المنبعثة من Arduino. يتم تعريف هذه القيم في البرنامج الثابت الخاص بـ Blend Micro المرتبط بموقع RedBearLabs الإلكتروني.
بمجرد اتصال التطبيق بجهاز BLE (انظر أدناه للحصول على شرح موجز)، فإنه يسجل مستمعًا للتغييرات في حالة خصائص بيانات الجهاز. يتم تفسير هذه البيانات على أنها عائمة وتمريرها إلى وظيفتي رد الاتصال. يضيفه أحدهم إلى مخزن مؤقت لنقاط البيانات الحديثة لعرضها في الرسم البياني. والآخر يصدره كحدث مأخذ توصيل. يتم إصداره ككائن JSON مع مفتاحي "السعة" و"الوقت" المطابقين للقيمة المستلمة من الجهاز ووقت ISO8601 الذي تم إصدار حدث المقبس فيه، على التوالي.
يستمع التطبيق أيضًا إلى الاستجابات من الخادم، وهي كائنات JSON التي تحتوي على مفاتيح "heartRate" (لا تحتاج إلى شرح) و"statusCode". يتم البحث عن رمز الحالة في القاموس المحدد في ViewController.swift ويتم ترجمته إلى العرض الرئيسي كـstatusView.
نحن نستخدم مكتبة المقبس، التي تغطي مكتبة المقبس المقبس لمكتبة Objective-C. يتم استخدام الأحداث التالية:
نستخدم مكتبة Swift-Linechart لعرض آثار تخطيط القلب المباشرة. لم يلبي احتياجاتنا بالكامل لذلك قمنا بتعديله على النحو التالي:
عندما يسجل التطبيق شذوذًا جديدًا، فإنه يسجله في ملف عدم انتظام ضربات القلب Times global، والذي يعمل كمصدر بيانات لعرض الجدول. "جديد" في هذه الحالة يعني أن الحدث يتم تسجيله فقط إذا تغيرت الحالة التي أبلغ عنها الخادم إلى حدث غير طبيعي (في هذه الحالة، عدم انتظام ضربات القلب) بحيث لا يتم تسجيل جميع أحداث عدم انتظام ضربات القلب المتكررة.
يرجى الاطلاع على قسم القضايا في هذا الريبو.
فيما يلي برنامج تعليمي جيد حول توصيل جهاز BLE بجهاز iOS باستخدام Swift. باختصار، يبدأ التطبيق في البحث عن أجهزة Bluetooth الطرفية التي تعلن عن UUID لخدمة معينة. عندما يتم العثور على واحد، فإنه يتصل ويبحث عن UUID مميز محدد. إذا تم العثور على ذلك، فإنه يبدأ الاستماع إلى تلك البيانات.
في أي وقت يحتاج العرض إلى التحديث، يجب عليك تشغيل هذا الرمز على مؤشر ترابط (UI) الرئيسي. لهذا السبب سترى مجموعات من التعليمات البرمجية مثل هذا:
dispatch_async(dispatch_get_main_queue()) {
// UI-updating code goes here
}
يتم التعامل مع الأحداث بواسطة NSNotificationCenter - يعد تسجيل المستمعين وإطلاق الأحداث أمرًا بديهيًا جدًا. إليك ترجمة سريعة لـ Swift: ترجمة جافا سكريبت للمصطلحات:
مثال:
foo.on('bar', doAThing)
يصبح
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("doAThing"), name: "bar", object: nil)
يمكن أن تحمل الوظائف نفس الاسم طالما أنها تحتوي على معلمات مختلفة - وهذا يحدث غالبًا مع البروتوكولات.
يمكن إنشاء طرق العرض وتقييدها إما في Main.storyboard أو برمجيًا في التعليمات البرمجية. يستخدم هذا التطبيق مزيجًا من الاثنين - يتم تنفيذ العرض الرئيسي بالنمط الأخير بينما يستخدم عرض الجدول الأسلوب الأول.