/ / बीएलई बहाली / संरक्षण अप्रत्याशित प्रभाव - आईओएस, उद्देश्य-सी, ब्लूटूथ-लोनेर्जी, कोर-ब्लूटूथ, राज्य बहाली

बीएलई बहाली / संरक्षण अप्रत्याशित प्रभाव - आईओएस, उद्देश्य-सी, ब्लूटूथ-लोनेर्जी, कोर-ब्लूटूथ, राज्य बहाली

मैंने बहाली की कार्यक्षमता को कार्यान्वित किया है CoreBluetooth और यह ठीक काम करता है, एक चीज़ को छोड़कर - पृष्ठभूमि में एक सप्ताह के बाद (+/- - 100% के लिए निश्चित नहीं), बिना खोलने के, ऐप को समाप्त कर दिया गया और किसी भी बीएलई-आधारित घटनाओं (कुछ बार परीक्षण किया गया) पर अब बहाल नहीं किया गया।

मैं सभी बीएलई संबंधित कार्य में लॉगिंग भी जोड़ता हूं, जोड़ता हूंदुर्घटनाओं को कैप्चर करने के लिए विश्लेषणात्मक, अतिरिक्त प्रक्रिया को बहाल करने की प्रक्रिया / घटनाओं को ट्रैक करना - और इस लॉग / जानकारी / रिपोर्ट की जांच करने के बाद - कोई अपवाद या कुछ ऐसा नहीं मिला जो मेरे ऐप को समाप्त कर सके।

सवाल यह है - क्या कोई मुझे कारण बता सकता है कि मुझे ऐसा व्यवहार क्यों मिला?

उत्तर:

उत्तर № 1 के लिए 1

ब्लूटूथ से जुड़े मुद्दों को वास्तव में मुश्किल हो सकता हैकी पहचान। हम अतीत में कई अस्पष्ट बगों में आए थे। डिवाइस पर CoreBluetooth लॉग को देखने के लिए बीएलई अब काम नहीं कर रहा था या गलत व्यवहार क्यों कर रहा था यह निर्धारित करने का एकमात्र तरीका था।

यदि आपने पहले से कोशिश नहीं की है तो आप इन लॉग को कॉन्फ़िगरेशन प्रोफ़ाइल के माध्यम से सक्षम कर सकते हैं जिसे आप डाउनलोड कर सकते हैं ऐप्पल डेवलपर पेजेस (ब्लूटूथ के लिए देखो और निर्देशों का पालन करें)।

जैसे ही आप लॉगिंग सक्षम कर सकते हैं आप कर सकते हैंअंतर्निहित बीएलई स्टैक से एक पूर्ण लॉग डाउनलोड करें जो आपको बताएगा कि क्या गलत हुआ। वे आपको यह भी बताते हैं कि आपने एपीआई को किसी तरह से दुरुपयोग किया है या नहीं। उम्मीद है की वो मदद करदे।


उत्तर № 2 के लिए 1

CoreBluetooth राज्य के साथ अपने अनुभव सेसंरक्षण और बहाली मैं इस निष्कर्ष पर आया हूं कि यह भरोसेमंद काम नहीं करता है। आप इसे "ठीक" प्रकार के काम कर सकते हैं, लेकिन पृष्ठभूमि में लंबे समय तक लंबित कनेक्शन का उपयोग करते समय आप इसे विश्वसनीय रूप से फिर से कनेक्ट करने के लिए कभी नहीं प्राप्त करेंगे।

मैंने इसके बारे में कई कीड़े की सूचना दी है, लेकिनमेरी राय में सबसे गंभीर यह है कि यदि ऐप समाप्त होने पर ब्लूटूथ प्रबंधक राज्य स्विच करता है तो सभी लंबित कनेक्शन खो जाएंगे (क्योंकि उन्हें मॉड्यूल या आईओएस स्टैक द्वारा याद नहीं किया जाता है)। चूंकि ब्लूटूथ राज्य स्विच आपके ऐप को फिर से लॉन्च नहीं करेगा, इसका मतलब यह है कि किसी भी समय आपके लंबित कनेक्शन को खोया जा सकता है और आपको इसके बारे में पता नहीं चलेगा। यह अपने प्रभावी ढंग से इसका मतलब है कि राज्य बहाली बल्कि बेकार है। आप कह सकते हैं कि यह एक बग नहीं है, लेकिन एक खराब डिजाइन पसंद rater ...

एक और बात यह है कि कभी-कभी ढांचा मिल जाता हैएक बुरे राज्य में "अटक" (संभवतः एक आंतरिक दौड़-स्थिति या इसी तरह से)। यह यादृच्छिक रूप से हो सकता है, लेकिन आप कनेक्टफिरिफेरल को तत्काल किया गया थाफेलटोकनेक्ट में या कॉलकबैक कनेक्टबैक में कॉल करके इसे आसानी से पुन: उत्पन्न कर सकते हैं। जब ऐसा होता है कनेक्शन कनेक्शन कनेक्ट करने के लिए सेट किया जाएगा जबकि वास्तव में यह नहीं है।

और इसी तरह…

/ एंटोन