Quand le SDK ne voit rien, demander à CoreBluetooth ce que LUI voit
Autorisation Bluetooth accordée, alerte acceptée — et toujours zéro appareil. Or un scan BLE en environnement normal voit toujours quelque chose : le problème n'est donc pas la montre. Restait à savoir s'il venait de la radio ou de notre usage du SDK, et rien dans le message ne permettait de trancher. J'ai vérifié dans les sources ce qui pouvait faire taire le scan côté SDK, et écarté deux hypothèses plutôt que de les supposer : `servicesToScanFor` est nil chez eux aussi, et un `scanPreFilter` nil ACCEPTE les appareils découverts (`if …, let filter = self.scanPreFilter` — la condition échoue, le rejet est sauté). Ni l'un ni l'autre n'explique le silence. Donc on mesure. Quand le SDK ne remonte aucune session, la sonde relance un scan CoreBluetooth NU, sans le SDK, et le nombre part dans le message : - 0 appareil en scan direct → la radio va bien mais ne voit rien : montre éteinte, hors de portée, ou connectée ailleurs de façon exclusive. - N appareils en scan direct → la radio va bien, le problème est dans notre intégration du SDK, ni dans la montre ni dans l'iPhone. Ce sont deux chantiers opposés, et deviner lequel a déjà coûté trois allers-retours aujourd'hui. Deux tests verrouillent la distinction. 77 tests au vert sur tests-linux. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -180,3 +180,26 @@ extension PolarPftpErrorTests {
|
||||
XCTAssertNotEqual(radio, montre)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Radio muette ou SDK muet : ce n'est pas le même diagnostic
|
||||
//
|
||||
// Le 2026-08-31, le SDK ne remontait aucune session et rien ne disait si
|
||||
// CoreBluetooth lui-même voyait quelque chose. Sans cette mesure, impossible de
|
||||
// savoir s'il fallait chercher du côté de la montre ou de notre code.
|
||||
|
||||
extension PolarPftpErrorTests {
|
||||
|
||||
func testAucunAppareilEnScanDirectAccuseLEnvironnement() {
|
||||
let e = PolarPftpError.sdkSilencieux(vusParCoreBluetooth: 0)
|
||||
XCTAssertTrue(e.description.contains("hors\u{00A0}de portée")
|
||||
|| e.description.contains("hors de portée"))
|
||||
XCTAssertFalse(e.description.contains("intégration"))
|
||||
}
|
||||
|
||||
func testDesAppareilsEnScanDirectAccusentLeSDK() {
|
||||
let e = PolarPftpError.sdkSilencieux(vusParCoreBluetooth: 12)
|
||||
XCTAssertTrue(e.description.contains("intégration du SDK"))
|
||||
XCTAssertTrue(e.description.contains("12"))
|
||||
XCTAssertTrue(e.description.contains("La radio va bien"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user