通過藍(lán)牙升級硬件版本:
這里主要參考這個項目:iOS-nRF-Toolbox,項目中的iOSDFULibrary就是DFU升級的庫,也是解決DFU升級最重要的組件。我們只要把這個庫集成到我們的項目中,就能夠完成nRF設(shè)備的DFU升級了。因?yàn)?a target="_blank">iOSDFULibrary現(xiàn)在是用swift編寫的,如果你的項目是oc,請按以下步驟,添加。
一,iOSDFULibrary導(dǎo)入:
利用pod導(dǎo)入,具體的導(dǎo)入命令如下圖:
然后 command B 編譯一下。
坑一:忘記添加use_frameworks! 。
(1)如果在Podfile文件里不使用 use_frameworks! 則是會生成相應(yīng)的 .a文件(靜態(tài)鏈接庫),通過 static libraries 這個方式來管理pod的代碼。
(2)Linked:libPods-xxx.a包含了其它用pod導(dǎo)入的第三方框架的.a文件。
(3)如果使用了use_frameworks! 則cocoapods 會生成相應(yīng)的 .frameworks文件(動態(tài)鏈接庫:實(shí)際內(nèi)容為 Header + 動態(tài)鏈接庫 + 資源文件),使用 dynamic frameworks 來取代 static libraries 方式。?
(4)Linked:Pods_xxx.framework包含了其它用pod導(dǎo)入的第三方框架的.framework文件。
請參考鏈接:https://segmentfault.com/a/1190000007076865
坑二:command B 編譯后,會發(fā)現(xiàn)很多之前cocoapods導(dǎo)入的第三方庫頭文件會報錯。
因?yàn)樵跊]有添加use_frameworks! 之前,利用cocoapods導(dǎo)入的第三方庫生成相應(yīng)的 .a文件(靜態(tài)鏈接庫),當(dāng)我們在代碼中引用第三方文件時,頭文件一般按系統(tǒng)提示的尖括號<xxx.h>書寫。如果導(dǎo)入 use_frameworks 后就要改成".h"就OK了。
<>和""區(qū)別如下:
<>: 引用系統(tǒng)文件,它用于對系統(tǒng)自帶的頭文件的引用,編譯器會在系統(tǒng)文件目錄下去查找該文件。
"": 用戶自定義的文件用雙引號引用,編譯器首先會在用戶目錄下查找,然后到安裝目錄中查。
上面兩種方式的引用實(shí)質(zhì)是搜索路徑的不同。但無論哪種方式,編譯器會將相對路徑與引用內(nèi)容組合成頭文件的絕對路徑:搜索路徑+相對路徑
二,引用iOSDFULibrary
點(diǎn)擊pod文件下面的frameWork
oc中導(dǎo)入swift第三方框架(iOSDFULibrary的第三方框架包括iOSDFULibrary,zip),第三方框架應(yīng)選擇swift語言環(huán)境,具體操作步驟如下圖:
在你需要用到iOSDFULibrary的文件中,導(dǎo)入#import <iOSDFULibrary/iOSDFULibrary-Swift.h> ,就可以像調(diào)用OC方法一樣調(diào)用iOSDFULibrary提供的swift方法了。
二,使用iOSDFULibrary
使用iOSDFULibrary具體參見鏈接:https://blog.csdn.net/zthhsa/article/details/78624830
坑三:當(dāng)更新完成iOSDFULibrary后,按照項目需求,再次鏈接藍(lán)牙設(shè)備,就不能鏈接。
具體原因:經(jīng)過排查,是因?yàn)榉椒?- (void)centralManager:(CBCentralManager?*)central didDiscoverPeripheral:(CBPeripheral?*)peripheral advertisementData:(NSDictionary<NSString?*,id> *)advertisementData RSSI:(NSNumber*)RSSI ?沒有被調(diào)用。經(jīng)深入排查原因是因?yàn)?b>CBCentralManager?的delegate為nil。那么為什么DFU更新完成后,delegate為nil呢?點(diǎn)進(jìn)其framework可以看出在iOSDFULibrary的frameWork內(nèi)在DFU更新完成后CBCentralManager 的delegate被設(shè)置了nil。所以如過藍(lán)牙的代理方法被調(diào)用,就在DFU更新完成的回調(diào)方法中,再把CBCentralManager的代理重新賦值即可。
三,上傳文件 沒有踩過坑 略
四,封裝靜態(tài)包
http://www.lxweimin.com/p/e69600b0485d
在這里,因?yàn)樗{(lán)牙只能在蘋果手機(jī)上運(yùn)行,所以封裝的藍(lán)牙包只能是在運(yùn)行在手機(jī)上的.a靜態(tài)包。在模擬器上運(yùn)行會報錯。