公司項目是做心電監(jiān)測的,實時采集心電數(shù)據(jù).
項目是自己基于CoreBluetooth
封裝的, 沒有采用第三方庫.
原來沒有做過藍牙通信, 也是從頭學起的, 好在iOS
開發(fā)相對于簡單一些, 接口封裝的都比較簡單實用, 不過這期間因為設備寨蹋、高標準的需求, 也的確是遭遇了不少的挑戰(zhàn), 這一路走來也都逐個突破了.
e.g.
- 當時設備的Pairing影響到重連
最終查閱一堆資料, 最終是設備端采取的安全機制問題, 也因此查閱了藍牙底層協(xié)議棧,對藍牙進一步有所了解和掌握,雖然對于iOS開發(fā)上并無太大幫助,但對技術的基類,進一步的研究學習,相信今后還是有很大的幫助的,在學習過程中也發(fā)現(xiàn)很多從事藍牙開發(fā)的iOS工程師,對藍牙技術棧并不了解,或者了解; 也因此了解到, 雖然公司本質(zhì)是做藍牙硬件通信這方面的, 但是對藍牙的技術儲備實在是不敢恭維
- 通信速度沒有達到廠家的最高標準
這個也是棘手的問題, 從代碼層又無從下手, iOS上又無法修改ATT_MTU_Size(獲取底層上可以實現(xiàn),但和很多從事這方面的人交流或者是查詢很多資料后并未發(fā)現(xiàn)如何去實現(xiàn)),在最終無奈的情況下,郵件將我的疑問反饋給工廠那邊, 那邊又搪塞說啊啊啊你這個速度就已經(jīng)很正常了...但是在最高波特率115200下的傳輸速度不穩(wěn)這件事還是無法解決, 關于iPhone 7/plus新增的BLE extension功能有何提升,在速度上我也是沒有看出明顯變化, 總之這件事似乎也不了了之了
- 強實時, 保后臺
因為是做心電監(jiān)測的, 時效性肯定是重中之重, 起初做項目的時候壓根不知道要保證那么長的時間, 項目做出來了, 突然說出來這個需求,當時就有點冒冷汗了,自測一次最長時間是48h (原公司只有Android項目, 據(jù)說最早是外包的, 由于需要做iOS, Android自學后寫出來的, 當時是藍牙3.0, 因為MFI等一些原因被拒, 然后打算只做BLE 4.0,并專門招一個iOS), 算是達到了最低標準, 也松了口氣, 而且項目內(nèi)原來的一部分數(shù)據(jù)處理存在內(nèi)存泄漏, 優(yōu)化后還是有提升空間的
- OTA
做藍牙不得不提OTA, 也就是空中升級功能, 一開始并沒有這個需求, 不過既然從事了藍牙開發(fā), 就在不斷學習藍牙中提早的了解了這方面的姿勢, 在需求下來后, 因為硬件那邊先要適配Android 3.0 , 所以我只能先按照規(guī)定下來的邏輯擼代碼了, 最終在4.0設備適配好后, 在進行聯(lián)調(diào)和優(yōu)化, 好在準備充分,這塊算是最順利的, 我們的產(chǎn)品升級文件比較小,大概155KB的一個txt文件,這里要提一下,網(wǎng)上很多資料都說iOS發(fā)送文件長度超過20Byte就會丟掉,我分別按照20Byte、50Byte众辨、70Byte和150Byte等調(diào)試過, 除了50拦焚、70Bye丟包率嚴重外,150Byte最為穩(wěn)定, 并不像網(wǎng)上說的那樣, 既然單個包的大小我定位了150Byte,這里面還會包含于硬件規(guī)定好的協(xié)議頭、尾等8Byte, 這樣數(shù)據(jù)部分是142Byte, 所以將原始文件每142Byte拆出來加上協(xié)議8Bye組成一個個150Byte的包, 一次完整的升級文件大概被分成1093個包左右, 2min中內(nèi)完成, 而且在我連續(xù)幾十次的不斷測試下,才會出現(xiàn)幾個丟包, 這主要與設備頻繁的執(zhí)行OTA過程,設備發(fā)熱等原因有關, 如果只是一次或者幾次的執(zhí)行OTA過程, 基本上可以保證丟包率為0
隨著功能不斷的添加, 優(yōu)化, 適配, 之前最近幾天前發(fā)現(xiàn)一個重大BUG
, 連接設備后, 大概5分鐘左右會斷開一次, 控制臺報錯信息:
Error Domain = CBErrorDomain
Code = 6 "The connection has timed out unexpectedly."
UserInfo = {
NSLocalizedDescription =The connection has timed out unexpectedly.
}
測試設備:iPhone 6
設備系統(tǒng):iOS 11.0.X
(具體版本號不記得了)
突然冒出來這么個大BUG
, 我也是懵逼了, 難道最近一直忙著寫其他需求, 忽略了? 最近改代碼新增BUG
? 還是一直存在沒留意沒發(fā)現(xiàn)?
當時身邊沒有其他測試手機,就想著用自己的手機先跑下 ,結果Xcode
提示不支持該版本iOS
系統(tǒng), 然后我就想著是不是iOS
系統(tǒng)自身的BUG
,把測試機給升級到了iOS 11.1.1
, 可升級完后, Xcode 9.0
又不能支持這么高版本的iOS
系統(tǒng)了. 檢查Xcode
更新又沒有, 真是蛋疼啊.....
換了設備,依舊, 找了個Android
機跑了下, 一切正常, 又找了個iOS 10
的測試機跑來一切正常, 稍微淡定了一些, 看樣子是新增問題, 等等看, 等收到Xcode
更新后升級完跑在iOS 11.1.1
上看看.于是先去查詢下這方面資料
遇到這個問題的很少, 在Stack Overflow
上搜到幾個, 系統(tǒng)版本還是iOS 8.0+
的,并不是近期的,簡單看了下, 應該不是一回事. 在蘋果技術論壇中發(fā)現(xiàn)了一例相同的BUG
鏈接, 等了很久都沒有更新, 查詢資料也沒有什么進展, 不得不去蘋果網(wǎng)站手動找Xcode
更新, 更新后,跑在iOS 11.1.1
上,目前一切正常, 希望這個BUG
被蘋果真正修復了, 否則這樣嚴重的BUG
對于藍牙強實時的產(chǎn)品就是嚴重的沖擊.