杰理 SDK 文档中心
首页
首页
  • SDK 框架库

    • JL_BLEKit 蓝牙通信核心
    • JL_AdvParse 广播包解析
    • JL_HashPair 加密配对
    • JL_OTALib 固件升级
    • JLDialUnit 彩屏仓与表盘控制
    • JLBmpConvertKit 位图转换
    • JLPackageResKit 资源包处理
    • JLLogHelper 日志工具
  • 核心功能模块

    • 音乐与媒体控制
    • 音效调节与均衡器
    • 设备发现、连接与设置
    • Auracast 广播接收与发射
    • 文件浏览、闹钟、FM 与灯光控制
    • ANC、按键设置与查找设备
    • AI 翻译与自定义命令
  • 应用架构与工程支撑

    • 杰理之家 App 架构与导航
    • 数据存储与缓存
    • Swift 工具与扩展层
    • JLAudioUnitKit 示例工程
    • SDKTestHelper 测试工具
  • 开发文档与资源

    • 文档中心与 JL_OTALib API 说明
    • 自定义蓝牙接入方式
    • 调试技巧与问题排查
    • 版本历史与社区支持

数据存储与缓存

本文档介绍 iOS-JL_Bluetooth(杰理科技 iOS 蓝牙 SDK 及其配套 Demo)应用架构中「数据存储与缓存」层面的职责划分、仓库现状与验证结论,帮助开发者在接入 SDK 时正确选择持久化与缓存方案。

Purpose and Scope

本页面覆盖应用架构分层中的数据存储与缓存(Data Storage & Cache)主题,包括:

  • 该层在 JL_Bluetooth iOS 应用中的定位与边界;
  • 本仓库快照中可直接验证的存储相关证据(目录结构、打包形式);
  • 可访问源码中存储/缓存实现的存在性核查结论;
  • 无法在当前仓库快照中验证、需要进一步获取源码的部分。

与本主题相关的蓝牙连接、音频编解码、设备协议等内容属于其他能力页面,不在本文档范围内。例如 code/Example of audio encoding and decoding V1.1.0.zip 中的音频编解码示例属于独立的音频能力页;Demo 工程所依赖的高德地图(AMap)框架属于第三方地图能力,本文档仅在描述仓库结构时提及。

⚠️ 证据说明:本仓库快照中,JL_Bluetooth 的核心源码以 zip 压缩包(code/Example of audio encoding and decoding V1.1.0.zip)与二进制 framework 形式分发,未以可读源码形式展开。因此,本页面中所有「未能在源码中验证」的结论均如实标注,不做臆测填充。

Overview

在 iOS 应用中,「数据存储与缓存」层承担以下职责(架构层面的通用定位,用于理解 SDK 与 App 的关系):

  • 持久化配置:保存 SDK 初始化参数、设备绑定信息、用户偏好;
  • 数据缓存:缓存设备返回的数据(如电量、固件版本、音频/协议数据),减少重复读取;
  • 临时文件管理:管理固件升级包、音频文件等临时资源的写入与清理。

对于 iOS-JL_Bluetooth 仓库而言,当前快照呈现的结构为:

路径内容可验证程度
README.md / README_EN.md项目说明(中/英文)✅ 存在
LICENSE开源许可证✅ 存在
code/JieLi_Home_Demo/官方 Demo 工程,内含 AMap(高德地图)系列 framework✅ 存在(framework 为二进制)
code/Example of audio encoding and decoding V1.1.0.zip音频编解码示例源码压缩包✅ 存在(zip 内源码不可直接读取)

对仓库内可访问的源码文件执行关键字检索(NSUserDefaults、NSKeyedArchiver、writeToFile、sqlite、FMDB、YYCache),未发现任何存储/缓存实现——这是预期结果:核心实现位于 zip 包与二进制 framework 内,当前快照无法展开验证。

Architecture

下图展示当前仓库快照中可验证的目录结构,以及「数据存储与缓存」层在应用架构中的逻辑位置(虚线框为概念层,非仓库内可验证文件):

flowchart TD
    subgraph sg_Repo["iOS-JL_Bluetooth 仓库(main 分支)"]
        Root["仓库根目录"]
        Readme["README.md / README_EN.md"]
        License["LICENSE"]
        Code["code/"]
        Demo["JieLi_Home_Demo/ 工程"]
        AMap1["AMapFoundationKit.framework"]
        AMap2["AMapLocationKit.framework"]
        AMap3["AMapSearchKit.framework"]
        Zip["Example of audio encoding and decoding V1.1.0.zip"]
    end

    subgraph sg_AppArch["App 架构分层(概念层)"]
        UI["UI 层"]
        Service["业务/服务层<br/>JL_Bluetooth SDK"]
        Store["数据存储与缓存层<br/>(本文档主题)"]
        BLE["BLE 蓝牙通道"]
    end

    Root --> Readme
    Root --> License
    Root --> Code
    Code --> Demo
    Demo --> AMap1
    Demo --> AMap2
    Demo --> AMap3
    Code --> Zip

    UI --> Service
    Service --> Store
    Service --> BLE
    Store -. "实现位于 zip/二进制 framework,<br/>本快照无法展开验证" .-> Zip

图注:

  • 实线部分为仓库中已验证的文件/目录关系:Demo 工程依赖 AMap 系列 framework,源码示例以 zip 打包;
  • 虚线部分为架构概念层:数据存储与缓存层由 App 或 SDK 内部实现,与蓝牙通道解耦——存储层不直接依赖 BLE 时序,便于在重连、断连场景下独立读写。

为什么存储层与蓝牙层分离

