为了适配供应商 EspBlufiForiOS
,经过我的内部迭代。目前能做到比较稳定的状态。
更新
- 支持 Cocoapods
- log 回调
- 提升稳定性
- 兼容最新的 OpenSSL 版本,兼容模拟器运行。
Cocoapods
blufi-library,目前还没有推到官方的 pod repo。建议拉下来后 push 到自己的私有 repo。
log 回调
在 BlufiDelegate 中新增了 log 日志回调,方便用自己的日志组件打印,比如:CocoaLumberjack。
提升稳定性
- 增加 nil 判断,在断开重连后偶现 _writeChar 为 nil 导致闪退的问题。
- 增加从 CBCentralManager 初始化 BlufiClient,如果你想自己搜索蓝牙设备,与其它组件共享 CBCentralManager 对象(EspBlufiForiOS 的代码质量真的是一言难尽)。
- _requireAck 默认开启,提升稳定性。
模拟器运行警告
最重要的部分,自从项目依赖 EspBlufiForiOS 以来,出现了很多问题:
1.模拟器运行报错
Could not find module 'xxx' for target 'x86_64-apple-ios-simulator'; found: arm64-apple-ios-simulator
2.为了解决上述问题,你可能会在 Podfile
配置排除模拟器的 arm64
运行。
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
导致模拟器运行的时候各种异常,Xcode 控制台警告:
Warning: Error creating LLDB target at path '/Users/xx/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphonesimulator/XXX.app'- using an empty LLDB target which can cause slow memory reads from remote devices.
有时候模拟器再次运行的时候还会黑屏!
因为你在一个 arm64 的模拟器里面(m1,m2 芯片的电脑上)运行一个 x86_64 架构的 App😭。
问题的根本原因是由于 EspBlufiForiOS
的依赖库 OpenSSL-Universal v1.0.2.20 不支持模拟器的 arm64 架构。
它的库本身甚至都不是依赖的,而是直接包含
libcrypto.a
libssl.a
两个文件,无力吐槽!
根据查找 OpenSSL,发现它在新版本里面已经支持 OpenSSL.xcframework
。
XCFramework 是苹果新出的库类型,在 Xcode 11 及 Cocoapods 1.9 以上版本被支持,与普通动态库/静态库最大的区别是将多个平台的二进制库,捆绑到一个可分发的.xcframework捆绑包中,支持所有的苹果平台和架构。
为了兼容 OpenSSL
最新的版本,必须改造 BlufiSecurity
里的 dhGenerateKeys
函数。经过多次测试,目前我的 blufi-library 能完美解决上述问题。
本文由 Bill 创作。
最后编辑时间为: 2023.07.18 at 03:12 pm