⚛️ 硬核原教旨主义:iOS / Android 原生开发实兵操演
并非所有的公司和团队都热爱跨平台(Flutter / Tauri)。对于一些将执行效率与内存管理看到比生命还重的纯血统大厂商业项目,他们甚至厌恶哪怕增加几兆的虚拟内核体积。
在这个全维度的宇宙中,本项目还在 apps/android/ 与 apps/ios/ 中提供了一张底牌——完全摆脱所有的跨端壳子,使用最纯净的 Kotlin + Compose 以及 Swift + CoreBluetooth 写就的原生蓝牙架构模版。
🍏 进击的 iOS 原生堡垒 (XCode 实战)
在这个目录下,没有大红大紫的三方包,只有纯粹无暇的 Apple 生态血液。
环境极速准备
- 您的电脑不可被替代:必须是一台运行着较新 macOS 系统的 Mac 设备。
- 安装巨无霸:去 App Store 拖下最新版本的 XCode。
- 请注意!iOS 模拟器不支持任何蓝牙扫描!您必须拥有一台实体的 iPhone 或者 iPad,并且手头必须备着线(或网络调试环境)供打点。
底层 CoreBluetooth 操纵指北
原生底层绝不包容错误!如果您要去二开我们的 apps/ios/ 代码:
- iOS 严格基于回调委托 (
Delegates) 运作!不要想着去向它塞异步的 Promise 大锅菜。 - 对于跨组件或者单例管理,了解好
CBCentralManagerDelegate是重中之重。 - 由于原生没有像浏览器那样强大的
requestAnimationFrame宏观防抖护持。如果下放您的修改引发了 100Hz 高频 Notify 回调拥堵,将会对基于 SwiftUI 构建的渲染层造成毁灭性打击(页面被巨幅堆栈直接卡死崩毁)。小心调配事件节流!
🤖 Kotlin 原生开发局 (Android Studio 实战)
Android 在版本迭代后引入了非常暴力的架构。在此我们采用官方极新标准:Jetpack Compose (摒弃了老旧的 XML UI 书写机制) + Kotlin Coroutine (协程体系)。
环境与真机准备
- 请自备 Android Studio (Flamingo 或更新版本)。
- 同样的原因,安卓自带的老旧模拟器在底层是不允许蓝牙适配器透传介入的,必须自备 Android 真机进行 ADB 跑线或无线安装!
蓝牙核心痛点避退
如果您要改动我们的 Kotlin 实现: 要了解 Android 蓝牙开发最臭名昭著的错误:133 死亡代号 (GATT_ERROR)。 它非常容易在低端手机以及同时连接数量过多时爆发,而且几乎不给你留下任何有效栈底堆栈。
- 我们预埋的回滚操作机制请不要抹除!一定要预留好多次清空
BluetoothGatt.close()的缓冲区来防御这种无法自愈的神经刀报错。 - 如果修改界面代码,放心去
apps/android/.../ui/层操作。同样,颜色的基调来自于我们根目录的总阀门!