从架构意图看,将存储/缓存独立成层(而非散落在蓝牙回调中)可以带来三点收益:

  1. 回调线程安全:BLE 回调多发生在系统队列,若直接写文件/UserDefaults 易造成竞态;独立存储层统一收敛写入口;
  2. 断线恢复:设备重连后需要恢复上次的绑定信息与缓存数据,集中式存储便于恢复流程复用;
  3. 可替换性:App 可以选择 UserDefaults、文件、数据库等不同实现,SDK 仅依赖存储抽象。

已验证的仓库证据

以下结论全部来自本次对仓库快照的实际检索(文件列举与关键字检索),可作为后续排查的依据:

仓库根目录

  • README.md:项目中文说明;
  • README_EN.md:项目英文说明;
  • LICENSE:许可证文件。

code/ 目录

  • code/JieLi_Home_Demo/:官方 Demo 工程,包含第三方高德地图 framework(AMapFoundationKit、AMapLocationKit、AMapSearchKit)。这些框架为二进制形式,仅提供头文件(.framework/Headers/*.h),与存储/缓存主题无关;
  • code/Example of audio encoding and decoding V1.1.0.zip:音频编解码示例源码包。JL_Bluetooth 核心实现(含可能的存储/缓存代码)应以 zip 形式存放于此路径附近,或随 SDK 二进制分发,本快照无法直接展开。

关键字检索结果

对可访问的源码文件(.h/.m/.mm)检索以下模式,结果均为空:

检索模式结果说明
NSUserDefaults无匹配未发现基于 UserDefaults 的偏好存储实现
NSKeyedArchiver无匹配未发现归档序列化实现
writeToFile无匹配未发现文件写入实现
sqlite / FMDB无匹配未发现数据库实现
YYCache无匹配未发现第三方缓存库集成

结论:在当前可访问的源码范围内,未找到任何数据存储与缓存的具体实现(Implementation details not found in source)。核心实现位于 zip 包或二进制 framework 内,需解压或获取 SDK 源码后方可验证。请勿基于本页推断具体 API 名称或行为。

存储与缓存实现现状(缺口说明)

已知缺口

  1. SDK 内部存储:设备绑定信息、协议数据缓存等是否由 SDK 内部持久化,无法从本快照验证;
  2. Demo 的存储用法:JieLi_Home_Demo 工程中的存储调用点(如保存设备 MAC、音频文件落盘)不可见——工程内可读文件仅为第三方框架头文件;
  3. 缓存策略:是否有 LRU/TTL 等缓存淘汰策略、缓存目录(Library/Caches 或 tmp)选择,均无源码证据。

建议的验证路径

  • 解压 code/Example of audio encoding and decoding V1.1.0.zip,检索其中的 NSUserDefaults / writeToFile / NSFileManager 使用点;
  • 获取 JL_Bluetooth SDK 的完整源码(或反查 framework 内导出符号),确认是否存在 JL_...Cache、JL_...Manager 等存储类;
  • 对照官方文档中「设备信息保存」「固件升级包管理」章节,确认存储层对外 API。

故障模式、边界情况与并发(上下文指南)

以下内容为 iOS 存储/缓存层的通用工程注意事项,非仓库源码验证结论,供接入 JL_Bluetooth 时参考:

  • 写盘与蓝牙回调的并发:BLE 回调通常不在主线程;若在回调中直接写文件,需保证写入串行化(如串行队列或 @synchronized),避免多设备/多回调并发写导致数据错乱;
  • 缓存目录的清理风险:若使用 Library/Caches 存放临时音频/升级包,系统可能在存储紧张时清理该目录,恢复流程需容忍文件缺失并重新下载/生成;
  • 固件升级包的完整性:升级包写入中断(App 被杀、磁盘满)后,下次升级前应校验文件大小/校验和,避免向设备下发损坏数据;
  • UserDefaults 的写入时机:高频写入(如实时电量缓存)不宜直接写 UserDefaults,应做内存缓存 + 周期落盘,避免频繁磁盘同步影响性能。

相关链接

  • README.md — 项目说明(中文)
  • README_EN.md — 项目说明(英文)
  • code/JieLi_Home_Demo — 官方 Demo 工程目录
  • code/Example of audio encoding and decoding V1.1.0.zip — 音频编解码示例源码包(核心实现入口)

使用示例与 API 参考(当前不可用)

按照页面规范,本文档应提供从仓库源码提取的存储/缓存使用示例与 API 签名。由于以下原因,当前无法提供任何代码示例(No code example available):

  1. 仓库中可访问的源码不包含任何存储/缓存实现(见上文关键字检索结果);
  2. 核心源码位于 zip 压缩包与二进制 framework 内,工具无法展开读取;
  3. 为避免臆造 API 签名与行为,本页面不生成任何未经源码验证的示例代码。

待获取 SDK 完整源码后,建议补充以下内容:

  • NSUserDefaults 保存设备绑定/偏好设置的示例;
  • 固件升级包写入 Library/Caches 的示例;
  • 存储管理类的初始化与调用示例(API 签名、参数、返回值、异常);
  • 存储层与蓝牙回调线程交互的并发示例。

总结

  • 本文档明确了「数据存储与缓存」层在 iOS-JL_Bluetooth 应用架构中的定位与边界;
  • 如实记录了仓库快照中可验证的证据(目录结构、打包形式、检索结果);
  • 明确标注了无法验证的缺口(SDK 内部存储实现、缓存策略、Demo 存储调用点),并给出后续验证路径;
  • 未包含任何未经源码验证的 API 或代码示例,所有缺口均以「Implementation details not found in source」如实标注。
Prev
杰理之家 App 架构与导航
Next
Swift 工具与扩展层