0

CoreBluetooth에 대한 복원 기능을 구현했으며 배경을 열지 않고 앱을 종료 한 후 1 주일 후 (+/- - 확실하지 않은 경우 100 %) 제대로 작동합니다. BLE 기반 이벤트 (몇 번 테스트)에서 더 이상 복원되지 않습니다.BLE 복원/보존 예기치 않은 효과

또한 모든 BLE 관련 작업에 로깅을 추가하고, 충돌을 캡처하기위한 분석을 추가하고, 프로세스 및 이벤트 복원을 추가로 추적하고/logs/info/reports 로그를 확인한 후 예외 또는 앱을 종료 할 수있는 항목을 찾지 못했습니다.

질문은 - 누군가 내가 왜 그런 행동을하는지 이유를 설명 할 수 있습니까?

답변

1

블루투스 관련 문제는 실제로 식별하기 어려울 수 있습니다. 우리는 과거에는 설명 할 수없는 몇 가지 버그를 발견했습니다. BLE가 더 이상 작동하지 않거나 오작동하지 않는 이유를 확인하는 유일한 방법은 장치에서 CoreBluetooth 로그를 보는 것입니다.

아직 시도하지 않은 경우 Apple Developer Pages에서 다운로드 할 수있는 구성 프로파일을 통해 이러한 로그를 활성화 할 수 있습니다 (블루투스를 찾아 지침을 따르십시오).

로깅을 사용하도록 설정하면 기본 BLE 스택에서 전체 로그를 다운로드 할 수 있으며 잘못된 내용을 알려줍니다. API를 오용 한 적이 있는지 알려주기도합니다. 희망이 도움이됩니다.

+0

/안톤, – gbk

+0

네, 아이폰 OS 개발의 숨겨진 보물 중 하나입니다. 블루투스 스택에 대한 많은 C++ 로깅을 읽을 준비가되어 있어야합니다 ;-). –

1

CoreBluetooth State Preservation and Restoration에 대한 제 경험을 통해 안정적으로 작동하지 않는다는 결론에 도달했습니다. "ok"와 같은 작업을 수행 할 수는 있지만 백그라운드에서 오래 실행중인 연결을 사용하는 동안 안정적으로 다시 연결하지 못하게됩니다.

나는 이것에 관해 몇 가지 버그를보고했지만, 가장 심각한 의견은 앱이 종료 된 상태에서 블루투스 관리자가 상태를 전환하면 보류중인 모든 연결이 손실 될 것입니다 (모듈이나 모듈에 기억되지 않기 때문에). iOS 스택). 블루투스 상태 스위치로 인해 앱이 다시 시작되는 것은 아니므로 보류중인 연결이 끊어 질 수 있으며 어떤 시점에서는이를 알 수 없습니다. 이것은 자체적으로 국가 복원이 오히려 쓸모 없다는 것을 의미합니다. 당신은 이것이 버그는 아니지만 가난한 디자인 선택이라고 말 할 수 있습니다 ...

또 하나의 이유는 가끔 프레임 워크가 나쁜 상태 (아마도 내부 경쟁 조건 또는 이와 유사한 것)에서 "붙어"버리는 경우가 있습니다. 이는 무작위로 발생할 수 있지만 didFailToConnect 또는 didDisconnect 콜백에서 connectPeripheral을 즉시 호출하여 쉽게 재현 할 수 있습니다. 이 경우 connectionState는 실제로 연결되어 있지 않지만 연결 상태로 설정됩니다. 즉, 이벤트 등의 가능성에 대해 생각하지 않습니다 도움이

등등 ...